2013-02-04 5 views
0

Je suis en train de créer une page de destination qui inclut une barre de navigation à position fixe qui change de couleur sur certaines positions de défilement. En ce moment j'ai ceci:Combinaison de deux événements avec jQuery

// Change Nav Colors on Scrolldown 
var scroll_pos = 0; 
jQuery(document).scroll(function(){ 
    scroll_pos = jQuery(this).scrollTop(); 
    if(scroll_pos > 730){ 
     jQuery('.top-menu-navigation').css({'background-color' : '#000000'}); 
    } else if (scroll_pos < 730){ 
     jQuery('.top-menu-navigation').css({'background-color' : '#ffffff'}); 
    } 
}); 

Maintenant, ma classe est .top-menu-navigation où je mets l'arrière-plan de la div. Toutefois, la couleur de mes liens est définie dans .top-menu-navigation ul > li a. Je pensais que je pouvais simplement ajouter jQuery('.top-menu-navigation ul > li a').css({'color' : '#ffffff'}); comme deuxième règle dans l'instruction if, mais cela n'a pas fonctionné du tout. Comment puis-je combiner ces deux événements?

Edit: Je vais ajouter un tas de positions de défilement plus tard, je veux juste que ça marche sur une première et je peux comprendre le reste moi-même.

Pour les points bonus, mon dossier complet ressemble à ceci:

jQuery(document).ready(function(){ 

    // Create jQuery Tabs 
    jQuery("#tabs").tabs().addClass('ui-tabs-vertical'); 


    // Sticky Top Nav 

    var NavTop = jQuery('.top-menu-navigation').offset().top; 

    jQuery(window).scroll(function(){ 
     if(jQuery(window).scrollTop() > NavTop) { 
      jQuery('.top-menu-navigation').css({position: 'fixed', top: '0px'}); 
     } else { 
      jQuery('.top-menu-navigation').css({position: 'static'}); 
     } 
    }); 

    // Change Nav Colors on Scrolldown 

    var scroll_pos = 0; 

    jQuery(document).scroll(function(){ 
     scroll_pos = jQuery(this).scrollTop(); 
      if(scroll_pos > 730){ 
       jQuery('.top-menu-navigation').css({'background-color' : '#000000'}); 
      } else if (scroll_pos < 730){ 
       jQuery('.top-menu-navigation').css({'background-color' : '#ffffff'}); 
      } 
     }) 
    }); 

J'aimerais combiner les fonctions Sticky Top Nav et Color Change, est-il possible que ce soit possible? Et j'appelle jQuery sur la bonne chose (document, window)?

J'utilise jQuery au lieu de $ parce que je prévois d'en faire une page d'atterrissage statique pour un site Wordpress.

html pertinente:

  <nav class="top-menu-navigation"> 

       <ul> 
        <li><a href="">Menu Item 1</a></li> 
        <li><a href="">Menu Item 2</a></li> 
        <li><a href="">Menu Item 3</a> 
         <ul> 
          <li><a href="">Submenu Item 1</a></li> 
          <li><a href="">Submenu Item 2</a> 
           <ul> 
            <li><a href="">Link 1</a></li> 
            <li><a href="">Link 2</a></li> 
            <li><a href="">Link 3</a></li> 
           </ul> 
          </li> 
          <li><a href="">Submenu Item 3</a></li> 
         </ul> 
        </li> 
        <li><a href="">Menu Item 3</a></li> 
       </ul> 

      </nav> <!-- end top-menu-navigation --> 
+0

Montrez-nous votre HTML puisque nous parlons sélecteurs ici – Alexander

+0

Avez-vous essayé 'jQuery ('haut menu de navigation nav '). Les enfants (' li '). Find (' a'). Css ({'color': '#ffffff'}); '? – Khez

+0

Je pourrais le faire, mais comment puis-je ajouter des modifications au css du conteneur '.top-menu-navigation' dans ce cas? Quelque chose comme: 'jQuery ('. Top-menu-navigation'). Css ({'background-color:' # 000000 '}). Children (' li '). Find (' a '). Css ({' couleur ':' #ffffff '}); '? –

Répondre

1

Il suffit d'ajouter un après l'autre devrait fonctionner.

// Sticky Top Nav 
var NavTop = jQuery('.top-menu-navigation').offset().top; 

var scroll_pos = 0; 
jQuery(window).scroll(function(){ 
    if(jQuery(window).scrollTop() > NavTop) { 
     jQuery('.top-menu-navigation').css({position: 'fixed', top: '0px'}); 
    } else { 
     jQuery('.top-menu-navigation').css({position: 'static'}); 
    } 

    // Change Nav Colors on Scrolldown 

    scroll_pos = jQuery(this).scrollTop(); 
     if(scroll_pos > 730){ 
      jQuery('.top-menu-navigation').css({'background-color' : '#000000'}); 
     } else if (scroll_pos < 730){ 
      jQuery('.top-menu-navigation').css({'background-color' : '#ffffff'}); 
     } 
}); 
+0

Vous avez seulement répondu à ma question 'facultative'. Mon problème principal ici est que je veux passer des modifications à deux éléments HTML différents ('.top-menu-navigation' et '.top-menu-navigation ul li a') dans la première instruction' if'. Comment ferais-je cela? –

+0

@NickRutten Tout fonctionne comme prévu http://jsfiddle.net/Deele/NUX8b/ – Deele

+0

Oui, mais ce que je veux faire, c'est changer la couleur de '.top-menu-navigation ul li a' quand la couleur de '.top-menu-navigation' change à 730px. Comment est-ce que je combinerais ce code avec le code qui change maintenant la couleur de fond de '.top-menu-navigation ', dans la même déclaration' if'? –