2010-01-13 59 views
0

我試圖找到一個函數,可以從指定的透明度淡出元素到指定的透明度。例如從0到.7,但是我可以找到的所有東西都從0到1或1到0淡出。我找不到任何可以指定從什麼到什麼的東西。我對逆向工程所發現的功能的嘗試也失敗了,因爲我發現的每個例子都很神祕。Javascript:從specidied opacity到指定的不透明度淡化元素?

另外我想這樣做沒有任何框架。

謝謝!

+1

你看看jQuery.animate和jQuery.fadeTo的源代碼嗎? – prodigitalson 2010-01-13 21:53:23

回答

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

所有框架的效果庫(如JQuery或Prototype)允許從任意值衰減。

編輯:對不起,我overread你不希望使用任何框架。但他們至少應該給你一個想法如何去做。此外,應該很容易調整任何淡入淡出函數,從x到y而不是0到1 - 您只需要將目標值0或1調整爲介於兩者之間的值即可。從這個例子

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

什麼奇怪的代碼...什麼是標籤*每個DOM元素*與sourceIndex的點? – Shog9 2010-01-14 00:54:12

相關問題