Интервал JavaScript / jQuery, выполненный дважды в Internet Explorer - PullRequest
0 голосов
/ 24 июля 2011

Я создал небольшую карусель fadeIn / fadeOut в jQuery, и она отлично работает во всех совместимых со стандартами браузерах, в которых я до сих пор тестировал;кроме Internet Explorer 9.

Карусель настроена на переход к следующему элементу каждые 15000 миллисекунд, используя setInterval, и также использует window.addEventListener, чтобы приостановить ее при фокусировке из окна.

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

Код, вероятно, слишком длинный для публикации, но сама страница расположена по адресу http://www.stefanvignir.de/, а файл JavaScript расположен по адресу http://www.stefanvignir.de/carousel.js.

Что я могу сделать, чтобы это правильно работало в IE9, и есть ли что-то, чего мне следует избегать при адаптации JavaScript к IE?

1 Ответ

2 голосов
/ 24 июля 2011

Я предполагаю, что ваш фокусный слушатель вызывается, когда все запускается.Вы можете попробовать проверить, есть ли у вас carouselIntervalId перед запуском таймеров:

if(!carouselIntervalId)
    carouselIntervalId = setInterval(...);

И поскольку мы все здесь параноики, поставьте эту проверку перед обоими setInterval вызовами.

Тогда вы захотите обнулить carouselIntervalId при остановке таймера:

if(carouselIntervalId)
    clearInterval(carouselIntervalId);
carouselIntervalId = null;

Вы, конечно, хотите, чтобы все вышеперечисленные вызовы clearInterval.

Кроме того, хотя я обращаю ваше внимание (?), Я замечаю, что у вас есть два разных вызова setInterval:

setInterval(function() { carouselNext() }, 15000);
// And later...
setInterval(function() { if (animate == true) { carouselNext() } }, 15000);

Возможно, вы захотите сделать их одинаковыми, чтобы избежать путаницы и ошибок.

...