Ответ 1
Возможно, вы можете добиться этого, используя событие taphold из jQuery mobile.
У меня есть веб-приложение, где, когда пользователь нажимает на поле, текст внутри него выделяется для его копирования. Однако в Android это не вызывает открытия контекстного меню копирования, поэтому пользователь должен сам выбрать текст.
Есть ли способ программно вызвать событие длительного нажатия, чтобы контекстное меню копирования/вставки появлялось в мобильных браузерах?
Возможно, вы можете добиться этого, используя событие taphold из jQuery mobile.
Я знаю, что это не совсем то решение, которое вы искали, но это решение, которое работало для меня во многих веб-приложениях. Вместо того, чтобы позволить пользователю копировать/вставлять его самостоятельно, я добавляю кнопку копирования. По большей части, я считаю, что это приводит к улучшению взаимодействия с пользователем.
Есть несколько библиотек, которые делают именно это с очень маленькой занимаемой площадью, для чего не требуется Adobe Flash.
Я давно пользуюсь clipboard.js, он отлично работает и на мобильных устройствах.
Начиная с 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>
Следующий пример эмулирует 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>