0

指定された透明度から指定された透明度に要素をフェードできる関数を見つけようとしています。たとえば、0 から 0.7 までですが、見つけられるものはすべて 0 から 1 または 1 から 0 のいずれかにフェードします。何から何までを指定できるものは何も見つかりません。私が見つけた関数のリバース エンジニアリングの試みも失敗しました。

また、フレームワークなしでこれを行いたいです。

ありがとう!!

4

3 に答える 3

3

特別なトリックはありません。不透明度スタイルをタイムアウト/間隔で繰り返し 0 または 1 以外に設定するだけです。

これは、出発点として使用できる簡素化されたフェード機能です。

<script type="text/javascript">
    function fade(element, o0, o1, t) {
        // IE compatibility. Detect lack of native 'opacity' support, and ensure element
        // has layout for IE6-7.
        //
        var canopaque= 'opacity' in element.style;
        if (!canopaque && 'currentStyle' in element && element.currentStyle.hasLayout===false)
            element.style.zoom= '1';

        function setOpacity(o) {
            if (canopaque)
                element.style.opacity= ''+o;
            else
                element.style.filter= 'alpha(opacity='+Math.round(o*100)+')';
        }

        var t0= new Date().getTime();
        setOpacity(o0);
        var interval= setInterval(function() {
            var dt= (new Date().getTime()-t0)/t;
            if (dt>=1) {
                dt= 1;
                clearInterval(interval);
            }
            setOpacity(o1*dt+o0*(1-dt));
        }, 25);
    }
</script>
<p id="foo"> hello. </p>
<button onclick="fade(document.getElementById('foo'), 0.7, 0, 2000);">fade 0.7 to 0</button>
于 2010-01-13T22:52:18.990 に答える
0

この例のコードを使用します。

<html>
<head>
<title> </title>
    <script>
var nereidFadeObjects = new Object();
var nereidFadeTimers = new Object();
var opacitiz=0;  

//Функция предназначена для нумерации тегов
window.onload=function() {
  var e=document.getElementsByTagName('*')
  for (var i=0,l=e.length;i<l;i++) e[i].sourceIndex=i
}

//Вызов nereidFade() для разных браузеров при наведение и отводе курсора мышкой
            //@param object определяет из какого тега был вызов
//@param num -- 1  - навели курсов мышкой, 0 - отвели курсор мышки                        
function KrossBrows(object,num) {
        if (num==1) 
                if (!document.all) nereidFade(object, 1,30,0.1);
                else nereidFade(object, 100,30,10);
        else
                if (!document.all) nereidFade(object, 0.3,50,0.05);
                else nereidFade(object, 30,50,5);
}

//Отвечает за прозрачнность 
//@param object определяет из какого тега был вызов
//@param destOp конечная позиция для выполнения прозрачности
    //@param rate время которое потребуется на вызов функции
//@param delta шаг для прозрачности
function nereidFade(object, destOp, rate, delta){
        if (!document.all) opacitiz=object.style.opacity;
        else opacitiz=object.filters.alpha.opacity;

        clearTimeout(nereidFadeTimers[object.sourceIndex]);
        diff = destOp-opacitiz;
        direction = 1;
        if (opacitiz > destOp) direction = -1;

                delta=Math.min(direction*diff,delta);
        if (!document.all)                 object.style.opacity=parseFloat(object.style.opacity)+(direction*delta);
        else object.filters.alpha.opacity+=direction*delta;

    if (opacitiz != destOp){
            nereidFadeObjects[object.sourceIndex]=object;
                nereidFadeTimers[object.sourceIndex]=setTimeout("nereidFade(nereidFadeObjects["+object.sourceIndex+"],"+destOp+","+rate+","+delta+")",rate);
    }
}
</script>
</head>
<body>
<IMG onmouseover="KrossBrows(this,1)" style="FILTER: alpha(opacity=30);opacity:0.3"     onmouseout="KrossBrows(this,0)" height=31 alt="" src="ace.gif" width=88 vspace=2     border=0></A>
<IMG onmouseover="KrossBrows(this,1)" style="FILTER: alpha(opacity=30);opacity:0.3"     onmouseout="KrossBrows(this,0)" height=31 alt="" src="ace.gif" width=88 vspace=2     border=0></A>
</body>
            </html>
于 2010-01-13T21:57:31.697 に答える
0

JQuery や Prototype などのすべてのフレームワークのエフェクト ライブラリでは、任意の値からのフェードと任意の値へのフェードが可能です。

編集: 申し訳ありませんが、フレームワークを使用したくないことを繰り返し読みました。しかし、彼らは少なくともそれを行う方法をあなたに与えるべきです. また、0 から 1 ではなく x から y にフェード関数を微調整するのは簡単なはずです。0 または 1 のターゲット値をその中間に調整するだけで済みます。

于 2010-01-13T21:54:56.163 に答える