Ответ 1
Рассмотрите возможность использования События касания. И поддерживается в браузерах (Firefox, Chrome, Edge).
Решение прост, обработайте Touch Events и предотвратите значения по умолчанию.
Рассмотрим этот пример -
function startup() {
var el = document.getElementsByTagName("canvas")[0];
el.addEventListener("touchstart", handleStart, false);
el.addEventListener("touchend", handleEnd, false);
el.addEventListener("touchcancel", handleCancel, false);
el.addEventListener("touchmove", handleMove, false);
log("initialized.");
}
element.addEventListener('touchstart', function(e){
var touchobj = e.changedTouches[0] // reference first touch point (ie: first finger)
startx = parseInt(touchobj.clientX) // get x position of touch point relative to left edge of browser
statusdiv.innerHTML = 'Status: touchstart<br> ClientX: ' + startx + 'px'
e.preventDefault()
}, false)
Источник: MDN - события касания
Простую демонстрацию для сенсорных событий можно найти здесь (mdn) или здесь (jsdfiddle)
Проверьте этот пример, который будет намного более полным (Справка/демонстрация) -
<div class="box" id="box1">
<h3> Touch Me! </h3>
</div>
<h3 id="statusdiv">Status</h3>
<script>
window.addEventListener('load', function(){
var box1 = document.getElementById('box1')
var statusdiv = document.getElementById('statusdiv')
var startx = 0
var dist = 0
box1.addEventListener('touchstart', function(e){
var touchobj = e.changedTouches[0] // reference first touch point (ie: first finger)
startx = parseInt(touchobj.clientX) // get x position of touch point relative to left edge of browser
statusdiv.innerHTML = 'Status: touchstart<br> ClientX: ' + startx + 'px'
e.preventDefault()
}, false)
box1.addEventListener('touchmove', function(e){
var touchobj = e.changedTouches[0] // reference first touch point for this event
var dist = parseInt(touchobj.clientX) - startx
statusdiv.innerHTML = 'Status: touchmove<br> Horizontal distance traveled: ' + dist + 'px'
e.preventDefault()
}, false)
box1.addEventListener('touchend', function(e){
var touchobj = e.changedTouches[0] // reference first touch point for this event
statusdiv.innerHTML = 'Status: touchend<br> Resting x coordinate: ' + touchobj.clientX + 'px'
e.preventDefault()
}, false)
}, false)
</script>
Литература:
- События MDN Touch здесь
- Использование сенсорных событий здесь
- Введение в события Touch + Прокрутка + Перетаскивание здесь
- Обнаружение прокрутки с помощью touch здесь
- Развернуть галерею изображений здесь
- Online Paint демонстрация | code Это хорошо!
- Подробней касания событий здесь
Надеюсь, что это поможет.