Запретить прокрутку на смартфоне для определенного размера экрана
Мне просто нужно предотвратить прокрутку на мобильном устройстве с использованием JS и/или JQuery, когда происходит определенное событие. У меня есть цифра, когда пользователь открывает фигуру, прокрутка будет отключена, как только она будет закрыта, прокрутка будет включена снова. Целевые устройства:
- любой IPhone от 4s до последнего (включено 5 + 6)
Вот некоторые из вещей, которые я пробовал, но не получилось:
Метод1:
document.addEventListener('touchstart', this.touchstart);
document.addEventListener('touchmove', this.touchmove);
function touchstart(e) {
e.preventDefault()
}
function touchmove(e) {
e.preventDefault()
}
Метод 2:
// left: 37, up: 38, right: 39, down: 40,
// spacebar: 32, pageup: 33, pagedown: 34, end: 35, home: 36
var keys = {37: 1, 38: 1, 39: 1, 40: 1};
function preventDefault(e) {
e = e || window.event;
if (e.preventDefault)
e.preventDefault();
e.returnValue = false;
}
function preventDefaultForScrollKeys(e) {
if (keys[e.keyCode]) {
preventDefault(e);
return false;
}
}
function disableScroll() {
if (window.addEventListener) // older FF
window.addEventListener('DOMMouseScroll', preventDefault, false);
window.onwheel = preventDefault; // modern standard
window.onmousewheel = document.onmousewheel = preventDefault; // older browsers, IE
window.ontouchmove = preventDefault; // mobile
document.onkeydown = preventDefaultForScrollKeys;
}
function enableScroll() {
if (window.removeEventListener)
window.removeEventListener('DOMMouseScroll', preventDefault, false);
window.onmousewheel = document.onmousewheel = null;
window.onwheel = null;
window.ontouchmove = null;
document.onkeydown = null;
}
Любые другие предложения?
Ответы
Ответ 1
Я исправил это, добавив position: fixed;
в .no-scroll
, который применяется к html
и body
, когда фигура дублируется.
Добавлен JS для отключения прокрутки на открытой фигуре:
$('html, body').toggleClass('no-scroll');
Добавлен в JS, чтобы включить прокрутку на близком рисунке:
$('html, body').removeClass('no-scroll');
CSS
.no-scroll {
position: fixed;
}
Надеюсь, это поможет другим с подобной проблемой.
Ответ 2
Вы можете просто отключить прокрутку документа с помощью css:
$('body').addClass('overflow'); // use to disable scroll
//-
$('body').removeClass('overflow'); // use to enable scroll
И css: (или используйте jQuery . css())
<style>
.overflow {
overflow: hidden;
}
</style>
Ответ 3
Я использую sth, как это:
$.fn.isolatedScroll = ->
@on 'mousewheel DOMMouseScroll', (e) ->
delta = e.wheelDelta or e.originalEvent and e.originalEvent.wheelDelta or -e.detail
bottomOverflow = @scrollTop + $(@).outerHeight() - (@scrollHeight) >= 0
topOverflow = @scrollTop <= 0
if delta < 0 and bottomOverflow or delta > 0 and topOverflow then e.preventDefault()
И я использую его, т.е. $(@).find('ul').isolatedScroll()
Ответ 4
Отключить прокрутку во всех мобильных устройствах
Просьба проверить ответ чуть ниже принятого ответа.