在Javascript中模拟长按

时间:2015-02-22 23:31:16

标签: javascript android ios mobile

我有一个webapp,当用户点击某个字段时,里面的文字会突出显示供他复制。但是,在Android上,这不会触发打开复制上下文菜单,因此用户必须自己选择文本。

有没有办法以编程方式触发长按事件,以便复制/粘贴上下文菜单出现在移动浏览器上?

4 个答案:

答案 0 :(得分:4)

也许你可以通过使用jquery mobile的taphold事件来实现这一点。

http://api.jquerymobile.com/taphold/

答案 1 :(得分:3)

我知道它并不完全是您所寻求的解决方案,但它是一个适用于我的许多网络应用程序的解决方案。 我没有让用户自己复制粘贴它,而是添加了一个复制按钮。 在大多数情况下,我相信会带来更好的用户体验。

有一些库可以做到这一点,占用空间非常小,不依赖于肉体。

我一直在使用clipboard.js一段时间,它在移动设备上也很棒。

答案 2 :(得分:3)

从ecma6 javascript,我们可以使用GlobalEventHandlers来检测按键和触摸事件。不同的事件有很多不同的处理程序。

当用户触摸/按键/单击某个元素时,我们可以通过多种方式检测它,但对于您的确切查询,触摸/点击事件由两个不同的操作组成: ontouchstart 和<强> ontouchend 即可。

这基本上意味着当 ontouchend 没有被触发时,用户通过触摸来握住元素,这是一个长按/点击。

以下示例使用 onmouseover onmousleave ontouchstart ontouchend 事件。

&#13;
&#13;
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;
&#13;
&#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>