Подтвердить что ты не робот

Почему событие jQuery изменяет размер дважды?

Я только заметил, что событие jquery resize срабатывает дважды при изменении размера окна браузера. Я не могу найти какую-либо документацию, указав ее как поведение по умолчанию. Я тестировал это в последних версиях Chrome и Firefox, используя jQuery 1.4 и 1.5.

Кто-нибудь еще видит это поведение? Есть ли для этого конкретная причина?

Обновить. Это происходит, если я один раз нажмите кнопку максимизации в окне браузера. Я понимаю, что если вручную перетащить окно на другой размер, событие будет запущено несколько раз, но это не должно быть в случае кнопки максимизации.

Используемый код проверяет это ниже. Текст с измененным размером браузера выводится дважды:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
        "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
    <title></title>
</head>
<script src="//ajax.googleapis.com/ajax/libs/jquery/1.4/jquery.js"></script>
<script type="text/javascript">
    $(window).resize(function(){
        console.log('Browser Resized');
    });
</script>
<body>

</body>
</html>
4b9b3361

Ответ 1

Это не проблема jQuery. Это зависит от реализации браузера. Браузер решает, когда вызывать "изменение размера". И вы можете использовать window.onresize = function() {...} для тестирования. Это будет так же. Ничего общего с jQuery. Я тестировал на Win7 хром, он запускается дважды, а в Win7 opera/safari он запускается один раз.

Ответ 3

Здесь простое решение проблемы с помощью setTimeout.

JQuery

var resizeTimeout
$(window).resize(function(){
    clearTimeout(resizeTimeout)
    resizeTimeout = setTimeout(function(){
        console.log("resized")
    },100)
});

JavaScript

let resizeTimeout;
window.addEventListener("resize", () => {
    clearTimeout(resizeTimeout);
    resizeTimeout = setTimeout(console.log, 100, "Resized");
});

Ответ 4

Я протестировал настоящий случай, и я получил два звонка. Поэтому я думаю, и т.д.... это ошибка, не так ли, это вызов до/после кластеризации функций... И я вернусь к документации JQuery для изменения размера():

Код в обработчике изменения размера никогда не должен полагаться на количество вызовов обработчика. В зависимости от реализации события изменения размера могут отправляться непрерывно по мере изменения размера (типичное поведение в браузерах Internet Explorer и WebKit, таких как Safari и Chrome), или только один раз в конце операции изменения размера (типичное поведение в некоторые другие браузеры, такие как Opera).

Любое другое слово необходимо?