我试图让我的网站对平板电脑友好,但我遇到了一个奇怪的问题。
我正在使用 Chrome 30 的 Android 4.0 平板电脑上进行测试。
我有一个固定的模态弹出屏幕。当这个屏幕打开时,我们不想让用户滚动背景,所以触摸事件被阻止了。但是,在此窗口中,我们有一个带有 overflow:scroll
的可滚动区域,因此如果在此处检测到触摸启动事件,则不会阻止触摸事件。到目前为止一切顺利 - Android 会按预期负责任地滚动该区域。
问题是,如果用户长按滚动区域内的元素大约半秒钟,然后才滚动 - 开始触摸的元素似乎有片刻被选中。该选择稍后会消失。但是,如果用户在那段时间内滚动 - 整个页面而不是可滚动区域滚动。好像焦点改变了。怎么回事?
我试图在里面的元素上设置 CSS 选择规则,但没有帮助。
-webkit-touch-callout:none;
-webkit-user-select:none;
-khtml-user-select:none;
-moz-user-select:none;
-ms-user-select:none;
user-select:none;
所有其他答案都建议防止触摸事件,但我不能这样做,因为它本来是要滚动的。任何想法是什么造成的?
最佳答案
好的,我知道了。
在上述 CSS 规则中添加 cursor:default!important
。
我确实遇到过这样的解决方案,但第一次尝试就失败了。在我的例子中,可滚动区域内元素的特殊性太强,导致 cursor:default
无用,我没有意识到这一点。我通过检测用户代理仅将其应用于移动设备,因此我可以用 !important
消除先前的 cursor
属性,因为它不会影响任何桌面客户端。甜!
仍然不确定为什么会这样。如果有人可以提供有关 cursor
属性如何影响 Android 上的 Chrome 的信息,我将不胜感激。
关于javascript - Android 元素选择问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19482288/