javascript - 为什么在我的 Android 上滑动 View 时 JQuery 偏移会发生变化?

标签 javascript jquery html css

更新:我无法在 jsfiddle 上中断,但有时它会在我的独立站点上中断,有时则不会。我真的希望我能删除这个问题——抱歉,我不清楚。每次我认为我已经解决了一个简单的演示案例时,后来的测试表明偏移在该案例中工作正常。

稍后更新:现在我知道了——如果有任何缩放/缩放,offset() 会在 Samsung 上中断。糟了。我仍然喜欢解决方法的任何想法。

在我的 Android Samsung 5(Chrome 浏览器)上运行时,我遇到了 JQuery 的偏移方法与许多其他设置(iPad 与 Safari、Macbook Pro 与 Chrome、Windows 10 与 Chrome)的巨大差异。在后三种情况下,当我滑动(iPad)或滚动(笔记本电脑和台式机)时,offset().left 不会改变。它给出了从文档左侧到我的元素左侧的距离。很好——这就是我需要的。

但是如果我在我的 Samsung 上向左滑动页面,offset().left 值会增加滑动量。该元素根本没有改变它相对于文档的位置!

我试着给你举个例子(见下面的代码)但是当我把它贴在 jsfiddle 上时,然后在我的手机上进行了测试,它成功了。也就是说,offset().left 按预期执行。但是,当我将完全相同的代码放入自己的页面时 my site ,Android/Samsung 再次提供了错误的偏移量。

如果您在三星 5 上访问上面显示的站点,然后单击蓝色 div,您将看到它的 offset().left 为 8 像素。如果您随后进行一些滑动/滚动以使蓝色 div 离开屏幕左侧,然后单击蓝色 div,您应该仍会看到 offset().left 为 8 像素。然而,我的 Android 给出了一个稳步增加的抵消值,我滑动得越多。谁能解释一下?作为奖励,有什么通用疗法的想法吗?

<html>
<head>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.1.0/jquery.min.js"></script>
<style>
    .bulky {width:2000px; height:150px; background-color:blue;}
    .smaller {width:200px; height:150px;background-color:orange;}
</style>
</head>
<body>
    <div class="bulky"></div>
    <div class="smaller"></div>
</body>
<script>
    $(".bulky").click(function() {
        alert("offset left: " + $(".bulky").offset().left);
    });
</script>
</html>

最佳答案

将此添加到 head 标签是否可以解决问题?

<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=0">

我不确定它是否有效,但我必须将其作为答案发布,因为 dnt 在评论中看起来不错。所以欢迎你投反对票,我只是想帮忙 :)

关于javascript - 为什么在我的 Android 上滑动 View 时 JQuery 偏移会发生变化?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39629888/

相关文章:

html - anchor 链接位置 - Wordpress

php - 如何将此字符串与正则表达式匹配

javascript - 样式化 jQuery 验证错误消息

javascript - 编译动态内容 - AngularJS

javascript - 响应式、jQuery 和 .resize

javascript - 使用 jqGrid 的客户端分页

javascript - 如何正确获取 DOM 元素的位置偏移量?

javascript - 如何使用 Bootstrap 修复 div 对齐

javascript - 我可以将 href 与 urlRouterProvider 一起使用吗?

javascript - indexedDB.open()不传递成功事件