Видимое содержимое изменяется через установленный интервал времени, но предыдущее содержимое отображается впоследствии

#javascript #jquery #css

#javascript #jquery #css

Вопрос:

Я создаю пример веб-меню, которое будет разбито на несколько блоков контента. Некоторое содержимое будет меняться в установленное время суток (меню от завтрака до обеда). Содержимое меняется в соответствующее время, но через несколько секунд предыдущее содержимое снова появляется в виде мигания несколько раз в течение 1-2 минут, прежде чем остановиться.

 $( document ).ready(function() {  
    SetImage();
    window.setInterval(SetImage,1000);
});

function SetImage(){     
    var nowdate = new Date() ;
    
    var waketime = new Date();     
    waketime.setHours(6);
    waketime.setMinutes(30);
    
    var bedtime = new Date();     
    bedtime.setHours(12);
    bedtime.setMinutes(00);
    
    if(waketime < nowdate  amp;amp; nowdate < bedtime){
         $('.day').show();
         $('.night').hide();
    }else{
         $('.night').show();
         $('.day').hide();
    }
}  
 <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div class="col content">
	<img class="day" src="images/img05.jpg"/>
	<img class="night" src="images/img07.jpg"/>
</div>
<div class="col sidebar">
	<img class="day" src="images/img06.jpg"/>
	<img class="night" src="images/img08.jpg"/>
</div>  

http://damianzannini.com/HTH/index5.html

Как указывалось ранее, я могу изменить контент в соответствующее время, но ранее видимый (и теперь то, что должно быть скрыто) контент продолжает появляться через несколько секунд (обычно мигающий). Моя цель — сделать так, чтобы после изменения контента это мигание не происходило, и контент не менялся до следующего назначенного времени.

Комментарии:

1. Если это полезно, я могу проверять элементы, пока они «мигают» — старый и новый контент переключаются между «display: none» и «display: inline»

Ответ №1:

На вашем веб-сайте вы помещаете скрипт за пределы тела, что является проблемой.

Я бы попробовал добавить этот css, чтобы при загрузке страницы оба сразу скрывались, потому что jquery не загружается и не запускается до того, как это сделает CSS.

 .day, .night{display:none;}
  

Комментарии:

1. Спасибо за отзыв. Я исправил скрипт, находящийся вне тела, и внедрил строку css, которую вы рекомендуете. Кажется, я все еще получаю то же поведение при изменении элементов (только примерно в то время, когда происходит изменение). Для меня странно, что возникает конфликт, который, кажется, возникает только в этот момент, но прекращается через минуту или две после.

2. Я только что попробовал использовать <= вместо < в дополнение к использованию setSeconds () на время, установленное для изменения. Содержимое теперь изменяется без перепрошивки предыдущего! Миллион благодарностей!