DOM事件的学习
那么当我们按下按键时,如何获取按键的键值呢?我们可以通过给onkeydown方法添加一个参数event将我们所按下的键传入函数,在按键对象进入函数后,我们就可以通过event.keycode来获取他的键值。
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>键盘按键的状态</title>
<script type="text/javascript">
function keyEvent(event) {
alert("你按下了" + event.keyCode + "号键");
}
</script>
</head>
<body onkeydown="keyEvent(event)">
请随便按下按键吧
</body>
</html>
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>键盘控制DIV移动</title>
<script type="text/javascript">
function keyEvent(event) {
var distance = document.getElementById("move");
switch(event.keyCode){
case 37:{distance.style.left=distance.offsetLeft-50+"px";break;}
case 38:{distance.style.top=distance.offsetTop-50+"px";break;}
case 39:{distance.style.left=distance.offsetLeft+50+"px";break;}
case 40:{distance.style.top=distance.offsetTop+50+"px";break;}
};
};
</script>
<style type="text/css">
#move {
width: 100px;
height: 100px;
border: 1pxsolid #000;
background: #EAEAEA;
position: absolute;
}
</style>
</head>
<body onkeydown="keyEvent(event)">
<div id="move"></div>
</body>
</html>
onmousedown
按下鼠标时触发此事件
onmouseup
鼠标按下后松开鼠标时触发此事件
onmousemove
鼠标移动时触发此事件
onmouseout
当鼠标离开某对象范围时触发此事件
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>事件的触发</title>
<script type="text/javascript">
function on_Mousedown() {
alert("你按下了按钮,通过onmousedown方法触发了mousedown事件");
}
function on_Mouseup() {
alert("你按下鼠标并松开了,通过onmouseup方法触发了mouseup事件");
}
function on_Mouseover() {
alert("鼠标移动到了按钮,通过onmouseover方法触发了mouseover事件");
}
function on_Mouseout() {
alert("鼠标移出了按钮,通过onmouseout方法触发了mouseout事件");
}
</script>
</head>
<body>
<input type="button"value="按下鼠标触发事件"onmousedown="on_Mousedown();"/>
<br />
<br />
<input type="button"value="按下鼠标松开时触发事件"onmouseup="on_Mouseup();"/>
<br />
<br />
<input type="button"
value="移动鼠标到按钮触发事件"onmouseover="on_Mouseover();"/>
<br />
<br />
<input type="button"value="移开鼠标触发事件"onmouseout="on_Mouseout();"/>
</body>
</html>
现在我们对鼠标的事件有了大致的了解,有没有想要试一下将按键控制div移动的案例给升级一下,我们试一下通过鼠标控制拖拽控制div移动,是不是更加高端大气上档次呢。
思路分析:
首先我们来分析一下,想象下鼠标控制div的拖拽,按步骤应该有三个过程,鼠标移动到div上按下,拖动div,松开按键,其分别对应三个事件是onmousedown,onmousemove ,onmouseup。
1)我们要获取按下鼠标时在div内的坐标,event.clientX,event.clientY返回事件对象发生时相对于本体(当前div)的坐标。假设鼠标点击红 点,那么onmousedown返回event.clientX,event.clientY如图所示,再通过蓝色div的top和left,我们可以得到
ClickLeft=event.clientX-left;
ClickTop=event.clientY-top;
(ClickLeft,ClickTop)就是事件对象发生时相对于对象的坐标。
2)然后按住这个点进行拖拽如图所示,鼠标的位置发生了变化,我们现在需要基于新的鼠标的位置将这个div移动过去即改变div的top,left。
那么如何计算新的坐标呢?首先我们思考下,当我们按住一个物体进行拖拽的时候,拖拽前后我们按住的地方相对于这个物体是没有变化的。
对于这个案例来说,图上红点相对于div的坐标是不会改变的。所以我们可以根据mousemove事件发生的位置即新的红点的位置减去按下鼠标时在div内的坐标(ClickLeft,ClickTop)求出div拖动时所应处的位置。
left=event.clientX-ClickLeft;//这里的event是mousemove事件
top=event.clientY-ClickTop;
3)当我们抬起鼠标的时候,应该取消拖动改变位置使div停下来。