Изменение размера окна срабатывает дважды в Chrome и FireFox, но только одно в Safari

Я использовал этот код для тестирования в последней версии Chrome, FX и Safari. Если я нажму кнопку максимизации, он сработает дважды в FX и Chrome, но только один раз в Safari. Я использую Windows 7. Удивительно, но если я использую Windows XP, Chrome запускается дважды, а FX, Safari запускается один раз. Можно ли гарантировать, что он сработает дважды? Спасибо

$(window).resize(function() {

    if (!isiPhone()) {
        if ($(".viewportBinder").length){                   
            $("#view").css('height',$(window).height());
            $("#view").css('width',$(window).width());  
            content = element.viewport('update'); 
        }

        var h = screen.height;
        var w = screen.width;

        $(window).css("height",h);
        $(window).css("width",w);

        Book.book_position();
        Book.zoom_auto();

        /*
        var is_firefox = navigator.userAgent.indexOf('Firefox') > -1;
        var is_safari = navigator.userAgent.indexOf("Safari") > -1;

        if ((is_firefox)||(is_safari))*/
        alert ('test');
    }   

});

person user782104    schedule 17.12.2012    source источник
comment
Спасибо за редактирование .. Я считаю, что какой оператор внутри функции изменения размера не имеет значения. Поведение функции изменения размера в разных браузерах различается.   -  person user782104    schedule 17.12.2012


Ответы (3)


Думаю, это не большая проблема. Я решаю проблему, обычно используя метод, который запускается после завершения изменения размера.

var after_resize = (function(){
var timer = 0;
return function(callback, ms){
    clearTimeout (timer);
    timer = setTimeout(callback, ms);
};
})();
$(window).resize(function() {
after_resize(function(){
    alert("resize finish!");
}, 300);
});
person Zafer Hangül    schedule 17.12.2012

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

см. также здесь: многократное срабатывание события изменения размера javascript при перетаскивании ручки изменения размера

person algorhythm    schedule 17.12.2012
comment
несколько раз при изменении размера окна путем перетаскивания, но один раз при нажатии кнопки «максимальное окно» - person user782104; 17.12.2012

Это не является проблемой. Это зависит от браузера. Вам нужно будет справиться с этой ситуацией.

Как насчет того, чтобы запомнить свое последнее действие и игнорировать его, если параметры совпадают.

Вы можете написать такой код:

function myResizer() {
    if (!isiPhone()) {
        if ($(".viewportBinder").length) {                   
            var height, width;
            height = $(window).height();
            width = $(window).width();
            if ((myResizer.height !== height) || (myResizer.width !== width)) {
                $("#view").css('height',$(window).height());
                $("#view").css('width',$(window).width());  
                content = element.viewport('update'); 
                myResizer.height = height;
                myResizer.width = width;
            }
        }

        var h = screen.height;
        var w = screen.width;

        if ((myResizer.h !== h) || (myResizer.w !== w)) {
            $(window).css("height",h);
            $(window).css("width",w);

            Book.book_position();
            Book.zoom_auto();
            myResizer.h = h;
            myResizer.w = w;
        }
    }   
}

$(window).resize(myResizer);
person closure    schedule 17.12.2012
comment
Извините, что такое myResizer.height, высота? Кроме того, я хотел бы иметь точное двухкратное действие огня во всех браузерах и всех ОС, можно ли этого добиться? Спасибо - person user782104; 17.12.2012
comment
Это просто способ сохранить переменную на уровне функции, не загромождая глобальное пространство имен. Как статическая переменная на уровне функции. - person closure; 17.12.2012
comment
функция myResizer может обеспечить выполнение функции изменения размера 2 раза? - person user782104; 17.12.2012
comment
Возможно ли / реально ли сначала проверить тип браузера и реализовать разные функции для разных браузеров? например. если сафари, зациклите функцию еще раз. Но fx - это какая-то версия срабатывает 2 раза, а какая-то версия срабатывает один раз .. - person user782104; 17.12.2012
comment
Я бы не стал так писать. Этот метод сделает меня уязвимым для поведения браузера между ОС и версиями. - person closure; 17.12.2012