2011-08-10 8 views
0

IE6-IE8の透明なPNGのフェードがディストーションを示す場合、jQueryのfadeInエフェクトをグローバルに置き換える方法がありますか?私は何を意味グローバルなFadeInの置き換え - IEエラー、jQuery

は、私は、現時点ではこのような何かを持って、次のとおりです。

$(whichCarousel).find('ul.display li:eq(' + aSpecimen + ')').fadeIn("fast"); 

よりもむしろ.fadeInを使用する鉱山の各機能を経由してのif/else文を行うには、とjQueryのであっ的な方法です世界的に言う:あなたはそれがfadeIn()をするように、それは互換性のあるブラウザの場合show()メソッドをオーバーライドし、またはそうでない場合は、元のshow()に戻すことができ

if ($.browser.msie && $.browser.version.substr(0,1)<9) >> find ".fadeIn" and change to ".show();"` ? 
+0

元の 'show()'に戻す互換性のあるブラウザであれば 'fadeIn()'を実行するように 'show()'メソッドをオーバーライドできます。 –

答えて

1

。ここでは例です:

<button id="go">Try Me</button> 
<div id="test" style="display: none">Your Content</div> 

<script type="text/javascript"> 

(function($, oldMethod) {  
    $.fn.show = function() { 
     if ($.browser.msie && $.browser.version.substr(0,1) < 9) { 
      oldMethod.apply(this, arguments); 
     } else { 
      $(this[0]).css("opacity",0); 
      oldMethod.apply(this, arguments); 
      $.fn.animate.apply($(this[0]), [{opacity:1}, {duration:1000}]); 
     } 
    }; 
})(jQuery, jQuery.fn.show); 

$(function() { 
    $('#go').click(function() { 
     $('#test').show(); 
    }); 
}); 

</script> 

あなたはthis jsFiddleでデモを見ることができます。私はIE9とChrome 13でテストし、うまくいくように見えました。

EDITは

私は、これは一種の非効率的であることに気づきました。 のブラウザのバージョンを確認しています。show()となります。あなたは代わりに(未テスト)これを行うことができるかもしれない:

(function($, oldMethod) { 
    if (!($.browser.msie && $.browser.version.substr(0,1) < 9)) { 
     $.fn.show = function() { 
      $(this[0]).css("opacity",0); 
      oldMethod.apply(this, arguments); 
      $.fn.animate.apply($(this[0]), [{opacity:1}, {duration:1000}]); 
     }; 
    } 
})(jQuery, jQuery.fn.show); 

この関数は唯一のバージョン9 A jsFiddle example下IE以外のブラウザ用に上書きされるようになっています。元のshow()関数は単純に存在することができます。

また、このチャンクの理由:fadeIn()はいくつかの点でshow()を呼び出し、我々が原因無限再帰のスタックオーバーフローで終わるので

$(this[0]).css("opacity",0); 
oldMethod.apply(this, arguments); 
$.fn.animate.apply($(this[0]), [{opacity:1}, {duration:1000}]); 

です。 .animate({opacity:"show"}) also call show() `を呼び出すため、どちらも動作しませんでした。私はスタックオーバーフローを引き起こさずに効果を再現するために重要なビットを引き出すためにjQueryコードを掘りました。

+0

ああ、それは面白いです... 'if($ .browser.msie && $。browser.version.substr(0,1)<9)'でこれをどうすればいいでしょうか? – Yahreen

関連する問題