我使用­
方法
.slideDown()
现在我希望它在6秒后向上滑动,但只有当元素没有悬停时,如果有悬停,它不应该$('#dropdown_shopping_cart').slideDown(800);
。
到目前为止,当我在CSS中将元素的悬停.slideUp()
添加到元素时,我使用了超时display:none
,因此在悬停为止之前它不会获得display:block!important;
结束了。
display: none
现在我想将JS
setTimeout(function () {
$('#dropdown_shopping_cart').css('display', 'none');
}, 6000);
_______________________________________________________
CSS
#dropdown_shopping_cart:hover {
display: block!important;
}
添加到此。
答案 0 :(得分:4)
检查一下:
var myVar;
myVar = setTimeout(function() {
$('#dropdown_shopping_cart').slideUp(800)
}, 6000);
$("#dropdown_shopping_cart").hover(
function() {
clearTimeout(myVar);
},
function() {
myVar = setTimeout(function() {
$('#dropdown_shopping_cart').slideUp(800)
}, 6000);
}
);
默认情况下,购物车将在{6}后显示slideUp()
,如果鼠标悬停操作发生,setTimeOut
将被清除,鼠标离开购物车后,setTimeOut
将自动设置
答案 1 :(得分:1)
我建议您使用鼠标悬停和课程:
$('#dropdown_shopping_cart').hover(function(){
if(!$('#dropdown_shopping_cart').hasClass('active'))
{
$(this).addClass('active');
}
else
{
$(this).removeClass('active');
}
},
function() {
var myVar = setTimeout(function() {
if(!$('#dropdown_shopping_cart').hasClass('active'))
{
$('#dropdown_shopping_cart').slideUp()
}
}, 6000);
})
然后在你的setTimeout函数中添加:
答案 2 :(得分:1)
您可以清除mouseenter
上的超时并在mouseleave
上将其重置为:
var hide_div_to;
function hideDiv(){
hide_div_to = setTimeout(function () {
$('#dropdown_shopping_cart').slideUp(800);
}, 6000);
}
$('#dropdown_shopping_cart').slideDown(800,hideDiv());
$('#dropdown_shopping_cart').mouseenter(function(){
clearTimeout(hide_div_to);
});
$('#dropdown_shopping_cart').mouseleave(function(){
hideDiv();
});
这是一个有效的JSFiddle
<强>更新强>
如果你不想在离开时再次等待超时,在达到超时后,你可以这样做:
$('#dropdown_shopping_cart').slideDown(800);
setTimeout(function () {
if(!$('#dropdown_shopping_cart').is(':hover')){
$('#dropdown_shopping_cart').slideUp(800);
}
else{
$('#dropdown_shopping_cart').mouseleave(function(){
$('#dropdown_shopping_cart').slideUp(800);
});
}
}, 3000);
答案 3 :(得分:0)
$('#dropdown_shopping_cart').hide().slideDown(800, function () {
var events = $._data($(this)[0], "events") || {};
if (events.mouseover === undefined) {
$(this).delay(1000).slideUp()
}
});