2016-01-22 2 views
2

У меня есть функция внутри события window.resize, и она работает хорошо, кроме того, что она работает только один раз. Если пользователь снова изменит размер окна, функция не будет выполнена. Это код:Изменение размера окна работает только один раз

$(window).resize(function() { 
    var wait = setInterval(function() { 
     if (!$(currentBanner, loading).is(":animated")) { 
      clearInterval(wait); 
      loading.stop().fadeOut(300, function() { 
       if ($('#banner').css('display') == 'block'){ 
        setTimeout(function() { 
         bannerInit(); 
        }, 800); 
        startInterval(); 
        if (initialLoad) { 
         initialLoad = false; 
         next.slideDown(); 
         previous.slideDown(); 
        } 
       } 
      }); 
     } 
    }, 200); 
}).resize(); 

Кто-нибудь знает, как я могу убедиться, что функция выполняется при каждом изменении размера окна?

+0

Это работает только тогда, когда currentbanner, загрузка анимирована. Так что если это оживляет только один раз, то это работает только один раз. –

+0

@PraveenKumar Существует знак отрицания, поэтому он должен работать, когда он не анимирован. –

+1

@TaReQMahMooD Я имею в виду ... Ладно, ладно. ':)' –

ответ

-1

Это потому, что вы вызываете .resize() в конце определения события.

Попробуйте изменить на:

$(window).resize(function() { 
//.... 
}); 

$(window).resize(); 
+0

resize (..) возвращает объект Window, так что это не должно быть проблемой – jgasiorowski

+0

@jgasiorowski Я тестировал его, и когда в конце есть .resize, он не вызывает событие, кроме первого раза. – mfklauberg

+0

Я тестировал этот код и отлично работает $ (window) .resize (function() {alert ('Alert! Resize!');}). Resize(); (Кстати, я не понизил ваш ответ;)) – jgasiorowski

0

Я не знаю, что было ваше намерение, но если бы это было иметь отложенное исполнение после изменения размеров окна вы должны изменить setInterval для SetTimeout

setInterval является бесконечный цикл, который запускается до тех пор, пока вы его не прекратите, а setTimeout будет выполняться только один раз, и он будет ждать x миллисекунд, которые будут выполнены.

Кроме того, вам не нужно называть "размер() событие, оно будет срабатывать каждый раз, когда размер окна изменяется по какой-либо причине (изменение размера пользователя или максимизация и т.д.)

$(window).on("resize",function() { 
    var wait = setTimeout(function() { 
     if (!$(currentBanner, loading).is(":animated")) { 
      clearInterval(wait); 
      loading.stop().fadeOut(300, function() { 
       if ($('#banner').css('display') == 'block'){ 
        setTimeout(function() { 
         bannerInit(); 
        }, 800); 
        startInterval(); 
        if (initialLoad) { 
         initialLoad = false; 
         next.slideDown(); 
         previous.slideDown(); 
        } 
       } 
      }); 
     } 
    }, 200); 
}); 
Смежные вопросы