animate()
を使用してdiv
の高さと不透明度を変更しようとしています。 divにはCSSの画像背景があります。 FirefoxとSafariで正常に動作しますが、IEでテストすると、背景が削除されます。これは私のコードです。
if (jQuery.support.opacity) {
jQuery('#list_box').animate({opacity: '1',height: '300px',top: newTop},{duration: 300});
} else {
jQuery('#list_box').animate({filter: 'alpha(opacity=100)',height: '300px',top: newTop},{duration: 300});
}
この問題を修正するにはどうすればよいですか?
私はjQueryが完全に不透明度をサポートしているという印象を受けました。これはすべてのブラウザで機能しますか?
$('#list_box').animate({opacity: '1',height: '300px',top: newTop},{duration: 300});
IE用の特別なハンドラーを作成する必要はありません。jQueryはすべてを舞台裏で行います。
jQuery('#list_box').animate({opacity: '1',height: '300px',top: newTop}, 300);
[〜#〜] however [〜#〜]:消える背景画像として24ビットの透過PNGがある場合、filter: alpha
を結合できないことに注意する必要があります。 (IEの舞台裏でjQueryが正しく使用します)IE7またはIE8の24ビット透過PNG。それを回避する唯一の方法は、filter: alpha
を使用しているオブジェクトに背景色(transparent
以外)を設定することだと思います
テスト方法:#list_box
の背景色を、CSSに次のようなものを追加して、単色に設定しますafterbackground-image
宣言:
#list_box { background-color: red }
背景画像が残っていて、#list_box
が正しくアニメーション化されている場合(恐ろしい背景を除く)、問題が何であるかがわかっているので、目的を達成する別の方法を見つける必要があります。
答えは非常に(非常に)遅くなりましたが、IE8でjquery v animateの問題に関するヘルプを探したとき、これはGoogleのトップにあるので、ここに投稿すると思いました。
私の問題はIEのhasLayoutバグに関連しており、フェードする要素に「display:inline-block」を追加すると問題が修正されました。
私は同じ問題を抱えています。不透明度を40%に設定すると、私は答えを見つけました。
$('#list_box').stop().animate({opacity: '.4'},"slow");
不透明度が100%にジャンプしてから、40%にアニメートされることに気付きました。ユーレカ。
したがって、アニメーションの前に不透明度を明示的にゼロに設定します。
$('#list_box').css({opacity:0}).stop().animate({opacity: '1'},"slow");
IEでテキストがまだ恐ろしいように見えることを除いて、それはスムーズにアニメーション化します。
テキストをクリーンアップするために、アニメーションの後にIE=でcssから不透明度を削除しました。これはIE6とIE8でテキストをかなりクリアするようです。
$('#list_box').css({opacity:0}).stop().animate({opacity: '1'},"slow",function(){
//remove the opacity in IE
jQuery.each(jQuery.browser, function(i) {
if($.browser.msie){
$('#list_box').css({opacity:''});
}
});
});
ParallelsのMac、IE6およびIE8でテストしています。 Mac側ではすべてがうまくいくようです。
私はこれで同じ種類の問題がありました:
$('#nav li').hover(function() {
$(this).stop().animate({opacity: '0.4'}, 'slow');
},
function() {
$(this).stop().animate({opacity: '1'}, 'slow');
});
Float:leftを追加しただけです。 #nav li cssに追加し、問題を修正しました。
JQueryでは、divがopacity:0(Standards Compliant Browsersの場合)またはfilter:alpha(opacity = 0)のいずれかをIEに設定すると、使用することができます
$( '#div')。animate({opacity:1}、100);
これがお役に立てば幸いです。同じ問題に加えて、IEに複数のアイテムが含まれるdivスタックでフェードを処理できないという奇妙な問題がありました。
この問題は、コンテナの相対的な位置が原因であることに気付きました。絶対不透明度アニメーションへの「切り替え」が機能する場合。
私に合った解決策を見つけました:position:inline-block;
これはテキストの不透明度をフェードするために機能しますが、CSSの背景画像では試していません。とにかく役立つでしょう。
Internet Explorer 8のfadeToメソッドに関する小さなバグを報告したかっただけです。「表示」としての要素が「インライン」に設定されている場合は機能しません。あなたはそれを「インラインブロック」に入れる必要があることがわかりました、そしてそれは完全に動作します。ウェブ上でこれについては何もありませんし、この問題は初めてではありません。
この問題を報告するのが正しい方法かどうかはわかりませんが、誰かがこの投稿を読むと確信しています:)
http://www.devcomments.com/IE-8-fadeTo-problem-with-inline-elements-to65024.htm にあります
IE 7で同じ問題が発生しました。問題は、opacityプロパティの後のコンマです。
jQuery(this).animate({opacity:1.00,},800);
次のようにする必要があります。
jQuery(this).animate({opacity:1.00},800);
アニメーション要素に不透明な背景を追加して解決しました:
CSS:
.overlay {
position: absolute;
top: 0;
left: 0;
width: 195px;
height: 274px;
cursor: pointer;
background: #fff url('../images/common/image_hover.png') 0 0 no-repeat; /* the solution */
opacity: 0;
-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=0)"; /* IE8 */
filter: alpha(opacity=0); /* IE6-7 */
zoom: 1;
}
JS:
$('.overlay').hover(
function(){
$(this).animate({'opacity': 0.7}, 300);
},
function(){
$(this).animate({'opacity': 0}, 250);
}
);
IE7-8に対応
これが誰かを助けることを願っています;)
fadeTo
を使用して、やりたいことを実行できます。
$('#list_box').fadeTo("slow", 0.33);
fadeIn
とfadeOut
は0から100%への遷移を行いますが、上記の方法で任意の不透明度にフェードすることができます。
( http://docs.jquery.com/Effects/fadeTo#speedopacitycallback )
[OK]これは少し役立つかもしれません、私はこのサイトで正確な問題についての解決策を見つけました http://blog.bmn.name/2008/03/jquery-fadeinfadeout-ie-cleartype-glitch/
結論として、一般的な問題はIEの不透明度フィルターです。特定の場合、できることはあまりありません。
ただし、フェードインおよびフェードアウトする場合、png背景画像の問題を防ぐには、fxが終了したときにjQuery関数が追加したフィルター属性を削除するだけです。コールバック関数を使用するだけで、そのようなことができます:
$('#node').fadeOut('slow', function() {<br/>
this.style.removeAttribute('filter');<br/>
});
セレクターが複数を返す場合、次のような各関数を使用します。
$('.nodes').fadeIn('fast',
function() {
$(this).each (
function(idx,el) {
el.style.removeAttribute('filter');
}
);
}
);
IE8と同じ問題。 「display:inline-block」を。hover2に追加すると、問題が修正されました。
$(function() {
$(".hover1").css("opacity","1.0"); // Default set opacity to 1.0
// On Mouse over
$(".hover1").hover(
function () {
// SET OPACITY TO 15%
$("span.hover2").stop().animate({opacity: 0.15}, 1200);
},
// ON MOUSE OUT
function () {
// SET OPACITY BACK TO 100%
$("span.hover2").stop().animate({opacity: 1.0}, 1200);
}
);
}
);
Pngfixスクリプトを使用しますか?それが犯人かもしれません。