使用jQuery延迟()与CSS()
为什么delay()在这里工作:
$('#tipper').mouseout(function() { $('#tip').delay(800).fadeOut(100); });
但是这不能推迟:
$('#tipper').mouseout(function() { $('#tip').delay(800).css('display','none'); });
//编辑 – 这是一个工作的解决scheme
$('#tipper').mouseleave(function() { setTimeout( function(){ $('#tip').css('display','none'); },800); });
delay()
与animation(fx) 队列一起工作 。 改变CSS属性不能通过这个机制,因此不受延迟指令的影响。
有一个解决方法 – 你可以注入属性更改为一个排队的操作,如下所示:
$('#tip') .delay(800) .queue(function (next) { $(this).css('display', 'none'); next(); });
另外,你应该使用.hide()
而不是.css('display','none')
。
这是一个工作的例子: http : //jsfiddle.net/redler/DgL3m/
你可以写最小的jQuery扩展来帮助这个。 你可以把它叫做qcss :
$.fn.extend({ qcss: function(css) { return $(this).queue(function(next) { $(this).css(css); next(); }); } });
这让你写:
$('.an_element') .delay(750) .qcss({ backgroundColor: 'skyblue' }) .delay(750) .qcss({ backgroundColor: 'springgreen' }) .delay(750) .qcss({ backgroundColor: 'pink' }) .delay(750) .qcss({ backgroundColor: 'slategray' })
这可以是一个优雅的方式来链接animation的一部分。 请注意,在上面非常简单的forms中,qcss只支持包含CSS属性的单个对象参数。 (你需要做更多的工作来支持.qcss('color', 'blue')
。)
这里是一个 jsfiddle 的例子 。
Ken Redler的回答/build议增加了:
另外,你应该使用.hide()而不是.css('display','none')。
你可以做 :
$('#tip').delay(800).hide(0);
这里0
很重要。 将一个值传递给.hide()
会隐式地将它添加到fx队列中 ,因此,这可以像预期的那样工作。
用所有浏览器进行testing
$(document).ready(function () { var id = $("div#1"); // div id=1 var color = "lightblue"; // color to highlight var delayms = "800"; // mseconds to stay color $(id).css("backgroundColor",color) .css("transition","all 1.5s ease") // you may also (-moz-*, -o-*, -ms-*) eg .css("backgroundColor",color).delay(delayms).queue(function() { $(id).css("backgroundColor",""); $(id).dequeue(); }); });