zyb2010yaonuli 2013-08-14 15:43
浏览 197
已采纳

javascript函数返回的一个奇怪的现象

HTML代码:
[code="HTML"]
<!Doctype html>



2.2.1 h2{ text-align: center; color: #666; text-shadow: 2px 2px 2px #eee; margin: 10px;} body{ margin:0px; padding:0px; background-color: #DDD;} #canvas{ width: 600px; height: 600px; position:relative; margin:0px auto; padding:10px; background-color: #999; border: 10px solid #F40; box-shadow: 1px 1px 10px #f60; } window.onload=function(){ var can=document.getElementById('canvas'); var mouse1=captureMouse(can); can.onmousedown=function(){ console.log("x:"+mouse1.x); } }

canvas动画

您的浏览器版本太低,请升级至最新版本



[/code]
下面是utils.js代码:
[code="javascript"]
var captureMouse=function(ele){
var mouse={x:0,y:0};
ele.onmousemove=function(event){
event=event || window.event;
if(event.pageX || wvwnt.pageY){
x=event.pageX;
y=event.pageY;
}else{
x=event.clientX+document.body.scrollLeft+document.documentElement.scrollLeft;
y=event.clientY+document.body.scrollTop+document.documentElement.scrollTop;
}
x-=ele.offsetLeft;
y-=ele.offsetTop;
mouse.x=x;
mouse.y=y;
};
return mouse;
}
[/code]
问题出现在captureMouse这个函数的返回值上面(captureMouse函数是一个求鼠标相对当前元素坐标的求法函数)。
captureMouse在html页面onload后会执行一次,然后为ele元素绑定了鼠标移动事件,同时会将当前鼠标相对于ele元素的坐标返回,html页面接受变量为mouse1。
但是大家想一下,接下来的鼠标移动只是响应了鼠标移动的事件,但是html页面并没有在鼠标移动的同时调用captureMouse,所以mouse1这个对象应该是一个不变的值,但是当我点击ele元素时发现坐标是变的,这是为什么呢?鼠标按下输入控制台的是mouse1对象的x的值,求大神指点迷津。

  • 写回答

2条回答

  • zyn010101 2013-08-14 17:17
    关注

    ele.onmousemove=function(event){

    event=event || window.event;
    传入这个参数是canvas,你这行代码给它添加了监听鼠标滑过的监听,只要鼠标在canvas上移动,就会触发事件,上面的代码和下面的是等效的。
    [code="java"]
    var captureMouse=function(ele){
    var mouse={x:0,y:0};
    ele.onmousemove=function(event){
    event=event || window.event;
    if(event.pageX || event.pageY){
    x=event.pageX;
    y=event.pageY;
    }else{
    x=event.clientX+document.body.scrollLeft+document.documentElement.scrollLeft;
    y=event.clientY+document.body.scrollTop+document.documentElement.scrollTop;
    }
    x-=ele.offsetLeft;
    y-=ele.offsetTop;
    mouse.x=x;
    mouse.y=y;
    };
    ele.onmousedown=function(){
    console.log("x:"+mouse.x);
    }
    return mouse;
    }

    window.onload=function(){
    var can=document.getElementById('canvas');
    var mouse1=captureMouse(can);

    }
    [/code]

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥20 matlab计算中误差
  • ¥15 对于相关问题的求解与代码
  • ¥15 ubuntu子系统密码忘记
  • ¥15 信号傅里叶变换在matlab上遇到的小问题请求帮助
  • ¥15 保护模式-系统加载-段寄存器
  • ¥15 电脑桌面设定一个区域禁止鼠标操作
  • ¥15 求NPF226060磁芯的详细资料
  • ¥15 使用R语言marginaleffects包进行边际效应图绘制
  • ¥20 usb设备兼容性问题
  • ¥15 错误(10048): “调用exui内部功能”库命令的参数“参数4”不能接受空数据。怎么解决啊