我有一个webapp,当用户点击某个字段时,里面的文字会突出显示供他复制。但是,在Android上,这不会触发打开复制上下文菜单,因此用户必须自己选择文本。
有没有办法以编程方式触发长按事件,以便复制/粘贴上下文菜单出现在移动浏览器上?
答案 0 :(得分:4)
也许你可以通过使用jquery mobile的taphold事件来实现这一点。
答案 1 :(得分:3)
我知道它并不完全是您所寻求的解决方案,但它是一个适用于我的许多网络应用程序的解决方案。 我没有让用户自己复制粘贴它,而是添加了一个复制按钮。 在大多数情况下,我相信会带来更好的用户体验。
有一些库可以做到这一点,占用空间非常小,不依赖于肉体。
我一直在使用clipboard.js一段时间,它在移动设备上也很棒。
答案 2 :(得分:3)
从ecma6 javascript,我们可以使用GlobalEventHandlers来检测按键和触摸事件。不同的事件有很多不同的处理程序。
当用户触摸/按键/单击某个元素时,我们可以通过多种方式检测它,但对于您的确切查询,触摸/点击事件由两个不同的操作组成: ontouchstart 和<强> ontouchend 即可。
这基本上意味着当 ontouchend 没有被触发时,用户通过触摸来握住元素,这是一个长按/点击。
以下示例使用 onmouseover , onmousleave , ontouchstart 和 ontouchend 事件。
shot.onmouseover = (function(){
console.log("Mouse action started!")
})
shot.onmouseleave = (function(){
console.log("Mouse action terminated!")
})
shot.ontouchstart = (function(){
console.log("Touch action started!")
})
shot.ontouchend = (function(){
console.log("Touch action terminated!")
})
&#13;
#shot {width:100%;min-height:300px;background:red}
&#13;
<div id="shot">Touch </div>
&#13;
答案 3 :(得分:1)
以下示例模拟了Android长按。在长按setTimeout内部后放下您的操作:
var timer;
//Time of the long press
const tempo = 1000; //Time 1000ms = 1s
const mouseDown = () => {
timer = setTimeout(function(){
//Insert your function here
alert("Your Function Here!");
}, tempo);
};
const mouseUp = () => {
clearTimeout(timer);
};
<p ontouchstart="mouseDown()" ontouchend="mouseUp()" onmousedown="mouseDown()" onmouseup="mouseUp()">Long Touch Me!</p>