2013-04-05 4 views
0

У меня есть функция ниже, которая работает так, как ожидалось, на готовом документе, но при изменении размера она не регистрирует изменение размера и выполняет предупреждение о размере до изменения размера. Ive добавил menuInitialized в качестве флага, чтобы попытаться устранить проблему, но теперь она инициализируется несколько раз. Например, он будет предупреждать «Малый», «Большой», «Маленький». Если я изменил размер браузера несколько раз.Инициализирующая функция изменения размера браузера JQuery

var menuInitialized = false; 

function doMenu() { 
    var left = $('.c_left').height(); 
    var right = $('.c_right').height(); 
    if (left > right) { 
     $('.c_right').css('height', left + 'px'); 
    } 
    $(".c_left, .top_right, .c_right, .c_myaccount, .header_image, .c_footer, .copyright, .accepts, .myaccount, .header_logo").removeAttr('style'); 
    var $menu = $(".c_left"); 
    var width = $(window).width(); 
    var status = 'closed'; 
    var width = $(window).width(); 
    if (width < 550) { 
     if (!menuInitialized) { 
      $('.icon-menu-2').on('click', function(event) { 
       alert('small'); 
       if (status === 'closed') { 
        $menu.animate({ 
         width: 185, 
         marginLeft: 0, 
         display: 'toggle' 
        }, 'fast'); 
        $(".top_right, .c_right, .c_myaccount, .c_footer, .copyright, .accepts").animate({ 
         marginLeft: 185, 
         display: 'toggle' 
        }, 'fast'); 
        $(".myaccount").animate({ 
         marginRight: -185, 
         display: 'toggle' 
        }, 'fast'); 
        return status = 'open'; 
       } else if (status === 'open') { 
        $menu.animate({ 
         width: 0, 
         marginLeft: -185, 
         display: 'toggle' 
        }, 'fast'); 
        $(".top_right, .c_right, .c_myaccount,.c_footer, .copyright, .accepts").animate({ 
         marginLeft: 0, 
         display: 'toggle' 
        }, 'fast'); 
        $(".myaccount").animate({ 
         marginRight: 0, 
         display: 'toggle' 
        }, 'fast'); 
        return status = 'closed'; 
       } 
      }); 
      menuInitialized = true; 
     } 

    } else if ((width < 800) && (width > 550)) { 
     if (menuInitialized) { 
      $('.icon-menu-2').on('click', function(event) { 
       alert('large'); 
       if (status === 'closed') { 
        $menu.animate({ 
         width: 185, 
         marginLeft: 0, 
         display: 'toggle' 
        }, 'fast'); 
        $(".top_right, .c_right, .c_myaccount, .header_image, .c_footer, .copyright, .accepts").animate({ 
         marginLeft: 185, 
         display: 'toggle' 
        }, 'fast'); 
        $(".myaccount, .header_logo").animate({ 
         marginRight: -185, 
         display: 'toggle' 
        }, 'fast'); 
        return status = 'open'; 
       } else if (status === 'open') { 
        $menu.animate({ 
         width: 0, 
         marginLeft: -185, 
         display: 'toggle' 
        }, 'fast'); 
        $(".top_right, .c_right, .c_myaccount, .header_image,.c_footer, .copyright, .accepts").animate({ 
         marginLeft: 0, 
         display: 'toggle' 
        }, 'fast'); 
        $(".myaccount, .header_logo").animate({ 
         marginRight: 0, 
         display: 'toggle' 
        }, 'fast'); 
        return status = 'closed'; 
       } 
      }); 
      menuInitialized = false; 
     } 
    } 
} 
$(document).ready(doMenu); 
$(window).resize(doMenu); 
+0

Где переменная 'width' взялось? Вам нужно обновить 'width' при изменении размера! – adeneo

+0

Кроме того, он будет запускаться только один раз, так как условие if завершится неудачно, но при первом изменении размера пользователя. – adeneo

+1

Повторяется ли 'menuInitialized' снова' false'? Прямо сейчас код внутри блока 'if (! MenuInitialized)' может выполняться только один раз, потому что '! MenuInitialized' перестает быть истинным после ввода блока. – apsillers

ответ

0

Ive, необходимое для отвязать функции нажмите Ie: $('.icon-menu').unbind('click');

0

Положите все ваши JS/JQuery в документе готовый:

$(document).ready(

    // Init 
    var menuInitialized = false; 
    doMenu(); 

    // Resize event 
    $(window).resize(doMenu); 

    // doMenu function 
    function doMenu() { 

     if (!menuInitialized) { 
      menuInitialized = true; 

      if (width < 550) { 
       alert('small') 
      } else if ((width < 800) && (width > 550)) { 
       alert('large') 
      } 
     } 
    } 

); 
+0

Нет необходимости в готовности DOM, окно всегда готово! – adeneo

0

Я ожидаю, что вы не обновляет значение width.

Так внутри функции вы должны получить новую ширину объекта

function doMenu() { 
    width = some_value // Get the width of the desired object 

    // Your code here... 
} 
+0

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

+1

Хорошо, тогда посмотрите на комментарий выше о 'menuInitialized'; он никогда не устанавливается в 'false', если для него установлено значение true. – Knelis

Смежные вопросы