getBoundingClientRect 在移动设备中是空的
getBoundingClientRect is empty in mobile
本文关键字:移动 getBoundingClientRect 更新时间:2023-09-26
我有一个具有角度功能的网站。我已经跟踪了一个错误到getBoundingClientRect方法。它的属性在移动设备上是空的(该应用程序在笔记本电脑等上运行良好......
此代码:
var message = JSON.stringify(element.getBoundingClientRect());
alert(message);
在我的 MacBook 上发送以下警报:
{"顶部":164,"右":601,"底部":468,"左":328,"宽度":273,"高度":304}
在我的 iPad 上:
{}
为什么,有修复程序,还是我应该开始重写 JS?
更多代码:
存储在变量中的元素:
var element = document.querySelectorAll(selector)[0];
事件已添加:
element.addEventListener('touchmove', function(e) {
getMouseCoordinates(e, element);
});
事件:
function getMouseCoordinates(e, element) {
var x = e.clientX - element.getBoundingClientRect().left,
y = e.clientY - element.getBoundingClientRect().top;
var message = JSON.stringify(element.getBoundingClientRect());
alert(message);
var shiftX = x - mouseX; ** code was stopping here
我进一步发现,ClientRect 对象在分配事件侦听器之前具有属性(因此相同的"var message = "代码在事件侦听器处理程序之外的移动浏览器中发布完整的"{ 'top': ... }"对象,但不在该函数中)。
知道了!一位朋友在很大程度上想通了这一点。移动设备不注册鼠标事件,只记录触摸事件,所以代码实际上是在var x = e.clientX - element.getBoundingClientRect().left行处爆炸的。触摸事件没有客户端 X 属性;他们有 TouchList,其成员具有 clientX 属性 为什么这留下了 element.getBoundingClientRect();一个空对象,我仍然不确定,但以下代码按预期工作。如果检测到移动设备,则 isMobile var 设置为 true。
var touchEvent = (isMobile ? e.changedTouches[0] : e);
console.log("Mobile: " + isMobile);
console.log("Touch event: " + touchEvent);
var x = touchEvent.clientX - element.getBoundingClientRect().left,
y = touchEvent.clientY - element.getBoundingClientRect().top;
var message = JSON.stringify(element.getBoundingClientRect());
alert("bounding rect: " + message);
尝试创建对象 ,将属性 、值从.getBoundingClientRect()
添加到对象 ,然后在创建的对象上调用JSON.stringify()
var props = element.getBoundingClientRect();
var obj = {};
for (var prop in props) {
obj[prop] = props[prop]
};
alert(JSON.stringify(obj))
相关文章:
- Canvas Html5绘图应用程序,移动画布会导致重大问题
- 正在SharePoint 2013母版页中添加JQuery移动文件
- 如何在android中使用phonegap将文件从一个文件夹移动/复制到另一个文件夹
- 如何使用phaser使html5游戏在移动设备浏览器上运行
- FabricJs-限制主对象内添加对象的移动区域
- 如何从画布上的某个移动事件中获取X和Y
- 触摸移动时切换到新元素
- 每当您在选择器内移动鼠标时,悬停功能就会重复
- 停止jQuery UI滑块移动超过给定值
- 谷歌地图API v3不适用于移动浏览器或PhoneGap
- 如何将chrome扩展功能移植到移动设备(特别是jquery和trello)
- JQuery移动动态分区页面
- XMLHttpRequest在移动设备上的chrome上不起作用
- 如何使bxslider仅在移动视图中处于活动状态
- css停止图像在滚动中移动
- jquery移动对齐按钮取决于内容大小
- 背景图像顶部的滚动图像不移动
- 如何在react js中移动第二个组件
- DataTables在表之间移动行
- 当带有渲染器的DOM元素不在屏幕顶部时,移动了场景的坐标