我想知道在移动浏览器上选择文本时是否有办法覆盖原生行为。我试图通过提供自己的操作栏来支持iPhone和Android设备。
任何提示?
答案 0 :(得分:5)
虽然您可以简单地使用selectionchange
事件来显示您的“操作栏”以及本机功能,但如果您想要“替换”原生行为,您需要从头开始伪造整个选项或使用selectionchange
事件,第二个选择是用例如彩色span元素包裹所选文本并取消实际选择(显示你的操作栏),这种方法的麻烦就是1)本机操作栏可能会显示一瞬间,2)体验将与用户可能具有危险效果的体验不同。另一方面,如果你想从头开始做选择,你应该使用user-select
css属性来禁用文本选择,然后根据touchstart计算出来,然后选择要选择哪个文本(带有彩色跨度) (实际上只能在极端受控的环境中使用(例如纯文本阅读器应用程序))。
请注意,这在Firefox和Opera中不起作用,因为selectionchange
事件没有在那里被触发,你需要在文档上使用touchend
事件处理程序+停止所有其他touchend的冒泡支持opera mobile和firefox mobile的活动。 (因为select
不起作用且应使用selectionchange
这一事实归功于Tim Down)
答案 1 :(得分:2)
<强>参考:强>
我制作的上述jsFiddle演示使用了一个插件,允许您 阻止在 Android 或 > iOS 设备(以及桌面浏览器)。
不会干扰您可能拥有的其他标记,例如jsFiddle中演示的jQuery .click();
事件侦听器。
它易于使用,这是安装jQuery插件后的示例标记。
示例HTML:
<p class="notSelectable">This text is not selectable</p>
<p> This text is selectable</p>
示例jQuery:
$(document).ready(function(){
$('.notSelectable').disableSelection();
});
完成jQuery插件:
$.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');
});
}
});
答案 2 :(得分:0)
如果你的目的是阻止选择,你可以使用像
这样的CSSbody
{
-moz-user-select: none;
-khtml-user-select: none;
-webkit-user-select: none;
user-select: none;
}