2010-12-30 5 views
3

まあ、私はよく知られている/一般的なバグのようなIEに問題があります。他のブラウザでもうまく動作するjQueryで構築した画像スライドショーがあります。しかし、IEでは、スライドショーが一度実行されるとアンチエイリアスされたテキストに問題が発生しました。言い換えれば、スライドショーに3つの画像がある場合、それらの3つの画像のそれぞれがそのテキストと共に最初に現れるとき、テキストは適切にレンダリングされる。ただし、スライドショーが終了すると、テキストはアンチエイリアス処理されます。jQueryでテキストの不透明度をアニメートするときのIEのクリアタイプ/フィルタの問題を修正しました

私はこれを読んで、最高の修正方法について無数のブログを見ました。不透明度は次のように100%になると、私が遭遇した最も一般的な修正は、フィルタ属性を削除します

$('#sample').animate({opacity:1.0}, 500, 
function() { 
    $(this).css('filter',''); 
} 

)。

これはうまくいくようです。しかし、私はまだjQueryの専門家ではないので、私は自分のコードでこれを実装すべき場所を見つけるのが難しいです。私が試したどこでも、スライドショーが動作しなくなったり、吹き飛ばされたりして、すべての画像がページの上下に表示されます。

以下は私が使用しているコードですが、あなたが私に与えることができる助けに感謝します。ありがとう!

if(options.fade === true) { 

$("ul",obj).children().css({ 
'width' : $("ul",obj).children().width(), 
'position' : 'absolute', 
'left' : 0 

}); 

for(var i = $("ul",obj).children().length -1, y = 0; i >= 0; i--, y++) { 
$("ul",obj).children().eq(y).css('zIndex', i + 99999); 

} 


fade(); 
} 

function fade() { 

setInterval(function() { 
    $("ul",obj).children(':first').animate({ 'opacity' : 0}, options.speed, function() {  
    $("ul",obj) 
    .children(':first') 
    .css('opacity', 1) 
    .css('zIndex', $("ul",obj).children(':last').css('zIndex') - 1) 
    .appendTo("#db-slider-ul"); 

    }); 


}, options.pause); 
}  

});

答えて

1

新しいJSファイルにこれを追加し、jquery.fadefix.jsを言う:

jQuery.fn.fadeIn = function(speed, callback) { 
    return this.animate({opacity: 'show'}, speed, function() { 
     if (jQuery.browser.msie) 
      this.style.removeAttribute('filter'); 
     if (jQuery.isFunction(callback)) 
      callback(); 
    }); 
}; 

jQuery.fn.fadeOut = function(speed, callback) { 
    return this.animate({opacity: 'hide'}, speed, function() { 
     if (jQuery.browser.msie) 
      this.style.removeAttribute('filter'); 
     if (jQuery.isFunction(callback)) 
      callback(); 
    }); 
}; 

jQuery.fn.fadeTo = function(speed,to,callback) { 
    return this.animate({opacity: to}, speed, function() { 
     if (to == 1 && jQuery.browser.msie) 
      this.style.removeAttribute('filter'); 
     if (jQuery.isFunction(callback)) 
      callback(); 
    }); 
}; 

と後、ページ内のメインjqueryのスクリプトをこのファイルが含まれます。

<script type="text/javascript" src="jquery.js"></script> 
<script type="text/javascript" src="jquery.fadefix.js"></script> 

IEでは期待通りに動作します。

0

この同じ正確な問題がありました。私は、このソリューションが他のすべての人のために働いていた理由を理解しようとしていましたが、

私が見つけた解決策は、代わりにanimate()関数に "フィルタ"を追加することでした。したがって、元の関数を出発点として使用してください:

$('#sample').animate({'opacity':1.0,'filter':''},500); 

それは私にとって完璧に機能しました。うまくいけば、これは私のようにこれをグーグルにしている他の誰かに役立ちます。簡単

1

はこれを行うには:

$("#sample").fadeIn(1000,function(){this.style.removeAttribute("filter");}); 

または

$("#sample").fadeOut(1000,function(){this.style.removeAttribute("filter");}); 

または

$("#sample").show(1000,function(){this.style.removeAttribute("filter");}); 

または

$("#sample").hide(1000,function(){this.style.removeAttribute("filter");}); 
関連する問題