<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<style>
.outer{
box-sizing: border-box;
margin: 50px auto;
padding-top: 20px;
width: 200px;
height: 200px;
background: lightcoral;
}
.inner{
margin: 0 auto;
width: 100px;
height: 100px;
background: lightgoldenrodyellow;
}
</style>
</head>
<body>
<div class="outer">outer
<div class="inner">inner</div>
</div>
<script>
let outer = document.querySelector(‘.outer‘),
inner = document.querySelector(‘.inner‘);
/**
* onmouseover 和 onmouseout 存在事件的冒泡传播机制
* 从 父元素 滑入 到 子元素,属于 滑出 父元素, 滑入 子元素
* 从 子元素 滑入 到 父元素,属于 滑出 子元素, 滑入 父元素
*
* 忽略了层级特点
*/
// outer.onmouseover = function(){
// console.log(‘outer over‘);
// }
// outer.onmouseout = function(){
// console.log(‘outer out‘);
// }
// inner.onmouseover = function(){
// console.log(‘inner over‘);
// }
// inner.onmouseout = function(){
// console.log(‘inner out‘);
// }
/** 如果有子元素,一般使用 onmouseenter 和 onmouseleave
* onmouseenter 和 onmouseleave 默认阻止了冒泡传播机制
* 受到层级关系的影响
* 从 父元素 滑入 到 子元素,属于 进入 子元素, 但没有离开 父元素
* outer enter -》 inner enter -》 inner leave -》outer leave
*/
outer.onmouseenter = function(){
console.log(‘outer enter‘);
}
outer.onmouseleave = function(){
console.log(‘outer leave‘);
}
inner.onmouseenter = function(){
console.log(‘inner enter‘);
}
inner.onmouseleave = function(){
console.log(‘inner leave‘);
}
</script>
</body>
</html>