【问题标题】:Mobile Web - Disable long-touch/taphold text selection移动网络 - 禁用长按/点击文本选择
【发布时间】:2012-06-29 13:51:21
【问题描述】:

我已经看到/听到了有关使用 user-select 的变体禁用文本选择的所有信息,但这些都不能解决我遇到的问题。在 Android 上(我猜是在 iPhone 上),如果您点击并按住文本,它会突出显示它并显示一些小标志来拖动和选择文本。我需要禁用这些(见图):

我试过-webkit-touch-callout 无济于事,甚至尝试过$('body').on('select',function(e){e.preventDefault();return;}); 之类的东西也无济于事。并且像::selection:rgba(0,0,0,0); 这样的廉价技巧也不起作用,因为隐藏这些也无济于事——选择仍然会发生,它会破坏 UI。另外,我猜这些标志仍然存在。

任何想法都会很棒。谢谢!

【问题讨论】:

  • 嗯。当我刚刚在手机上测试 Fiddle 时,它​​似乎可以工作,但我不能 100% 确定它在生产中对我有用 - 我仍然需要能够触发事件(特别是,touchstarttouchmove、和touchend) 在元素上。虽然,考虑到这只是作用于selectstart,但我们可能会很好。我今晚会测试一下,然后回复你:)

标签: android iphone css mobile highlight


【解决方案1】:
-webkit-touch-callout:none;
-webkit-user-select:none;
-khtml-user-select:none;
-moz-user-select:none;
-ms-user-select:none;
user-select:none;
-webkit-tap-highlight-color:rgba(0,0,0,0);

这将为每个正在运行的浏览器禁用它。

【讨论】:

  • 不是刻薄,但你有没有读过这个问题?我的 CSS 上都贴满了这一点(从单个 ID/类一直到正文和 *),我明确表示隐藏突出显示是一个坏主意....
  • 是的,我确实阅读了您的帖子。现在,你真的尝试过代码吗?它添加了 -webkit-touch-callout 以及使用 -webkit-tap-highlight-color 防止高亮覆盖的正确方法。我在我的网络应用程序中使用它,它工作正常 - 没有内容菜单,没有突出显示,也没有选择。
  • 我想我最初没有提到,但我也一直在那里有-webkit-touch-callout:none;-webkit-tap-highlight-color 唯一能做的就是让高亮透明,禁用它。我最初并没有为代码烦恼,因为它不是我以前从未见过的任何东西,但为了安抚你,我尝试了它,但它没有用。您测试过哪些操作系统/设备可以正常工作?不适用于 Android 2.3 或 3.0...
  • 谢谢!对我来说效果很好。在 Android 4.4.4 / Chrome 上
  • 最好的方法——纯 CSS,没有额外的 JS 或插件。
【解决方案2】:

参考:

jsFiddle Demo with Plugin

我制作的上述 jsFiddle Demo 使用了一个插件来让您防止在 Android 中选择任何文本块 >iOS 设备(以及桌面浏览器)。

它很容易使用,这是安装 jQuery 插件后的示例标记。

示例 HTML:

<p class="notSelectable">This text is not selectable</p>

<p> This text is selectable</p>

示例 jQuery:

$(document).ready(function(){

   $('.notSelectable').disableSelection();

});

插件代码:

$.fn.extend({
    disableSelection: function() {
        this.each(function() {
            this.onselectstart = function() {
                return false;
            };
            this.unselectable = "on";
            $(this).css('-moz-user-select', 'none');
            $(this).css('-webkit-user-select', 'none');
        });
        return this;
    }
});

根据您的留言评论: I still need to be able to trigger events (notably, touchstart, touchmove, and touchend) on the elements.

我只想使用一个不受此插件影响的包装器,但它的文本内容使用此插件受到保护。

要允许与文本块中的链接进行交互,您可以使用span tags 来表示除链接之外的所有链接,并为那些span tags 添加类名.notSelected,从而保留锚链接的选择和交互。

状态更新:此更新jsFiddle 确认您担心禁用文本选择时其他功能可能无法工作。在这个更新的 jsFiddle 中显示的是 jQuery Click 事件监听器,当粗体文本被点击时,它会触发一个浏览器警报,即使该粗体文本不是文本可选择的。

【讨论】:

  • 这不适用于我的 Android 2.3.3,,, 刚刚去你的 jsFiddle 试了一下。选择了所有的文本。有什么想法吗?
  • 感谢您的反馈。加载 JsFiddle 网页后,在测试前点击 RUN 按钮。此外,虽然您在技术上可以选择所有文本,但复制该文本并粘贴到下一个文档中不会粘贴被阻止的文本部分。如果这仍然是一个问题,我将尝试访问具有该版本号的 Android 设备。想法?
  • +1 太棒了,谢谢@arttronics!哪些变化可能会阻止上下文菜单在“长按”时显示?
【解决方案3】:

-webkit-用户选择:无; Android 4.1 之前不支持(抱歉)。

【讨论】:

  • 所以没有办法摆脱/预防它?! :(
猜你喜欢
  • 2012-08-12
  • 2020-02-19
  • 2016-07-13
  • 1970-01-01
  • 2020-08-21
  • 1970-01-01
  • 1970-01-01
  • 2021-12-24
  • 2011-05-06
相关资源
最近更新 更多