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