Javascript 当父对象/实体具有缩放变换时,获取元素上的接触位置

Javascript 当父对象/实体具有缩放变换时,获取元素上的接触位置,javascript,transform,touch-event,mouse-position,pointer-events,Javascript,Transform,Touch Event,Mouse Position,Pointer Events,我需要从移动中的元素的左边框获取精确的鼠标/触摸位置 问题是,根据窗口/设备的大小,使用transform:scale() 由于缩放,与元素offsetLeft属性相关的touch-和鼠标事件x、pageX和clientX属性值是错误的,因此我无法使用它们进行减法并获得正确的位置 对于鼠标事件我只使用了offsetX属性,它工作正常 问题是,touch events没有offsetX属性 我做了一些研究,发现了提到的地方 我以前从未听说过指针事件,我非常高兴,因为我认为这可以解决我的问题 但这给

我需要从移动中的元素的左边框获取精确的鼠标/触摸位置

问题是,根据窗口/设备的大小,使用
transform:scale()

由于缩放,与元素
offsetLeft
属性相关的
touch-
鼠标事件
x
pageX
clientX
属性值是错误的,因此我无法使用它们进行减法并获得正确的位置

对于
鼠标事件
我只使用了
offsetX
属性,它工作正常

问题是,
touch events
没有
offsetX
属性

我做了一些研究,发现了提到的地方

我以前从未听说过
指针事件
,我非常高兴,因为我认为这可以解决我的问题

但这给我指出了一个新问题指针事件

由于该应用程序首先是为ipad设计的,这是一个大问题

因此,现在我正在寻找一个类似于offsetX的属性,我可以使用,但没有

例如,我知道我可以将
touch events
pageX
乘以反转的比例,但是如果我更改样式中的比例,这将中断,因此无法使用此技术

//no way to do this:
const windowWidth = window.innerWidth 
let scale = 1
if(windowWidth < 1000) {
  scale = 1.55
} else if(windowWidth < 1101) {
  scale = 1.45
} else if(windowWidth < 1201) {
  scale = 1.35
} else if(windowWidth < 1301) {
  scale = 1.25
} else if(windowWidth < 1401) {
  scale = 1.2
} else if(windowWidth < 1501) {
  scale = 1.12
} else if(windowWidth < 1601) {
  scale = 1.06
}

const x = (e.changedTouches ? (e.changedTouches[0].pageX * scale) - this.offsetLeft : e.offsetX)
//没有办法做到这一点:
const windowWidth=window.innerWidth
让比例=1
如果(窗宽<1000){
比例=1.55
}否则如果(窗宽<1101){
比例=1.45
}否则如果(窗宽<1201){
比例=1.35
}否则如果(窗宽<1301){
比例=1.25
}否则如果(窗宽<1401){
比例=1.2
}否则如果(窗宽<1501){
比例=1.12
}否则如果(窗宽<1601){
比例=1.06
}
常量x=(e.changedTouches?(e.changedTouches[0].pageX*scale)-this.offsetLeft:e.offsetX)
我已经创建了一个可以玩的平台(在开发工具中在移动和桌面之间切换/调整大小以进行缩放)

我的解释可能有点混乱,如果有什么不清楚的请问我


非常感谢您的帮助。

如果只是缩放,请通过获取当前应用的变换样式并对其进行解析来获取当前缩放量,然后除以缩放因子

如果您需要更进一步,例如如果使用旋转或3D变换,您可以乘以逆变换矩阵:有关详细信息和代码,请参阅和附带的JSFIDLE