У меня есть следующий код, который изменяет класс div при прокрутке вниз. Проблема в том, что если вы прокручиваете очень быстро (или, если я помещаю ссылки на div в моем меню), функция тайм-аута не выполняет только последнее условие, а все они как последовательность. Я хочу сделать это, если условие изменяется, когда функция находится в пределах таймаута, чтобы пропустить функцию и проверить следующее условие.Не выполняйте setTimeout, если изменения условий
$(document).scroll(function() {
var about = jQuery('#hh1').position().top;
var portfolio = jQuery('#hh2').position().top;
var services = jQuery('#hh3').position().top;
var workingprocess = jQuery('#hh4').position().top;
var clients = jQuery('#hh5').position().top;
var blog = jQuery('#hh6').position().top;
var contact = jQuery('#hh7').position().top;
var scroll = $(this).scrollTop();
if (scroll >= hh1-90 && scroll < hh3-90 || scroll >= hh5-90 && scroll < hh6-90)
{setTimeout('$(".div").addClass("MyClass")',3440);}
else
{
setTimeout('$(".div").removeClass("MyClass")',3440);
}
});
Помимо других проблем, я боюсь, в том, что ваш обработчик события прокрутки установки нескольких тайм-аута и их не клирингового. Это замедлит ваш скрипт LOT. Вы должны очистить свой тайм-аут, когда это не нужно. – Starx
Какие еще проблемы? Пожалуйста, скажите мне? Я хотел бы исправить их – Ivan
Для справки: '$ ('. Div'). ToggleClass ('MyClass', shouldHaveClass),' избавится от необходимости if/else. Просто возьмите условие, которое вы в настоящее время используете для 'if', и назначаете его переменной с именем' shouldHaveClass'. – cHao