2016-03-16 18 views
14

Po prostu trzeba uniemożliwić przewijanie na urządzeniu mobilnym za pomocą JS i/lub JQuery po wystąpieniu określonego zdarzenia. Mam figurę, kiedy użytkownik otworzy figurkę, przewijanie zostanie wyłączone, po zamknięciu przewijanie zostanie ponownie włączone. Urządzenia docelowymi są:Zapobieganie przewijaniu na smartfonie dla określonego rozmiaru ekranu

  • każdy z iPhone 4s do najnowszej jeden (5 + 6 włączone)

Oto niektóre z rzeczy, które próbowałem, ale nie wyszło:

Method1:

    document.addEventListener('touchstart', this.touchstart); 
        document.addEventListener('touchmove', this.touchmove); 

        function touchstart(e) { 
         e.preventDefault() 
        } 

        function touchmove(e) { 
         e.preventDefault() 
        } 

Metoda 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; 
} 

Jakieś inne sugestie?

Odpowiedz

8

Naprawiłem to dodając position: fixed; do .no-scroll który jest stosowany do html i body, gdy figura jest wyświetlana.

Dodano do JS wyłączyć przewijanie na otwartym rysunku:

$('html, body').toggleClass('no-scroll'); 

Dodano do JS, aby umożliwić przewijanie na ścisłej rysunku:

$('html, body').removeClass('no-scroll'); 

CSS:

.no-scroll { 
    position: fixed; 
} 

Mam nadzieję, że będzie to pomagać innym z podobnym problemem.

4

można po prostu wyłączyć zwój dokumentów z CSS:

$('body').addClass('overflow'); // use to disable scroll 
//- 
$('body').removeClass('overflow'); // use to enable scroll 

i CSS: (lub użyć jQuery .css())

<style> 
    .overflow { 
     overflow: hidden; 
    } 
</style> 
+0

Niestety, to nie działa na urządzeniach, działa dobrze na laptopie tho, takie jak metody, które wyżej wspomniałem. Jakieś inne sugestie? –

0

I przy użyciu czegoś takiego:

$.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() 

i używam go tj. $(@).find('ul').isolatedScroll()

0

Disable scrolling in all mobile devices

Uprzejmie sprawdzeniu answer tuż poniżej przyjętego odpowiedź.

+0

Powinieneś połączyć się z odpowiedzią, a nie opisywać jej bieżącą pozycję na stronie, ponieważ mogą ulec zmianie. –

+0

O, przepraszam, całkowicie przegapiłem przycisk udostępniania! Będę o tym pamiętać, dzięki! – ParaBolt

+0

To jest w porządku. Wszyscy byliśmy tutaj nowi. –