前两天帮助同事一起弄了一下效果图项目,遇到了在后台里需要在效果图上获取鼠标的坐标。因为我们的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