Вход

Просмотр полной версии : Появление при скролле и скрытие по клику


samdo
12.08.2020, 11:54
День добрый! Помогите по задачке, плиз: есть блок, который появляется/исчезает при скролле, также есть кнопка, чтобы его скрыть. При клике на это кнопку он скрывается, но если начинаем скроллить, то он опять появляется. Подскажите как сделать, чтобы он не появлялся при скролле если мы его закрыли кликом по кнопке. Вот код, которым я пытался это реализовать:

<div class="previous-post">
<i class="fas fa-times prev-close"></i>
</div>

<script src="https://ajax.googleapis.com/ajax/libs/jquery/1/jquery.min.js"></script>
<script>
$(document).ready(function(){
$(window).scroll(function(){
if($(window).scrollTop()>220){
$('.previous-post').fadeIn(400)
}else{
$('.previous-post').fadeOut(400)
}
});
})
$(".prev-close").click(function() {
$(".previous-post").slideToggle();
$(this).hide();
})
</script>

<style>
.previous-post {
display:none;
position: fixed;
right: 1%;
bottom: 1%;
}
</style>

laimas
12.08.2020, 12:17
$(window).one('scroll', ...

Если же это нужно запомнить навсегда или же на время сессии, то нужно запоминать состояние в локальном или сессионном хранилище браузера.

samdo
12.08.2020, 12:22
$(window).one('scroll', ...

Если же это нужно запомнить навсегда или же на время сессии, то нужно запоминать состояние в локальном или сессионном хранилище браузера.

До первой перезагрузки страницы. Т.е. запоминается на то время, пока человек находится на этой странице.

laimas
12.08.2020, 12:37
запоминается на то время, пока человек находится на этой странице

Ну значит так как написано.

samdo
12.08.2020, 12:55
Что-то я по моему не так сделал)
$(document).ready(function(){
$(window).one('scroll',function(){
if($(window).scrollTop()>220){
$('.previous-post').fadeIn(400)
}else{
$('.previous-post').fadeOut(400)
}
});
})

laimas
12.08.2020, 13:08
Я не знаю как вам надо, а чтобы поставить обработчик события единожды для этого используют метод .one() (http://jquery.page2page.ru/index.php5/Установка_разового_обработ чика_событий). А с проверкой, это нужно следить постоянно и при условии выключать обработчик - метод .off() (http://jquery.page2page.ru/index.php5/Off). Видимо это нужно.

samdo
12.08.2020, 13:13
Я добавил one (как выше я привёл), теперь блок при скролле не появляется) появляется только если я обновляю страницу, находясь внизу экрана.

laimas
12.08.2020, 13:17
Если надо не скролл отследить, а некую позицию его, то не обработчик на один раз нужно устанавливать, а установить обработку события scroll методом .on(), и по вашему условию удалить его методом .off().

рони
12.08.2020, 13:29
samdo,
заменить полностью на это
$(function() {
var fn = function() {
if ($(window).scrollTop() > 220) {
$('.previous-post').stop().fadeIn(400)
} else {
$('.previous-post').stop().fadeOut(400)
}
}
$(window).scroll(fn);
$(".prev-close").click(function() {
$(".previous-post").slideUp();
$(window).off("scroll", fn);
})
})

laimas
12.08.2020, 13:34
А если быстро прокрутить, что будет со строками 4-6? Какой-то маразм во всем этом. Либо дошли до позиции, показали, задержка, скрыли и одновременно удалили обработчик. Либо хрен знает что хотят сделать, мало того, что это дерьмо всплывающее раздражает, так еще и мультик будет. :)

рони
12.08.2020, 13:54
что будет со строками 4-6?
добавил стоп, пост #9.

samdo
12.08.2020, 13:55
Спасибо, код выше помог, все работает.