JqueryでCSSの変更を遅らせるにはどうすればよいですか?これが私のコードです:
$("document").ready(function() {
$(".pressimage img").mouseenter(function() {
$jq(this).css('z-index','1000');
});
$(".pressimage img").mouseleave(1000,function() {
$jq(this).css('z-index','1');
});
});
マウスが離れてから約1/2秒後にmouseleave関数が発生する必要があります。
他のjqueryを使用して、マウスオーバーで画像を展開します。拡大するとお互いを覆うので、アニメーション画像のz-indexを他より高くする必要があります。次に、マウスが離れると、z-indexは通常に戻らなければなりません。
上記のコードは、マウスが離れるとすぐにz-indexが変更されることを除いて機能するため、アニメーションを完了する時間がありません。したがって、mouseleave関数を少し遅らせる必要があります。ありがとう
更新
これが私のサイトです: http://smartpeopletalkfast.co.uk/ppr6/press
私は自分のコードを頭に入れました:
$jq("document").ready(function() {
$jq(".pressimage img").mouseenter(function() {
$jq(this).css('z-index','100');
});
$jq(".pressimage img").mouseleave(function() {
$jq(this).css('z-index','1');
});
});
このコードは正常に機能していますが、遅延はありません。左上の画像にカーソルを合わせると正常に機能しますが、マウスをオフにするとすぐに下の画像の後ろに移動します。ありがとう
これを試して:
$(".pressimage img").mouseleave( function(){
var that = this;
setTimeout( function(){
$(that).css('z-index','1');
},500);
});
遅延はキュー内のアイテムでのみ機能するため、遅延を機能させるには、cssの変更をキューに追加する必要があります。次に、デキューします。次のコードはこれを示しています。
$('.pressimage img')
.delay(1000)
.queue(function(){
$(this).css({'z-index','1'});
$(this).dequeue();
});
上記のsanonのソリューションは、同じ目的で.queue
を悪用する代わりに、jQueryの.animate
メソッドを使用するため、これよりも自然であることに注意してください。
以下の元の答え:
setTimeoutが最も自然な方法ですが、jQuery関数チェーンにとどまりたい場合は、期間0のアニメーション関数を使用できます。
例:
$("img").delay(1000).animate({'z-index': 1000},0)
数値のcss変更以外のことをしたい場合は、関数を作成する必要がありますが、それでもそのアニメーション呼び出し内で発生する可能性があります。
$("img").delay(1000).animate({zoom:1},0,function(){$(this).src('otherImage.png');})
空のオブジェクト{}を指定すると、実際の効果とは見なされないため、そのzoom:1をそこに配置しているだけなので、効果キューには入れられないため、すぐに完全な関数が実行されます。
これはsetTimeout();で実行できます。
$("document").ready(function() {
var timer;
$(".pressimage img").mouseenter(function() {
$jq(this).css('z-index','1000');
clearTimeout(timer);
});
$(".pressimage img").mouseleave(1000,function() {
timer = setTimeout(function(){
$jq(this).css('z-index','1');
}, 500);
});
});
SetTimeout(code、delay)のコードは、delayミリ秒後に実行されます。マウスの動きが速すぎると、意図しない変更で問題が発生する可能性があるため、mouseenter()のタイムアウトアクションをクリアしました。
http://forum.jquery.com/topic/delay-css
アニメーションに続いてcssプロパティを遅らせるという私の目的のためにテストされ、動作しています。
次のことを試してください。
jQuery.fn.extend({
qcss: function(map){
$(this).queue(function(next){
$(this).css(map);
next();
});
return this;
}
});
$("document").ready(function() {
$(".pressimage img").mouseenter(function() {
$jq(this).css('z-index','1000');
});
$(".pressimage img").mouseleave(1000,function() {
$jq(this).delay(500).css('z-index','1');
});
});
これは機能しますか? :)
http://jsfiddle.net/loktar/yK5ga/
私が行っていることの1つは、変数にタイムアウトを割り当ててから、マウスオーバー時にそれをクリアすることです。これにより、マウスオーバーをすばやく実行しても起動しません。
$("document").ready(function() {
var imgTimeout;
$("img").hover(
function() {
clearTimeout(imgTimeout);
$(this).css('z-index','1000');
},
function() {
var element = $(this);
imgTimeout = setTimeout(function(){element.css('z-index','1');}, 1000);
});
});