我有这样的剧本
$('.parent a').live('mouseover mouseout', function(event) {
if (event.type == 'mouseover'){
if ($(this).siblings('.child').css('width') == '0px' ){
$(this).siblings('.child').animate({'width': window.innerWidth}, 500);
}
}else{
if ( !$(this).hasClass('active') ){
$(this).siblings('.child').animate({'width': 0}, 500);
}
}
});
正如您从上面的脚本中注意到的那样,如果我们将鼠标移到$('.parent a')
上,那么它的兄弟会扩展它的宽度。
现在,如果我们将鼠标移过来,它的兄弟姐妹会立即进行扩张,我希望在5 seconds
之后我们已经将鼠标移除时发生这种情况
如何制作?
答案 0 :(得分:4)
请注意,我添加了单独的事件侦听器,而不是在事件处理程序内针对不同的事件类型进行测试。
var timer;
$('.parent a').live('mouseover', function(event) {
$Sibling = $(this).siblings(".child");
timer = window.setTimeout(function() {
if ($Sibling.css('width') == '0px' ){
$Sibling.animate({'width': window.innerWidth+"px"}, 500);
}}, 5000);
});
$('.parent a').live('mouseout', function(event) {
if (timer) {
window.clearTimeout(timer);
}
if ( !$(this).hasClass('active') ){
$(this).siblings('.child').animate({'width': "0px"}, 500);
}
});
这背后的想法是你设置一个计时器,当用户将鼠标悬停在锚点上时运行。如果在计时器触发之前它们被鼠标移出,则清除计时器以停止事件发生。否则,当计时器触发时,它将按照原始脚本扩展元素。
此外,通过让jQuery只遍历DOM一次,并将结果存储在$ Sibling中,我们使脚本更快。
为了测试这个,我使用了以下HTML。
<div class="parent">
<a href="#">Hello</a>
<div class="child" style="background-color: Aqua; display: block; width: 0px; overflow: hidden;">World</div>
</div>
答案 1 :(得分:0)
你可以使用setTimeout
$('.parent a').live('mouseover mouseout', function(event) {
var elements = $(this).siblings('.child');
if ($(this).siblings('.child').css('width') == '0px' ){
setTimeout(animate(elements, window.innerWidth), 5000);
}
}else{
if ( !$(this).hasClass('active') ){
setTimeout(animate(elements, 0), 5000);
}
});
function animate(elements, width) {
elements.animate({'width': width}, 500);
}
答案 2 :(得分:0)
您希望通过setTimeout()
在此处存储计时器并通过clearTimeout()
清除,但您始终希望每个元素,您可以通过{{3>像这样:
$('.parent a').live({
mouseover: function() {
var self = this;
$.data(this, "timer", setTimeout(function() {
if ($(self).siblings('.child').css('width') == '0px' ){
$(self).siblings('.child').animate({'width': window.innerWidth}, 500);
}
}, 5000));
},
mouseout: function() {
clearTimeout($.data(this, "timer"));
if ( !$(this).hasClass('active') ){
$(this).siblings('.child').animate({'width': 0}, 500);
}
}
});
$.data()
,我发现上面的内容更容易在jQuery 1.4.3+中阅读,但如果您使用的是早期版本,请按照之前的格式进行格式化:
$('.parent a').live('mouseover mouseout', function(event) {
if (event.type == 'mouseover'){
var self = this;
$.data(this, "timer", setTimeout(function() {
if ($(self).siblings('.child').css('width') == '0px' ){
$(self).siblings('.child').animate({'width': window.innerWidth}, 500);
}
}, 5000));
}else{
clearTimeout($.data(this, "timer"));
if ( !$(this).hasClass('active') ){
$(this).siblings('.child').animate({'width': 0}, 500);
}
}
});