Cenário de aplicação: Freqüentemente, quando o mouse é acoplado a uma caixa A, aparecerá outra caixa B. Se o mouse for movido, a caixa B desaparecerá com atraso e se for movido para a caixa B, não desaparecerá .
Use setTimeout para alcançar
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<style>
div {
float: left;
}
.red {
width: 100px;
height: 200px;
background-color: red;
}
.blue {
width: 100px;
height: 100px;
background-color: blue;
display: none;
}
</style>
</head>
<body>
<div class="red"></div>
<div class="blue"></div>
<script>
var red = document.querySelector('.red');
var blue = document.querySelector('.blue');
var timer = null;
// red.addEventListener('mouseover', function() {
// clearTimeout(timer);
// blue.style.display = 'block';
// })
// red.addEventListener('mouseleave', function() {
// timer = setTimeout(function() {
// blue.style.display = 'none';
// }, 500);
// })
// blue.addEventListener('mouseover', function() {
// clearTimeout(timer);
// })
// blue.addEventListener('mouseleave', function() {
// timer = setTimeout(function() {
// blue.style.display = 'none';
// }, 500);
// })
function over() {
clearTimeout(timer);
blue.style.display = 'block';
}
function leave() {
timer = setTimeout(function() {
blue.style.display = 'none';
}, 500);
}
red.addEventListener('mouseover', over)
blue.addEventListener('mouseover', over)
red.addEventListener('mouseleave', leave)
blue.addEventListener('mouseleave', leave)
</script>
</body>
</html>