<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title></title>
<style>
#p1{width: 100px;height: 100px;position: absolute;background: red;}
</style>
<script type="text/javascript">
window.onload=function(){
var op=document.getElementById('p1');
var diffX=0;
var diffY=0;
op.onmousedown=function(ev){
var oEvent=ev||event;
diffX=oEvent.clientX-op.offsetLeft;
diffY=oEvent.clientY-op.offsetTop;
document.onmousemove=function(ev){mouseMove()};
document.onmouseup=mouseUp;
return false;
function mouseMove(ev){
var oEvent=ev||event;
var _left=oEvent.clientX-diffX;
var _top=oEvent.clientY-diffY;
op.style.left=_left+'px';
op.style.top=_top+'px';
}
function mouseUp(){
this.onmousemove=null;
this.onmouseup=null;
}
};
};
</script>
</head>
<body>
<p id="p1"></p>
</body>
</html>
一段简单的拖拽应用,我不太明白的是:
在给document.onmousemove添加mouseMove函数时,为什么可以不加ev参数?而直接写成mouseMove;?
我原本等号右边是写成这样的,但是失败了。
document.onmousemove=function(){mouseMove(ev)};
原本我一直认为如果函数本身带参数的话外面是需要包一个functioin的,但是现在好像又不对了。
另外,如果我写成这样居然也是可以的,就是在function的参数里加一个ev就可以。
document.onmousemove=function(ev){mouseMove(ev)};
或者mouseMove里不写参数而写在function参数里
document.onmousemove=function(ev){mouseMove()};
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号
document.onmousemove=function(){mouseMove(ev)};
中ev是个未定义的变量,当然不行。
给
onmousemove赋值一个匿名函数,这个匿名函数中调用了mouseMove。ev是onmousemove的参数,由匿名函数获得,并传递给mouseMove不过既然参数一样,只是简单的传递,那么其实可以简化成
注意是
mouseMove不是mouseMove(),也不是mouseMove(ev),因为mouseMove是一个函数对象,而后两种形式都是调用函数,将返回值赋给onmousemove。参考:https://developer.mozilla.org/zh-CN/docs...