Имитация длинного нажатия в Javascript

У меня есть веб-приложение, где, когда пользователь нажимает на поле, текст внутри него выделяется для его копирования. Однако в Android это не вызывает открытия контекстного меню копирования, поэтому пользователь должен сам выбрать текст.

Есть ли способ программно вызвать событие длительного нажатия, чтобы контекстное меню копирования/вставки появлялось в мобильных браузерах?

Ответ 2

Я знаю, что это не совсем то решение, которое вы искали, но это решение, которое работало для меня во многих веб-приложениях. Вместо того, чтобы позволить пользователю копировать/вставлять его самостоятельно, я добавляю кнопку копирования. По большей части, я считаю, что это приводит к улучшению взаимодействия с пользователем.

Есть несколько библиотек, которые делают именно это с очень маленькой занимаемой площадью, для чего не требуется Adobe Flash.

Я давно пользуюсь clipboard.js, он отлично работает и на мобильных устройствах.

Ответ 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!") 
})
#shot {width:100%;min-height:300px;background:red}
<div id="shot">Touch </div>

Ответ 4

Следующий пример эмулирует 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>