Как удалить функцию, которая была вызвана ранее при выполнении определенного условия? - PullRequest
0 голосов
/ 26 февраля 2012

Я бы хотел, чтобы функция вызывалась только тогда, когда браузер больше 640px.Пока что у меня есть следующее, которое успешно загружает функцию, когда ширина экрана превышает 640px, но проблема, с которой я сталкиваюсь, заключается в том, что когда ширина браузера возвращается ниже 640px, функция все еще активна.В моем конкретном сценарии я не хочу, чтобы функция загружалась на меньшие дисплеи, поэтому я пытаюсь вызвать ее с помощью приведенного ниже кода.Как я могу каким-то образом удалить / уничтожить функцию, когда браузер изменен в соответствии с 640px?

<script> 
    function someFunction() {
     // .. does something when the browser width is greater than 640px
    }

    (function($){
          //detect the width on page load and load the function
          $(document).ready(function(){
             var current_width = $(window).width();

               if(current_width > 640){
                 someFunction();
               }
            }
          });

          //update the width value when the browser is resized
          $(window).resize(function(){
            var current_width = $(window).width();

            if(current_width > 640){
                someFunction(); 
            }

          });

        })(jQuery);
</script>

Вот полный пример jsFiddle того, что у меня есть, что касается помощи, которую я получил до сих пор.http://jsfiddle.net/7Dqna/26/

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

Это работает, когда страница обновляется, но если вы сделаете окно браузера больше, а затем меньше (менее 400 пикселей в примере jsFiddle), меню все равно будет присвоено CSS функцией.Так что я думаю, что это не собирание вещи с изменением размера.

Ответы [ 4 ]

2 голосов
/ 26 февраля 2012

почему бы просто не поставить проверку размера ширины в функцию и вернуться из нее, если размер не меньше 640?например,

var jWindow = $(window);

jWindow.resize( function() {
    someFunction();
});

function someFunction(){
    if ( jWindow.width() < 640 ){ return; }
    // do stuff here
}

в качестве альтернативы, вы можете сделать window.someFunction = function(){ return; }

0 голосов
/ 26 февраля 2012
$(document).ready(function(){
     $(window).on('load resize', ifWidth);

     function ifWidth() {  
         var W = $(window).width();
         if(W > 640){
             someFunction();
             $(window).off('resize', ifWidth);
         }
     }

     function someFunction() {
         // .. does something when the browser width is greater than 640px
     }
});
​
0 голосов
/ 26 февраля 2012

Это происходит из-за обработчика $(window).resize().Если вы просто хотите, чтобы эта логика выполнялась только при загрузке страницы, просто запустите ее на готовом документе и удалите обработчик $(window).resize().

0 голосов
/ 26 февраля 2012

Я могу думать о двух способах сделать это:

  1. Создайте unSomeFunction, который обратит someFunction работу.
  2. Внутри someFunction установите логический флаг, чтобы узнать размер окна.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...