2016-08-24 3 views
1

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

var scroller = document.querySelector('#Filters'); 

    scroller.addEventListener('wheel', listener); 

function listener(event) 
    { 
     var elem = event.currentTarget; 

     if ((event.deltaY < 0 && elem.scrollTop === 0) || 
      (event.deltaY > 0 && elem.offsetHeight + elem.scrollTop >= elem.scrollHeight)) 
     { 
      event.preventDefault(); 
     } 
     else if ((event.deltaX < 0 && elem.scrollLeft === 0) || 
      (event.deltaX > 0 && elem.offsetWidth + elem.scrollLeft >= elem.scrollWidth)) 
     { 
      event.preventDefault(); 
     } 
    } 

ответ

1

Вы можете использовать более эффективное решение, чем перерасчет свитка в JS, отключив тело прокрутки при прокрутке дочернего элемента.

HTML:

<div onmouseover="disableScroll();" onmouseout="enableScroll();"> 
    content 
</div> 

JS:

var body = document.getElementsByTagName('body')[0]; 
function enableScroll() { 
    body.style.overflowY = 'auto'; 
} 
function disableScroll() { 
    body.style.overflowY = 'hidden'; 
} 
+0

Это идеальный вариант, кроме меня есть содержание, которое движется, когда полоса прокрутки исчезает и страница становится шире. –

+0

Если кто-то еще использует это решение и имеет проблему перемещений по правому краю, я использовал 'function enableScroll() { \t \t body.style.overflowY = 'auto'; \t \t $ ('body'). Css ({width: '100%'}); \t \t $ ('body'). Css ({float: 'none'}); . \t \t \t} \t функция disableScroll() { \t \t вар bodyWidth = $ ("тело") ширина(); \t \t body.style.overflowY = 'hidden'; \t \t $ ('body'). Css ({width: bodyWidth + 'px'}); \t \t $ ('body'). Css ({float: 'left'}); \t} 'чтобы исправить это. –

Смежные вопросы