2016-06-29 2 views
-1

я сделал функцию, приращение класса в списке Ли, есть мой код:отключить прокрутки после каждого события колеса прокрутки

var scrollable = $('ul li').length - 1, 
 
    count = 0; 
 
$('body').bind('mousewheel', function(e) { 
 
    if (e.originalEvent.wheelDelta/120 > 0) { 
 
    if (scrollable >= count && count > 0) { 
 
     $('.active').removeClass('active').prev().addClass('active'); 
 
     count-- 
 
    } else { 
 
     return false; 
 
    } 
 
    } else { 
 
    if (scrollable > count) { 
 
     $('.active').removeClass('active').next().addClass('active'); 
 
     count++ 
 
    } else { 
 
     return false; 
 
    } 
 

 
    } 
 
})
body{ 
 
    overflow:hidden; 
 
    } 
 

 
ul li { 
 
    height: 20px; 
 
    width: 20px; 
 
    background: blue; 
 
    margin: 5px; 
 
    list-style: none 
 
} 
 
ul li.active { 
 
    background: red; 
 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 

 
<ul> 
 
    <li class="active"></li> 
 
    <li></li> 
 
    <li></li> 
 
    <li></li> 
 
</ul>

Но я хочу, чтобы зафиксировать свиток на 1 вторых между каждым переходом класса, как я могу его исправить?

+0

Попробуйте настроить 'body' иметь' переполнения: hidden'. Возможно, вам придется предоставить весь сайт контейнеру, а затем установить контейнер на высоту прокрутки, когда вы настроите свое тело на переполнение. – ntgCleaner

+0

На самом деле мое тело уже переполнено, (извините за пример, я его исправлю) – Tiaw

ответ

1

Создать флаг и использовать SetTimeout для одной второй

var scrollable = $('ul li').length - 1, 
    count = 0, 
    allowTransition = true; 
$('body').bind('mousewheel', function(e) { 

    if (allowTransition) { 
    allowTransition=false; 
    if (e.originalEvent.wheelDelta/120 > 0) { 
     if (scrollable >= count && count > 0) { 
     $('.active').removeClass('active').prev().addClass('active'); 
     count-- 
     } else { 
     return false; 
     } 
    } else { 
     if (scrollable > count) { 
     $('.active').removeClass('active').next().addClass('active'); 
     count++ 
     } else { 
     return false; 
     } 

    } 
    setTimeout(function() { 
     allowTransition=true; 
    }, 1000); 
    } 
}) 
+0

благодарит @Hoyen, но есть проблема с возвратом, что он не работает с вашим решением, если вы прокрутите еще раз, last li – Tiaw

+0

@ Твой мой код не мешает этому. Существующий код от вас не позволяет ему ничего делать, если вы находитесь на последнем элементе и пытаетесь перейти к следующему. – Hoyen

+0

На самом деле я не могу найти, как предотвратить это с помощью вашего решения, любую идею? – Tiaw

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