用JavaScript 获取鼠标移动时的坐标(兼容:IE8、谷歌、Firefox)和用jquery方法的简单分析

前两天帮助同事一起弄了一下效果图项目,遇到了在后台里需要在效果图上获取鼠标的坐标。因为我们的js都是刚开始学习的,所以我们就只能上网找了一些方法,一开始我们是用jq的方法,结果发现存在了兼容问题。
列如:

<body>
 <img id="addInput" src="images/1.jpg"  style="width: 500px; height: 400px;" value=" "/>

<script>

$(function() {
   $("#addInput").on("click",function() {
   var positionX=e.originalEvent.x-$(this).offset().left||e.originalEvent.layerX-$(this).offset().left||0;
   var positionY=e.originalEvent.y + document.body.scrollTop -  $(this).offset().top||e.originalEvent.layerY-$(this).offset().top||0;

$(this).attr("value",{positionX,positionY});
  });
});
</script>
</body>

所以我又不得不放弃用这种方法,结果就在网上找到了一篇非常不错的代码,很好的解决了我的问题,所以我决定要把它记录下来。代码如下:

<!DOCTYPE html>
<html>
<head>
<title>JavaScript获取鼠标移动时的坐标(兼容:IE8、谷歌、Firefox、Opera )</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<style type="text/css">
    .tip {width:200px;border:2px solid #ddd;padding:8px;background:#f1f1f1;color:#666;}
</style>

//方法1
function mousePos(e){ 
    var x,y; 
    var e = e||window.event;
    return { 
        x:e.clientX+document.body.scrollLeft + document.documentElement.scrollLeft,
        y:e.clientY+document.body.scrollTop + document.documentElement.scrollTop
    };
};

//方法2

//Firefox支持属性pageX,与pageY属性,这两个属性已经把页面滚动计算在内了,
//在Chrome可以通过document.body.scrollLeft,document.body.scrollTop计算出页面滚动位移,
//而在IE下可以通过document.documentElement.scrollLeft ,document.documentElement.scrollTop

function getMousePos(event) {
    var e = event || window.event;  
    var scrollX = document.documentElement.scrollLeft || document.body.scrollLeft;  
    var scrollY = document.documentElement.scrollTop || document.body.scrollTop;  
    var x = e.pageX || e.clientX + scrollX;  
    var y = e.pageY || e.clientY + scrollY;  
    //alert('x: ' + x + '\ny: ' + y);  
    return { 'x': x, 'y': y };  
}
function test(e){
    document.getElementById("mjs").innerHTML = getMousePos(e).x+','+getMousePos(e).y;  
};
</script>
</head>
<body>
<div id="mjs" class="tip">获取鼠标点击位置坐标</div>
<div id="test" style="width:1000px;height:1000px;background:#ccc;" onmousemove="test(event)"></div>
</body>
</html>

不过我在实际运用当中是有改动的。
列如:

$(function() {
    function getMousePos(event) {  
        var e = event || window.event;  
        var scrollX = document.documentElement.scrollLeft || document.body.scrollLeft;  
        var scrollY = document.documentElement.scrollTop || document.body.scrollTop;  
        var x = e.pageX || e.clientX + scrollX;  
        var y = e.pageY || e.clientY + scrollY;  
        return { 'x': x, 'y': y };  
    }
    $("#addInput").on("click",function(e) {
         var positionX=parseInt(getMousePos(e).x - $(this).offset().left);
          var positionY=parseInt(getMousePos(e).y - $(this).offset().top);
        $(this).attr("value",{positionX,positionY});
    });
});

还有一些代码的意思我还没有时间去深入了解,所以先记录下来。
获取在窗口客户区的坐标e.clientX e.clientY;
获取在窗口页面中的坐标 e.pageX e.pageY;
更多属性详情可以阅读:http://www.cnblogs.com/panjun-Donet/articles/1294033.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值