Javascript - Удалить окно "изменить размер" слушателя - PullRequest
0 голосов
/ 14 марта 2012

Этот вопрос тесно связан с вопросом переполнения стека " запуск события window.resize в Internet Explorer ".

Проблема: Я пытаюсь исправитьпроблема изменения размера в Internet Explorer 8. В настоящее время функция изменения размера вызывается неоднократно, в результате чего IE по существу блокируется - пользователь больше не может использовать кнопки, вызывающие действия JavaScript.

Предыдущая попытка (и):

var resizeTimeout;
var resizeHandler = function() {
    clearTimeout(resizeTimeout);
    //$(window).unbind('resize', resizeHandler);
    //window.removeEventListener('resize');
    window.removeEventListener('resize', resizeHandler, false);
    scrollHandler();
    setTimeout("$(window).resize(resizeHandler);", 100);
    return true;
}
//$(window).resize(resizeHandler);
window.addEventListener('resize', resizeHandler, false);

Проблемы: Похоже, что window не может реализовать addEventListener или removeEventListener, и открепление jQuery не останавливает IE от продолжения сумасшествия.Он отлично работает во всех других браузерах.

Желаемое поведение: Здесь действительно нужно, чтобы IE прекратил повторяющееся выполнение кода, чтобы другие функции, такие как onclick события работали.


Кто-нибудь знает, как я могу удалить событие resize после его добавления или просто заставить IE перестать быть задержанным.(<- Дополнительные баллы, если вы можете сделать IE не запаздывающим.) </p>


Разрешение: Внутри функции scrollHandler переменная не была объявлена ​​с использованием varпрефикс.Добавление вар заставило всех злых фей уйти.

1 Ответ

1 голос
/ 14 марта 2012

Я думаю, вы поступаете неправильно.Вам следует использовать этот тайм-аут, чтобы заблокировать вызов scrollHandler (), пока действие по изменению размера окна не приостановится на некоторое время (например, задержка в 100 мс, которую вы используете).

var resizeTimeout;
function resizeHandler() {
  cancelTimeout(resizeTimeout);
  resizeTimeout = setTimeout(scrollHandler, 100);
}
$(window).resize(resizeHandler);

Попытка сделать обновления DOM (которые я предполагаю, что происходит внутри "scrollHandler") в обработчике "изменения размера" на самом деле не очень хорошая идея в любом браузере.Сделав это, вам вообще не нужно будет избавляться от обработчика «resize».

edit - ОК, теперь я понимаю, что это именно то, что вы пытались сделать.Я все еще думаю, что так намного проще.

...