大涛子客栈

整理入坑学习记录

动态效果图

动态效果图

第一步

分别使用点击事件 onmouseover 和 onmouseout,来设置 oDiv2 的属性,使之显示或隐藏;

1
2
3
4
5
6
7
8
var oDiv1 = document.getElementById("div1");
var oDiv2 = document.getElementById("div2");
oDiv1.onmouseover = function() {
oDiv2.style.display = "block";
};
oDiv1.onmouseout = function() {
oDiv2.style.display = "none";
};

第二步

设置 oDiv2 延时 1 秒后再消失,并且设置一个变量 timer 把它存起来;

1
2
3
4
5
6
var timer = null;
oDiv1.onmouseout = function() {
timer = setTimeout(function() {
oDiv2.style.display = "none";
}, 1000);
};

第三步

当鼠标移到 oDiv2 的时候,由于延时一秒后会消失,所以这时要清除定时器;

1
2
3
oDiv2.onmouseover = function() {
clearTimeout(timer);
};

第四步

当鼠标离开 oDiv2 的时候,我们在 oDiv1 和 oDiv2 之间来来回回徘徊时,会有一瞬间的频闪,所以,这里也要设置当鼠标离开 oDiv2 时来个定时器;

1
2
3
4
5
oDiv2.onmouseout = function() {
timer = setTimeout(function() {
oDiv2.style.display = "none";
}, 1000);
};

第五步

当鼠标从 oDiv2 移动到 oDiv1 的时候,由于 oDiv2 的 onmouseout 定时器没有清除,所以过一秒后,oDiv2 还是会消失;这里,我们就清除定时器(当 oDiv2 移动到 oDiv1 时,使 oDiv2 上的定时器解除):

1
2
3
4
oDiv1.onmouseover = function() {
clearTimeout(timer);
oDiv2.style.display = "block";
};

最后

当代码相似的情况下,我们要想办法使之简化,这样就不会显得冗余;

在 JS 中,允许我们这样做:a=b=c=1;
所以,观察上面代码我们可以得出以下代码:

1
2
3
4
5
6
7
8
9
oDiv1.onmouseover = oDiv2.onmouseover = function() {
clearTimeout(timer);
oDiv2.style.display = "block";
};
oDiv1.onmouseout = oDiv2.onmouseout = function() {
timer = setTimeout(function() {
oDiv2.style.display = "none";
}, 1000);
};

其实,想通制作的步骤,写代码才会行云流水。

完整代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8" />
<title>延时提示</title>
<style type="text/css">
body {
background-color: #fc9;
}
#div1,
#div2 {
margin: 10px;
float: left;
color: #fff;
text-align: center;
border: 3px solid #eee;
}
#div1 {
width: 100px;
height: 100px;
background-color: #f60;
font-size: 20px;
padding-top: 10px;
}
#div2 {
width: 300px;
height: 250px;
background-color: #599;
font-size: large;
line-height: 48px;
padding-top: 10px;
display: none;
}
</style>
<script type="text/javascript">
window.onload = function() {
var oDiv1 = document.getElementById("div1");
var oDiv2 = document.getElementById("div2");
var timer = null;
oDiv1.onmouseover = oDiv2.onmouseover = function() {
clearTimeout(timer);
oDiv2.style.display = "block";
};
oDiv1.onmouseout = oDiv2.onmouseout = function() {
timer = setTimeout(function() {
oDiv2.style.display = "none";
}, 1000);
};
};
</script>
</head>
<body>
<div id="div1">
登岳阳楼
<p>杜甫</p>
</div>
<div id="div2">
昔闻洞庭水,今上岳阳楼。<br />
吴楚东南坼,乾坤日夜浮。<br />
亲朋无一字,老病有孤舟。<br />
戎马关山北,凭轩涕泗流。
</div>
</body>
</html>

效果图
图片描述

 评论