87,904
社区成员
发帖
与我相关
我的任务
分享
if(e.offsetX || e.layerX){
var x = e.offsetX != null ? e.offsetX : e.layerX != null ? e.layerX : 0;
var y = e.offsetY != null ? e.offsetY : e.layerY != null ? e.layerY : 0;
}else{
var touch = e.touches[0];
var x = touch.pageX != null ? touch.pageX : touch.layerX != null ? touch.layerX : 0;
var y = touch.pageY != null ? touch.pageY : touch.layerY != null ? touch.layerY : 0;
x = x - getElementLeft(canvas);
y = y - getElementTop(canvas);
}
function getElementLeft(element){
var actualLeft = element.offsetLeft;
var current = element.offsetParent;
while (current !== null){
actualLeft += current.offsetLeft;
current = current.offsetParent;
}
return actualLeft;
}
function getElementTop(element){
var actualTop = element.offsetTop;
var current = element.offsetParent;
while (current !== null){
actualTop += current.offsetTop;
current = current.offsetParent;
}
return actualTop;
}
没有细看,随便调整了下。加了2个方法getElementTop,getElementLeft,获取元素左上角坐标用的,如果不考虑兼容性可以直接用dom.getBoundingClientRect获取到。
有些浏览器上是没有offsetX这样的值的,所以这个时候要根据触点页面坐标减去canvans左上角的坐标,这样就可以获取到offsetx了。
所有类似获取offsetx的时候都要这样改一下。自己试试看咯。