2015-06-09 4 views
0

У меня есть серия div, которые исчезают и выходят в цикле. После того, как он идет, он работает плавно, но когда страница сначала загружается, первый div, который отображается внезапно «моргает» один раз, перед тем, как ввести режим плавного затухания в/исчезать. Живой пример here.Div, проходящий через fade in/fade out, начинает мигать круто

HTML

<div id="rotate-1-1"> 
    <!--...--> 
</div> 
<div id="rotate-1-2"> 
    <!--...--> 
</div> 
<div id="rotate-2-1"> 
    <!--...--> 
</div> 
<div id="rotate-2-2"> 
    <!--...--> 
</div> 
<div id="rotate-3-1"> 
    <!--...--> 
</div> 
<div id="rotate-3-1"> 
    <!--...--> 
</div> 

JQuery

<script type="text/javascript"> 
    $(document).ready(function() { 
     setTimeout(function() { 
     var divs = $('div[id^="rotate-1-"]').hide(), 
      i = 0; 

     (function cycle() { 

      divs.eq(i).fadeIn(800) 
         .delay(3700) 
         .fadeOut(500, cycle); 

      i = ++i % divs.length; 

     })(); 
     }, 0); 
    }); 

    $(document).ready(function() { 
     setTimeout(function() { 
     var divs2 = $('div[id^="rotate-2-"]').hide(), 
      i = 0; 

     (function cycle() { 

      divs2.eq(i).fadeIn(800) 
         .delay(3700) 
         .fadeOut(500, cycle); 

      i = ++i % divs2.length; 

     })(); 
     }, 100); 
    }); 

    $(document).ready(function() { 
     setTimeout(function() { 
     var divs3 = $('div[id^="rotate-3-"]').hide(), 
      i = 0; 

     (function cycle() { 

      divs3.eq(i).fadeIn(800) 
         .delay(3700) 
         .fadeOut(500, cycle); 

      i = ++i % divs3.length; 

     })(); 
     }, 200); 
    }); 
</script> 

Что может быть причиной мигающего эффекта, когда страница загружена изначально?

+0

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

ответ

1

setTimeout не является необходимым для первой группы дивы, так как это 0 ms тайм-аут. Вот что вызывает мигание.

Кроме того, вы должны обернуть свой setTimeout вокруг (function, а не var divs. Это может привести к нежелательной задержке.

Я создал JSFiddle: https://jsfiddle.net/richardgirges/noq2f5ox/2/

JS код:

$(document).ready(function() { 
     var divs = $('div[id^="rotate-1-"]').hide(), 
      i = 0; 

     (function cycle() { 

      divs.eq(i).fadeIn(800) 
         .delay(3700) 
         .fadeOut(500, cycle); 

      i = ++i % divs.length; 

     })(); 
    }); 

    $(document).ready(function() { 
     var divs2 = $('div[id^="rotate-2-"]').hide(), 
      i = 0; 

     setTimeout(function() { 
     (function cycle() { 

      divs2.eq(i).fadeIn(800) 
         .delay(3700) 
         .fadeOut(500, cycle); 

      i = ++i % divs2.length; 

     })(); 
     }, 100); 
    }); 

    $(document).ready(function() { 
     var divs3 = $('div[id^="rotate-3-"]').hide(), 
      i = 0; 

     setTimeout(function() { 
     (function cycle() { 

      divs3.eq(i).fadeIn(800) 
         .delay(3700) 
         .fadeOut(500, cycle); 

      i = ++i % divs3.length; 

     })(); 
     }, 200); 
    }); 
+0

Я полагал, что это может быть связано с этим. Ну, причина в том, что у меня есть setTimeout, потому что две другие группы настроены на небольшую задержку, и мне нужно, чтобы все три были синхронизированы, поэтому между ними существует 100-секундное различие (я добавил свой полный код). Есть ли способ сохранить setTimeout, но избавиться от мигания? –

+0

@JeffCaros как насчет этого? https://jsfiddle.net/richardgirges/noq2f5ox/2/ Удалите первый 0 мс setTimeout - это необязательно. Остальные две группы сохраняют их одинаковыми, но завершают setTimeout вокруг '(function cycle()' - не вокруг экземпляра 'var divs'. Это желаемый эффект? – richardgirges

1

Возможно, вам необходимо удалить этот тайм-аут 0 мс и/или скрыть элементы через CSS вместо вызова .hide. Таким образом, они скрыты по умолчанию при загрузке страницы.

CSS:

div.my-divs { 
    display: none; 
}