【问题标题】:Javascript: Fade element from specidied opacity to specified opacity?Javascript:将元素从指定的不透明度淡化到指定的不透明度?
【发布时间】:2011-01-04 20:32:37
【问题描述】:

我正在尝试找到一个可以将元素从指定透明度淡化为指定透明度的函数。例如从 0 到 0.7,但我能找到的所有东西都从 0 到 1 或 1 到 0 逐渐消失。我找不到任何可以让你指定从什么到什么的东西。我对我发现的函数进行逆向工程的尝试也失败了,因为我发现的每个示例都非常神秘。

我也想在没有任何框架的情况下做到这一点。

谢谢!!

【问题讨论】:

  • 你看过 jQuery.animate 和 jQuery.fadeTo 的源码了吗?

标签: javascript transparency fade no-framework


【解决方案1】:

没有什么特别的技巧,你只是在超时/间隔内重复地将不透明度样式设置为 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>

【讨论】:

    【解决方案2】:

    JQuery 或 Prototype 等所有框架的效果库都允许从任意值淡入淡出。

    • 在 JQuery 中:FadeTo
    • 在原型中:Fade 带有 to: 参数

    编辑:对不起,我读过你不想使用任何框架。但他们至少应该让你知道如何去做。此外,调整任何衰减函数以从 x 到 y 而不是从 0 到 1 应该很容易 - 您只需将 0 或 1 的目标值调整为介于两者之间的值。

    【讨论】:

      【解决方案3】:

      使用此示例中的代码:

      <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>
      

      【讨论】:

      • 什么奇怪的代码...用sourceIndex标记每个DOM元素有什么意义?
      猜你喜欢
      • 2015-08-12
      • 1970-01-01
      • 1970-01-01
      • 2011-11-13
      • 1970-01-01
      • 2021-11-15
      • 2012-01-26
      • 2014-11-19
      相关资源
      最近更新 更多