5秒前鼠标悬停后如何隐藏元素?
How to hide element after mouse unhover 5 seconds ago?
#div1 {
display: block;
}
#div2 {
display: none;
}
#container:hover > #div2 {
display: block;
}
<div id="container">
<div id="div1">Div1</div>
<div id="div2">Div2</div>
</div>
这里我有一些代码,每当 Div1
被鼠标悬停时, Div2
就会显示。当不悬停在 Div1
或 Div2
上时,Div2
会隐藏自己。
怎样才能让鼠标悬停在Div1
上,5秒没有移动,Div2
隐藏自己?
你可以使用这个
var delayMillis = 5000; //5 seconds
setTimeout(function() {
//your code.
}, delayMillis);
代码将延迟 5 秒执行。
$("#div1").hover(function(){
$('#div2').show();
},function(){
$('#div2').hide();
});
setTimeout(fade_out, 5000);
function fade_out() {
$("#div2").hide();
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<!DOCTYPE html>
<html>
<head>
<title></title>
</head>
<body>
<div id="container">
<div id="div1">Div1</div>
<div id="div2">Div2</div>
</div>
</body>
</html>
您需要使用 javascript 或 jquery 来完成这项工作。当 #div1
悬停时,显示 #div2
,当悬停时使用 javascript setTimeout()
函数在 5 秒后隐藏 #div2
。
$("#div1").hover(function(){
$("#div2").show();
}, function(){
setTimeout(function(){
$("#div2").hide();
}, 5000);
});
如果您多次快速进出,间隔将无法正常工作。您应该将间隔存储在变量中,并且在每个悬停事件中使用 clearInterval()
来删除之前的间隔。
var timer;
$("#div1").hover(function(){
$("#div2").show();
}, function(){
clearInterval(timer);
timer = setTimeout(function(){
$("#div2").hide();
}, 5000);
});
var timer;
$("#div1").hover(function(){
$("#div2").show();
}, function(){
clearInterval(timer);
timer = setTimeout(function(){
$("#div2").hide();
}, 5000);
});
#div2 { display: none }
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id="container">
<div id="div1">Div1</div>
<div id="div2">Div2</div>
</div>
其他2个答案不完整。尝试在 5 秒内将鼠标悬停在 link 上两次或三次,逻辑就会中断。试试这个,显然,删除 CSS.
var intervalIsGoingOn = false;
document.getElementById('div1').onmouseover = function() {
document.getElementById('div2').style.display = "block";
}
document.getElementById('div1').onmouseout = function() {
if(intervalIsGoingOn) return;
intervalIsGoingOn = true;
setTimeout(function() {
document.getElementById('div2').style.display = "none";
intervalIsGoingOn = false;
}, 1000);
};
<div id="container">
<div id="div1">Div1</div>
<div id="div2" style="display:none">Div2</div>
</div>
使用当前的 HTML 结构,隐藏同级元素,这完全有可能使用 CSS 转换:
#div1 {
display: block;
}
#div2 {
/* Using opacity to hide the element, since animating from
'display: none' or 'visibility: hidden' is not possible: */
opacity: 0;
/* Setting the transition-delay to five seconds (5s), for
the non-hovered state of the element: */
transition-delay: 5s;
}
#container:hover>#div2 {
/* Updating the opacity to 1; to show the element with
no transparency (adjust to taste): */
opacity: 1;
/* setting the property to animate ('opacity'), over
a period 0.3 seconds with a linear transition: */
transition: opacity 0.3s linear;
}
<div id="container">
<div id="div1">Div1</div>
<div id="div2">Div2</div>
</div>
但是,如果您需要隐藏前一个同级元素,则可以使用 CSS 和弹性框 模拟 行为;这种方法仅模拟行为,因为元素保留在源中的原始位置并使用弹性框重新排序 order
:
#container {
/* displays the element as a flex container element,
able to contain, and display, flex items
appropriately: */
display: flex;
/* sets the flex-direction to follow a top-to-bottom
layout (sort of emulating 'display: block': */
flex-direction: column;
}
#div2 {
opacity: 0;
transition-delay: 5s;
/* Positions the element ahead of elements with
an 'order' property of 0 or greater (the
default 'order' property is 1):*/
order: -1;
}
#container:hover>#div2 {
opacity: 1;
transition: opacity 0.3s linear;
}
<div id="container">
<div id="div1">Div1</div>
<div id="div2">Div2</div>
</div>
2小时后,我想通了。
<div id="container">
<div id="div1">Div1</div>
<div id="div2">Div2</div>
</div>
#div1{
display: block;
}
#div2{
display: none;
}
$('#container').mousemove(function() {
$('#div2').show();
setTimeout(function(){
if ($('#div2').is(":hover")) {
} else {
$('#div2').hide();
}
},5000);
});
#div1 {
display: block;
}
#div2 {
display: none;
}
#container:hover > #div2 {
display: block;
}
<div id="container">
<div id="div1">Div1</div>
<div id="div2">Div2</div>
</div>
这里我有一些代码,每当 Div1
被鼠标悬停时, Div2
就会显示。当不悬停在 Div1
或 Div2
上时,Div2
会隐藏自己。
怎样才能让鼠标悬停在Div1
上,5秒没有移动,Div2
隐藏自己?
你可以使用这个
var delayMillis = 5000; //5 seconds
setTimeout(function() {
//your code.
}, delayMillis);
代码将延迟 5 秒执行。
$("#div1").hover(function(){
$('#div2').show();
},function(){
$('#div2').hide();
});
setTimeout(fade_out, 5000);
function fade_out() {
$("#div2").hide();
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<!DOCTYPE html>
<html>
<head>
<title></title>
</head>
<body>
<div id="container">
<div id="div1">Div1</div>
<div id="div2">Div2</div>
</div>
</body>
</html>
您需要使用 javascript 或 jquery 来完成这项工作。当 #div1
悬停时,显示 #div2
,当悬停时使用 javascript setTimeout()
函数在 5 秒后隐藏 #div2
。
$("#div1").hover(function(){
$("#div2").show();
}, function(){
setTimeout(function(){
$("#div2").hide();
}, 5000);
});
如果您多次快速进出,间隔将无法正常工作。您应该将间隔存储在变量中,并且在每个悬停事件中使用 clearInterval()
来删除之前的间隔。
var timer;
$("#div1").hover(function(){
$("#div2").show();
}, function(){
clearInterval(timer);
timer = setTimeout(function(){
$("#div2").hide();
}, 5000);
});
var timer;
$("#div1").hover(function(){
$("#div2").show();
}, function(){
clearInterval(timer);
timer = setTimeout(function(){
$("#div2").hide();
}, 5000);
});
#div2 { display: none }
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id="container">
<div id="div1">Div1</div>
<div id="div2">Div2</div>
</div>
其他2个答案不完整。尝试在 5 秒内将鼠标悬停在 link 上两次或三次,逻辑就会中断。试试这个,显然,删除 CSS.
var intervalIsGoingOn = false;
document.getElementById('div1').onmouseover = function() {
document.getElementById('div2').style.display = "block";
}
document.getElementById('div1').onmouseout = function() {
if(intervalIsGoingOn) return;
intervalIsGoingOn = true;
setTimeout(function() {
document.getElementById('div2').style.display = "none";
intervalIsGoingOn = false;
}, 1000);
};
<div id="container">
<div id="div1">Div1</div>
<div id="div2" style="display:none">Div2</div>
</div>
使用当前的 HTML 结构,隐藏同级元素,这完全有可能使用 CSS 转换:
#div1 {
display: block;
}
#div2 {
/* Using opacity to hide the element, since animating from
'display: none' or 'visibility: hidden' is not possible: */
opacity: 0;
/* Setting the transition-delay to five seconds (5s), for
the non-hovered state of the element: */
transition-delay: 5s;
}
#container:hover>#div2 {
/* Updating the opacity to 1; to show the element with
no transparency (adjust to taste): */
opacity: 1;
/* setting the property to animate ('opacity'), over
a period 0.3 seconds with a linear transition: */
transition: opacity 0.3s linear;
}
<div id="container">
<div id="div1">Div1</div>
<div id="div2">Div2</div>
</div>
但是,如果您需要隐藏前一个同级元素,则可以使用 CSS 和弹性框 模拟 行为;这种方法仅模拟行为,因为元素保留在源中的原始位置并使用弹性框重新排序 order
:
#container {
/* displays the element as a flex container element,
able to contain, and display, flex items
appropriately: */
display: flex;
/* sets the flex-direction to follow a top-to-bottom
layout (sort of emulating 'display: block': */
flex-direction: column;
}
#div2 {
opacity: 0;
transition-delay: 5s;
/* Positions the element ahead of elements with
an 'order' property of 0 or greater (the
default 'order' property is 1):*/
order: -1;
}
#container:hover>#div2 {
opacity: 1;
transition: opacity 0.3s linear;
}
<div id="container">
<div id="div1">Div1</div>
<div id="div2">Div2</div>
</div>
2小时后,我想通了。
<div id="container">
<div id="div1">Div1</div>
<div id="div2">Div2</div>
</div>
#div1{
display: block;
}
#div2{
display: none;
}
$('#container').mousemove(function() {
$('#div2').show();
setTimeout(function(){
if ($('#div2').is(":hover")) {
} else {
$('#div2').hide();
}
},5000);
});