2010-05-19 7 views
1

문제가 발생하여 일련의 인용을 페이드 인 및 페이드 아웃하는 빠른 해결책을 찾았습니다. 내 솔루션은 Internet Explorer를 제외한 모든 브라우저에서 원하는대로 작동합니다. IE의 유일한 문제점은 텍스트가 페이드 인하거나 페이드 아웃하지 않는다는 것입니다. 텍스트는 단순히 존재하게됩니다.IE에서 텍스트 페이드 인/페이드 아웃

요소의 filter:alpha(opacity=xx)을 동적으로 변경하려고 시도하기 전에 비슷한 문제가 발생했다고 생각합니다.

도움을 주시면 대단히 감사하겠습니다.

<html> 
<head> 
<style> 
.fadetext{ 
background:green; 
border:1px solid red; 
height:50px; 
width:500px; 
} 

.fadetext div{ 
background:yellow; 
} 
</style> 
<script type="text/javascript"> 
var CI_common = { 
    C:function(cls,elm){ 
     if(!elm) elm = document; 
     if(document.getElementsByClassName){ 
      return elm.getElementsByClassName(cls); 
     }else{ 
      var t = []; 
      var o = elm.getElementsByTagName("*"); 
      var r = new RegExp("(^|\\s)" + cls + "($|\\s)"); 
      for(var i=0;i<o.length;i++){ 
       if(o[i].className.match(r)) t.push(o[i]); 
      } 
      return t; 
     } 
    }, 

    eventAdd:function(obj,evt,func){ 
     if(obj.addEventListener){ 
      obj.addEventListener(evt,func,false); 
     }else if(obj.attachEvent){ 
      obj["x" + evt + func] = func; 
      obj[evt + func] = function(){ 
       obj["x" + evt + func](window.event); 
      } 
      obj.attachEvent("on" + evt,obj[evt + func]); 
     } 
    } 
} 

var CI_fadetext = { 
    init:function(){ 
     var c = CI_common.C("fadetext"); // Simply a getElementsByClassName function 
     for(var i=0;i<c.length;i++){ 
      c[i].style.overflow = "hidden"; 
      var kids = c[i].getElementsByTagName("div"); 
      for(var j=0;j<kids.length;j++){ 
       kids[j].style.display = "none"; 
       kids[j].style.filter = "alpha(opacity=0)"; 
       kids[j].style.opacity = "0"; 
       (function(obj,index,len){ 
        obj.fadetexttimeout = setTimeout(function(){ 
         CI_fadetext.fade(obj,true); 
         obj.fadeininterval = setInterval(function(){ 
          CI_fadetext.fade(obj,true); 
         },5000*len) 
        },5000*index); 
        setTimeout(function(){ 
         CI_fadetext.fade(obj,false); 
         obj.fadeoutinterval = setInterval(function(){ 
          CI_fadetext.fade(obj,false); 
         },5000*len) 
        },5000*index+4400); 
       })(kids[j],j,kids.length); 
      } 
     } 
    }, 

    fade:function(elm,dir){ 
     function fade(start){ 
      start = (dir ? start + 10 : start - 10); 
      elm.style.filter = "alpha(opacity=" + start + ")"; 
      elm.style.opacity = start/100; 
      document.getElementById("output").innerHTML = elm.style.filter; 
      if(start > 100 || start <0){ 
       elm.style.display = (dir ? "" : "none"); 
       elm.style.filter = "alpha(opacity=" + (dir ? 100 : 0) + ")"; 
       elm.style.opacity = (dir ? 1 : 0); 
      }else elm.fadetexttimeout = setTimeout(function(){fade(start);},50); 

     } 
     if(dir){ 
      elm.style.display = ""; 
      fade(0); 
     }else fade(100); 
    } 
} 

CI_common.eventAdd(window,"load",CI_fadetext.init); // Just a window.onload level 2 event listener 
</script> 
</head> 
<body> 
<div id="output"></div> 
<div class="fadetext"> 
    <div>AAAA</div> 
    <div>BBBB</div> 
    <div>CCCC</div> 
    <div>DDDD</div> 
    <div>EEEE</div> 
</div> 
</body> 
</html> 
+0

www.usejquery.com – ground5hark

답변

1

필터 어레이보다는 스타일 요소에 값을 설정한다. 그렇다면 IE는 계속 유지할 수 있습니다.

if (elm.filters) 
elm.filters[0].opacity=value 
+0

P. S. IE6에는 당신을 물릴 수있는 버릇이 있습니다. "layout"이없는 엘레멘트에 필터를 적용하는 것은 싫다. 엘레멘트의 폭과 높이를 명시 적으로 지정하거나'zoom : 1'과 같은 css 속성을 사용하여 IE에 특수한 비밀 렌더링을하도록해야한다. –

+0

감사합니다! IE 픽스를 시도하는 것을 잊어 버렸습니다 .- 모든 해결책은'zoom : 1'입니다! – tau

2
여기 코드는 IE 8에 나를 위해 작동

, 파이어 폭스, 사파리 : 너무 진부한 표현되고있다

http://www.switchonthecode.com/tutorials/javascript-tutorial-simple-fade-animation

하지만 그래 당신은 또한이 작업을 수행 할 수있는 jQuery를 같은 라이브러리를 사용하는 것이 좋습니다 한 줄에.

JQuery와 예 : http://viralpatel.net/blogs/2009/01/fadein-fadeout-fade-out-effect-in-html-text-div-using-jquery.html

관련 문제