Допустим есть событие scroll $(window).scroll(function() {
следящее за прокруткой. И когда пользователь прокрутил к определённому блоку, нужно чтобы появился скрытый блок, и после этого нужно отменить это событие scroll, чтобы больше не срабатывало это событие. Как это сделать?
https://jsfiddle.net/m40bs5kz/2/
$(window).scroll(function() {
var scroll = $(this).scrollTop(),
$title = $('h1'),
offsetTop = $title.offset().top,
height = $(window).height();
if(scroll > ( offsetTop)){
$('p').show();
alert('stop scroll');
}
});
.content{
height: 1000px;
background: yellow;
}
.content2{
height: 2000px;
background: green;
}
p{
display: none;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="wrapper">
<div class="content">content</div>
<h1>title</h1>
<p>paragraph</p>
<div class="content2">content2</div>
</div>
$(window).off('scroll');
но что делать, если к этому событию scroll прикручены другие обработчики, нужно отменить только один обработчик, приведённый выше?
Использовать event.namespace:
$(window).on('scroll.test', function() { ... });
$(window).off('scroll.test');
Задаёте флаг, по которому отслеживаете событие. И меняете его при наступлении. Например, так:
var flag = true;
$(window).scroll(function() {
var scroll = $(this).scrollTop(),
$title = $('h1'),
offsetTop = $title.offset().top,
height = $(window).height();
if(scroll > offsetTop && flag == true){
flag = false;
$('p').show();
alert('stop scroll');
}
});
То есть событие сработает один раз (когда flag == true), а после того, как flag станет false, больше срабатывать не будет.
Выполняйте при скролле именованную функцию, тогда можно будет отключить запуск именно этой функции, а не всех обработчиков:
$(window).on('scroll', function() {
console.log('Another scroll action');
});
$(window).on('scroll', onScroll);
function onScroll() {
const scroll = $(this).scrollTop();
console.log('Scroll action');
if(scroll > 300) $(window).off('scroll', onScroll);
}
body {
height: 3000px;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Разбираю файл JSON с помощью JSONparse(); Выясняется такая вещь, что ключ с дефисом не работает
Возникла проблема с запуском node js серверной части на удаленном хостинге