2015-07-24 2 views
0

У меня есть div, который появляется на прокрутке после 520px. Каждый раз, когда я прокручиваю вниз, он, кажется, исчезает, а затем постоянно мерцает, как будто он продолжает работать снова и снова. Я искал это бесконечно, и я не могу найти исправление, которое действительно работает. (Это в Chrome). Вот мой Jquery:мерцающий jquery div на свитке?

$(window).bind("scroll", function(e) { 
e.preventDefault(); 
if ($(this).stop().scrollTop() > 520) { 
    $("#fadeblock").fadeIn(); 
} else { 
    $("#fadeblock").stop().fadeOut(); 
} 
}); 

И это мой CSS

#fadeblock { 
display:none; 
position:fixed;} 

#sidebar { 
    width:200px; 
    height:200px; 
    padding:450px 20px 20px 20px; 
    position:absolute; 
    margin-left:3%; 
} 

HTML:

<div id="fadeblock"> 
<div id="sidebar"> 
<div id="title">{Title}</div> 
<div id="desc">{Description}</div> 
<div id="links"> 
    <a href="/">link</a> 
    <a href="/">link</a> 
    <a href="/">link</a> 
    <a href="/">link</a> 
</div> 

+0

Вы не закрываем все дивы ... кроме того, ничего не мерцает на Mac/Safari. Вероятно, проблема похожа на некоторые элементы/css под '# fadeblock'. –

+0

Кроме того, я задаюсь вопросом о вашем большом дополнении (450 + 20px), внутри элемента размером всего 200x200px ... –

+0

Возможно, вам стоит проверить, является ли элемент видимым перед использованием fadeIn() - вам не нужно fadeIn, если он уже существует (например, прокрутка> 520). – verjas

ответ

1

В самом деле, ваш код делает держать запустив весело и снова и снова.

Одно решение установить переменную для отслеживания состояния DIV в:

var pos=0, fadedIn=false; 

$(window).on("scroll", function(e) { //usually, just use: $(window).scroll(function(){ 
    e.preventDefault(); //this line probably unnecessary 
    pos = $(this).scrollTop(); 
    if (!fadedIn && pos > 520) { 
     $("#fadeblock").fadeIn(); 
     fadedIn = true; 
    } else if (fadedIn) { 
     fadedIn = false; 
     $("#fadeblock").fadeOut(); 
    } 
}); 

Также:

1) Если вы используете версию JQuery> 1.7, использовать .on() вместо .bind()

2) Если у вас есть хорошие причины для этого, не используйте e.preventDefault() на window.scroll()

Смотрите также:

http://davidwalsh.name/javascript-debounce-function

How to implement debounce fn into jQuery keyup event?

+0

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

+0

Также нет причин использовать '.on()', если вы не ввели содержимое в DOM после того, как страница была первоначально отображена. Просто используйте '$ (window) .scroll (function() {// все здесь)}; – gibberish

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