2013-04-05 2 views
0

J'ai la fonction ci-dessous qui fonctionne comme prévu sur document prêt, mais sur le redimensionnement, il ne pas enregistrer le changement de taille et exécute l'alerte pour la taille avant le redimensionnement. J'ai ajouté le menuInitialized comme indicateur pour essayer de combattre le problème mais maintenant il s'initialise plusieurs fois. Par exemple, il alertera "Small", "Large", "small" Si je redimensionne le navigateur plusieurs fois.Redimensionner le navigateur JQuery initier la fonction

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

Où la variable 'width' vient? Vous devez mettre 'width' à jour lors du redimensionnement! – adeneo

+0

En outre, il se déclenchera une seule fois, car la condition if échouera sur tout sauf la première fois que l'utilisateur redimensionne. – adeneo

+1

Est-ce que 'menuInitialized' est à nouveau défini sur' false'? À l'heure actuelle, le code à l'intérieur de ce bloc 'if (! MenuInitialized)' ne peut s'exécuter qu'une seule fois, car '! MenuInitialized' cesse d'être vrai une fois entré dans le bloc. – apsillers

Répondre

0

Ive besoin de délier la fonction clic-à-dire: $('.icon-menu').unbind('click');

0

Mettez tous vos js/jquery dans le document prêt:

$(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

Pas besoin de DOM prêt, la fenêtre est toujours prête! – adeneo

0

Je pense que vous n'êtes pas mettre à jour la valeur de width.

donc à l'intérieur de la fonction que vous devriez obtenir la nouvelle largeur de l'objet

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

    // Your code here... 
} 
+0

Désolé j'avais oublié d'ajouter cela à cet exemple, mais mon code a une valeur pour la largeur. J'ai modifié le code ci-dessus. – LeeTee

+1

OK, alors regardez le commentaire ci-dessus à propos de 'menuInitialized'; il n'est jamais défini sur "false" une fois qu'il a été défini sur "true". – Knelis

Questions connexes