2017-04-15 3 views
0
$(window).on("load resize", function() { 
     if ($(window).width() < 768) { 
      menuHeight = '0px'; 
      contactHeight = '100%'; 
     } else { 
      menuHeight = ($('#desktop-menu').height() + 'px').toString(); 
      contactHeight = ($('.get-in-touch-home').outerHeight() + 'px').toString(); 
     } 
    }); 

Je veux accéder à ces deux variables (menuHeight, contactHeight) en dehors de cette fonction à utiliser ailleurs. Je mesure la hauteur supérieure pour un modal, mais wan't à être réactif sur Redimensionner, non seulement la charge (il semble simple Si/Sinon travailler serait ce cas.) Je pourrais avoir besoin d'études sur la portée ici. Merci!!accès à l'extérieur variable de la fonction logique

+0

Si vous ne l'avez pas déclaré '' menuHeight' et contactHeight' quelque part, ce code est en proie à [l'horreur de Globals Implicite] (http://blog.niftysnippets.org/2008/03/horror-of- implicit-globals.html) * (c'est un post sur mon petit blog anémique) *. Assurez-vous de déclarer vos variables. :-) –

Répondre

0

Vous devez les définir avant:

var menuHeight = ''; 
var contactHeight = ''; 

$(window).on("load resize", function() { 
    if ($(window).width() < 768) { 
     menuHeight = '0px'; 
     contactHeight = '100%'; 
    } else { 
     menuHeight = ($('#desktop-menu').height() + 'px').toString(); 
     contactHeight = ($('.get-in-touch-home').outerHeight() + 'px').toString(); 
    } 
}); 

Vous pouvez utiliser une fonction:

function scroll() { 
    var menuHeight; 
    var contactHeight; 

    if ($(window).width() < 768) { 
    menuHeight = '0px'; 
    contactHeight = '100%'; 
    } else { 
    menuHeight = ($('#desktop-menu').height() + 'px').toString(); 
    contactHeight = ($('.get-in-touch-home').outerHeight() + 'px').toString(); 
    } 

    getHeight(menuHeight,contactHeight) 

} 

function getHeight(menuHeight,contactHeight) { 
    console.log(menuHeight,contactHeight) 
} 

$(window).scroll(scroll); 

Pour un accès global (recommande pas)

window.menuHeight = ''; 
window.contactHeight = ''; 
+0

Je ne sais pas si je peux utiliser 'window' puisqu'il s'agit d'un projet Node, au moins je l'ai lu ici;). –

+0

@ChrisJohnson: Le code de votre question est clairement basé sur un navigateur et utilise déjà 'window'. :-) Vous pouvez écrire la partie serveur avec Node, mais cette partie est basée sur un navigateur. Mais n'utilisez pas 'window.menuHeight' et autres; Ce faisant, ils doivent être des variables globales, ce qui est une mauvaise chose. –

+0

@ T.J.Crowder ils sont mauvais :-) Utilisez des variables globales en dernier recours mais la plupart du temps vous n'en aurez pas besoin. –

2

Vous les définir en dehors de la fonction. En outre, depuis load arrive assez tard dans le processus de chargement de la page, vous aurez envie de les initialiser de manière proactive, puis les mettre à jour en réponse à load et resize. Que vous suggère voulez une fonction réutilisable:

var menuHeight;       // Defining... 
var contactHeight;       // ...them 
grabHeights();        // Proactive 
$(window).on("load resize", grabHeights); // And on events 

function grabHeights() { 
    if ($(window).width() < 768) { 
     menuHeight = '0px'; 
     contactHeight = '100%'; 
    } 
    else { 
     menuHeight = ($('#desktop-menu').height() + 'px').toString(); 
     contactHeight = ($('.get-in-touch-home').outerHeight() + 'px').toString(); 
    } 
} 

Si votre code n'est pas déjà en fonction de la portée, vous voudrez probablement mettre dans un:

(function() { 
    var menuHeight; 
    var contactHeight; 
    grabHeights(); 
    $(window).on("load resize", grabHeights); 

    function grabHeights() { 
     if ($(window).width() < 768) { 
      menuHeight = '0px'; 
      contactHeight = '100%'; 
     } 
     else { 
      menuHeight = ($('#desktop-menu').height() + 'px').toString(); 
      contactHeight = ($('.get-in-touch-home').outerHeight() + 'px').toString(); 
     } 
    } 
})(); 

... depuis GLOBALS sont Bad Thing ™. :-)

Vous verrez des gens vous dire juste aller de l'avant et accrochez l'événement, puis déclencher manuellement:

$("selector").on("event", function() { 
    // ... 
}).triger("event"); 

Je ne suis pas fan. Si vous devez appeler une fonction, appelez-la.

+0

Allez-y et essayez ceux-ci. Je vous remercie!! –

+0

Donc, je veux être en mesure d'utiliser cette variable de 'mise à jour' dans le code ci-dessous, mais il semble seulement obtenir la valeur initiale. '$ ("# contact-modal-1") animatedModal ({ modalTarget:. 'Contact modal', animatedIn: 'slideInUp', animatedOut: 'slideOutDown', débordement: 'scroll', la position : 'fixed', top: menuHeight, animationDurée: '. 7s', couleur: '#EBEBEB' }); 'Toutes mes excuses pour le mauvais formatage. –

+0

@ChrisJohnson essayez la fonction getHeight() de mon code. –