2016-02-26 59 views
0

我將Vertical Fixed NavigationCodyhouse實現到我的網站,並且一切正常。問題出在我在頁面頂部的固定main-nav(即總共兩個導航,一個在頂部和一個垂直)。如何將相同的JQuery應用於兩個導航併爲每個導航添加不同的類

我想要使兩個導航的行爲相同,即根據滾動位置使用平滑滾動和切換類,併爲每個導航使用特定的addClass。 我試圖從兩個資產淨值這種方式選擇的鏈接元素:

var navigationItems = $('#cd-vertical-nav a', '#main-nav a') 

,但沒有奏效。事實上,在下面的代碼片段中,JQuery並沒有起作用。不知道爲什麼:)但在我的網站垂直導航工作正常。

我仍然是一個noob編碼器和新的StackOverflow。我非常感謝任何幫助!

jQuery(document).ready(function($) { 
 
    var contentSections = $('.cd-section'), 
 
    navigationItems = $('#cd-vertical-nav a'); 
 

 
    updateNavigation(); 
 
    $(window).on('scroll', function() { 
 
    updateNavigation(); 
 
    }); 
 

 
    //smooth scroll to the section 
 
    navigationItems.on('click', function(event) { 
 
    event.preventDefault(); 
 
    smoothScroll($(this.hash)); 
 
    }); 
 
    //smooth scroll to second section 
 
    $('.arrow-down').on('click', function(event) { 
 
    event.preventDefault(); 
 
    smoothScroll($(this.hash)); 
 
    }); 
 

 
    //open-close navigation on touch devices 
 
    $('.touch .cd-nav-trigger').on('click', function() { 
 
    $('.touch #cd-vertical-nav').toggleClass('open'); 
 

 
    }); 
 
    //close navigation on touch devices when selectin an elemnt from the list 
 
    $('.touch #cd-vertical-nav a').on('click', function() { 
 
    $('.touch #cd-vertical-nav').removeClass('open'); 
 
    }); 
 

 
    function updateNavigation() { 
 
    contentSections.each(function() { 
 
     $this = $(this); 
 
     var activeSection = $('#cd-vertical-nav a[href="#' + $this.attr('id') + '"]').data('number') - 1; 
 
     if (($this.offset().top - $(window).height()/2 < $(window).scrollTop()) && ($this.offset().top + $this.height() - $(window).height()/2 > $(window).scrollTop())) { 
 
     navigationItems.eq(activeSection).addClass('is-selected'); 
 
     } else { 
 
     navigationItems.eq(activeSection).removeClass('is-selected'); 
 
     } 
 
    }); 
 
    } 
 

 
    function smoothScroll(target) { 
 
    $('body,html').animate({ 
 
     'scrollTop': target.offset().top - 120 
 
     }, 
 
     1500, 'easeOutExpo' 
 
    ); 
 
    } 
 
});
.main-header-container { 
 
    position: fixed; 
 
    width: 100%; 
 
    top: 0; 
 
    left: 0; 
 
    z-index: 9999; 
 
} 
 
header { 
 
    background: DarkGray; 
 
} 
 
a { 
 
    text-decoration: none; 
 
    color: white; 
 
} 
 
li { 
 
    list-style-type: none; 
 
} 
 
.menu { 
 
    line-height: 1.5; 
 
    margin: auto; 
 
} 
 
.menu, 
 
.menu__list { 
 
    padding: 0; 
 
} 
 
.menu__list { 
 
    position: relative; 
 
    display: -webkit-flex; 
 
    display: -webkit-box; 
 
    display: -ms-flexbox; 
 
    display: flex; 
 
    -webkit-flex-wrap: wrap; 
 
    -ms-flex-wrap: wrap; 
 
    flex-wrap: wrap; 
 
    margin: 0; 
 
    list-style: none; 
 
    -webkit-box-pack: center; 
 
    -webkit-justify-content: center; 
 
    -ms-flex-pack: center; 
 
    justify-content: center; 
 
} 
 
.menu__item { 
 
    display: block; 
 
    margin: 1em 0; 
 
} 
 
.menu__link { 
 
    color: white; 
 
    text-transform: uppercase; 
 
    letter-spacing: 2.3px; 
 
    text-decoration: none; 
 
    font-size: 0.9em; 
 
    font-weight: 600; 
 
    display: block; 
 
    cursor: pointer; 
 
    -webkit-user-select: none; 
 
    -moz-user-select: none; 
 
    -ms-user-select: none; 
 
    user-select: none; 
 
    -webkit-touch-callout: none; 
 
    -khtml-user-select: none; 
 
    -webkit-tap-highlight-color: rgba(0, 0, 0, 0); 
 
    position: relative; 
 
    margin: 0 1em; 
 
    padding: 0.75em 0; 
 
    text-align: center; 
 
    -webkit-transition: color 0.3s; 
 
    transition: color 0.3s; 
 
} 
 
.menu__link:hover, 
 
.menu__link:focus { 
 
    outline: none; 
 
    color: yellow; 
 
} 
 
.menu__item--current .menu__link { 
 
    color: yellow; 
 
} 
 
.menu__link::before { 
 
    content: ''; 
 
    position: absolute; 
 
    left: 0; 
 
    bottom: 3px; 
 
    width: 100%; 
 
    height: 2px; 
 
    background: yellow; 
 
    -webkit-transform: scale3d(0, 1, 1); 
 
    transform: scale3d(0, 1, 1); 
 
    -webkit-transition: -webkit-transform 0.1s; 
 
    transition: -webkit-transform 0.1s; 
 
    transition: transform 0.1s; 
 
    transition: transform 0.1s, -webkit-transform 0.1s; 
 
} 
 
.menu__item--current .menu__link::before { 
 
    -webkit-transform: scale3d(1, 1, 1); 
 
    transform: scale3d(1, 1, 1); 
 
    -webkit-transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1); 
 
    transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1); 
 
    -webkit-transition-duration: 0.3s; 
 
    transition-duration: 0.3s; 
 
} 
 
/****Vertical Nav Styles****/ 
 

 
#cd-vertical-nav { 
 
    position: fixed; 
 
    right: 40px; 
 
    top: 50%; 
 
    bottom: auto; 
 
    z-index: 9999; 
 
    -webkit-transform: translate3d(0, -50%, 0); 
 
    transform: translate3d(0, -50%, 0); 
 
} 
 
#cd-vertical-nav li { 
 
    text-align: right; 
 
} 
 
#cd-vertical-nav a { 
 
    display: inline-block; 
 
    -webkit-backface-visibility: hidden; 
 
    backface-visibility: hidden; 
 
} 
 
#cd-vertical-nav a:after { 
 
    content: ""; 
 
    display: table; 
 
    clear: both; 
 
} 
 
#cd-vertical-nav a span { 
 
    float: right; 
 
    display: inline-block; 
 
    -webkit-transform: scale(0.6); 
 
    -ms-transform: scale(0.6); 
 
    transform: scale(0.6); 
 
} 
 
#cd-vertical-nav a:hover span { 
 
    -webkit-transform: scale(1); 
 
    -ms-transform: scale(1); 
 
    transform: scale(1); 
 
} 
 
#cd-vertical-nav a:hover .cd-label { 
 
    opacity: 1; 
 
} 
 
#cd-vertical-nav a.is-selected .cd-dot { 
 
    background-color: white; 
 
    -webkit-transform: scale(1); 
 
    -ms-transform: scale(1); 
 
    transform: scale(1); 
 
} 
 
#cd-vertical-nav .cd-dot { 
 
    position: relative; 
 
    top: 8px; 
 
    height: 10px; 
 
    width: 10px; 
 
    border-radius: 50%; 
 
    background-color: white; 
 
    -webkit-transition: background-color 0.5s, -webkit-transform 0.5s; 
 
    transition: background-color 0.5s, -webkit-transform 0.5s; 
 
    transition: background-color 0.5s, transform 0.5s; 
 
    transition: background-color 0.5s, transform 0.5s, -webkit-transform 0.5s; 
 
    transition: background-color 0.5s, transform 0.5s, -webkit-transform 0.3s; 
 
    transition: transform 0.5s, background-color 0.5s; 
 
    transition: transform 0.5s, background-color 0.5s, -webkit-transform 0.5s; 
 
    transition: transform 0.5s, background-color 0.5s, -webkit-transform 0.3s; 
 
    -webkit-transform-origin: 50% 50%; 
 
    -ms-transform-origin: 50% 50%; 
 
    transform-origin: 50% 50%; 
 
} 
 
#cd-vertical-nav .cd-label { 
 
    position: relative; 
 
    margin-right: 10px; 
 
    padding: .4em .5em; 
 
    color: white; 
 
    font-size: 14px; 
 
    font-size: 0.875rem; 
 
    letter-spacing: 1.3px; 
 
    font-weight: 400; 
 
    -webkit-transition: opacity 0.3s, -webkit-transform 0.3s; 
 
    transition: opacity 0.3s, -webkit-transform 0.3s; 
 
    transition: transform 0.3s, opacity 0.3s; 
 
    transition: transform 0.3s, opacity 0.3s, -webkit-transform 0.3s; 
 
    opacity: 0; 
 
    -webkit-transform-origin: 100% 50%; 
 
    -ms-transform-origin: 100% 50%; 
 
    transform-origin: 100% 50%; 
 
} 
 
.cd-section { 
 
    height: 400px; 
 
} 
 
#landing-section { 
 
    background: DarkCyan; 
 
} 
 
#biography-section { 
 
    background: CornflowerBlue; 
 
} 
 
#recordings-section { 
 
    background: OrangeRed; 
 
} 
 
#gallery-section { 
 
    background: Coral; 
 
} 
 
#contact-section { 
 
    background: MediumPurple; 
 
}
<link href="https://cdnjs.cloudflare.com/ajax/libs/jqueryui/1.11.4/jquery-ui.css" rel="stylesheet" /> 
 
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<script src="https://cdnjs.cloudflare.com/ajax/libs/jqueryui/1.11.4/jquery-ui.js"></script> 
 
<div class="main-header-container"> 
 
    <header> 
 

 
    <nav class="menu clearfix" id="main-nav"> 
 
     <ul class="menu__list"> 
 

 
     <li class="menu__item menu__item--current" id="news"> 
 
      <a class="menu__link" href="#landing-section" data-number="1">News</a> 
 
     </li> 
 
     <li class="menu__item" id="biography"> 
 
      <a class="menu__link" href="#biography-section" data-number="2">Biography</a> 
 
     </li> 
 
     <li class="menu__item" id="recordings"> 
 
      <a class="menu__link" href="#recordings-section" data-number="3">Recordings</a> 
 
     </li> 
 
     <li class="menu__item" id="gallery"> 
 
      <a class="menu__link" href="#gallery-section" data-number="4">Gallery</a> 
 
     </li> 
 
     <li class="menu__item" id="contact"> 
 
      <a class="menu__link" href="#contact-section" data-number="5">Contact</a> 
 
     </li> 
 

 
     </ul> 
 
    </nav> 
 
    </header> 
 
</div> 
 
<nav id="cd-vertical-nav"> 
 
    <ul> 
 
    <li id="vertical-nav1"> 
 
     <a href="#landing-section" data-number="1"> 
 
     <span class="cd-dot"></span> 
 
     <span class="cd-label">News</span> 
 
     </a> 
 
    </li> 
 
    <li id="vertical-nav2"> 
 
     <a href="#biography-section" data-number="2"> 
 
     <span class="cd-dot"></span> 
 
     <span class="cd-label">Biography</span> 
 
     </a> 
 
    </li> 
 
    <li id="vertical-nav3"> 
 
     <a href="#recordings-section" data-number="3"> 
 
     <span class="cd-dot"></span> 
 
     <span class="cd-label">Recordings</span> 
 
     </a> 
 
    </li> 
 
    <li id="vertical-nav4"> 
 
     <a href="#gallery-section" data-number="4"> 
 
     <span class="cd-dot"></span> 
 
     <span class="cd-label">Gallery</span> 
 
     </a> 
 
    </li> 
 
    <li id="vertical-nav5"> 
 
     <a href="#contact-section" data-number="5"> 
 
     <span class="cd-dot"></span> 
 
     <span class="cd-label">Contact</span> 
 
     </a> 
 
    </li> 
 
    </ul> 
 
</nav> 
 

 
<section id="landing-section" class="cd-section"></section> 
 
<section id="biography-section" class="cd-section"></section> 
 
<section id="recordings-section" class="cd-section"></section> 
 
<section id="gallery-section" class="cd-section"></section> 
 
<section id="contact-section" class="cd-section"></section>

回答

0

要選擇多個元素,把它們放在一個單一的選擇字符串,以逗號分隔,沒有參數傳遞給jQuery()功能分開。

var navigationItems = $('#cd-vertical-nav a, #main-nav a'); 

當你調用jQuery有多個參數,第一個參數是一個選擇,第二個參數是內搜索到

$('#main-nav a').find('#cd-vertical-nav a') 
上下文,即

$('#cd-vertical-nav a', '#main-nav a') 

相當於

另一種更通用的方法是使用一個類。

<nav class="menu clearfix fixed-nav" id="main-nav"> 
<nav class="fixed-nav" id="cd-vertical-nav"> 

然後你可以使用$('.fixed-nav a')

+0

的'$( '固定導航一')'的工作做到了!謝謝! – Vito

+0

我現在試圖根據滾動位置向活動鏈接添加一個特定的類。我盡我所能,然後可能會再次求助! :)但當然,我在這裏學習,並會先嚐試自己。非常感謝第一次幫助! – Vito

0

你需要如果你通過了第二選擇作爲一個單獨的參數,那麼它將被視爲context parameter

jQuery(document).ready(function($) { 
 
    var contentSections = $('.cd-section'), 
 
    navigationItems = $('#cd-vertical-nav a, #main-nav a'); 
 

 
    updateNavigation(); 
 
    $(window).on('scroll', function() { 
 
    updateNavigation(); 
 
    }); 
 

 
    //smooth scroll to the section 
 
    navigationItems.on('click', function(event) { 
 
    event.preventDefault(); 
 
    smoothScroll($(this.hash)); 
 
    }); 
 
    //smooth scroll to second section 
 
    $('.arrow-down').on('click', function(event) { 
 
    event.preventDefault(); 
 
    smoothScroll($(this.hash)); 
 
    }); 
 

 
    //open-close navigation on touch devices 
 
    $('.touch .cd-nav-trigger').on('click', function() { 
 
    $('.touch #cd-vertical-nav').toggleClass('open'); 
 

 
    }); 
 
    //close navigation on touch devices when selectin an elemnt from the list 
 
    $('.touch #cd-vertical-nav a').on('click', function() { 
 
    $('.touch #cd-vertical-nav').removeClass('open'); 
 
    }); 
 

 
    function updateNavigation() { 
 
    contentSections.each(function() { 
 
     $this = $(this); 
 
     var activeSection = $('#cd-vertical-nav a[href="#' + $this.attr('id') + '"]').data('number') - 1; 
 
     if (($this.offset().top - $(window).height()/2 < $(window).scrollTop()) && ($this.offset().top + $this.height() - $(window).height()/2 > $(window).scrollTop())) { 
 
     navigationItems.eq(activeSection).addClass('is-selected'); 
 
     } else { 
 
     navigationItems.eq(activeSection).removeClass('is-selected'); 
 
     } 
 
    }); 
 
    } 
 

 
    function smoothScroll(target) { 
 
    console.log('x', target.get()) 
 
    $('body,html').animate({ 
 
     'scrollTop': target.offset().top - 120 
 
     }, 
 
     1500, 'easeOutExpo' 
 
    ); 
 
    } 
 
});
.main-header-container { 
 
    position: fixed; 
 
    width: 100%; 
 
    top: 0; 
 
    left: 0; 
 
    z-index: 9999; 
 
} 
 
header { 
 
    background: DarkGray; 
 
} 
 
a { 
 
    text-decoration: none; 
 
    color: white; 
 
} 
 
li { 
 
    list-style-type: none; 
 
} 
 
.menu { 
 
    line-height: 1.5; 
 
    margin: auto; 
 
} 
 
.menu, 
 
.menu__list { 
 
    padding: 0; 
 
} 
 
.menu__list { 
 
    position: relative; 
 
    display: -webkit-flex; 
 
    display: -webkit-box; 
 
    display: -ms-flexbox; 
 
    display: flex; 
 
    -webkit-flex-wrap: wrap; 
 
    -ms-flex-wrap: wrap; 
 
    flex-wrap: wrap; 
 
    margin: 0; 
 
    list-style: none; 
 
    -webkit-box-pack: center; 
 
    -webkit-justify-content: center; 
 
    -ms-flex-pack: center; 
 
    justify-content: center; 
 
} 
 
.menu__item { 
 
    display: block; 
 
    margin: 1em 0; 
 
} 
 
.menu__link { 
 
    color: white; 
 
    text-transform: uppercase; 
 
    letter-spacing: 2.3px; 
 
    text-decoration: none; 
 
    font-size: 0.9em; 
 
    font-weight: 600; 
 
    display: block; 
 
    cursor: pointer; 
 
    -webkit-user-select: none; 
 
    -moz-user-select: none; 
 
    -ms-user-select: none; 
 
    user-select: none; 
 
    -webkit-touch-callout: none; 
 
    -khtml-user-select: none; 
 
    -webkit-tap-highlight-color: rgba(0, 0, 0, 0); 
 
    position: relative; 
 
    margin: 0 1em; 
 
    padding: 0.75em 0; 
 
    text-align: center; 
 
    -webkit-transition: color 0.3s; 
 
    transition: color 0.3s; 
 
} 
 
.menu__link:hover, 
 
.menu__link:focus { 
 
    outline: none; 
 
    color: yellow; 
 
} 
 
.menu__item--current .menu__link { 
 
    color: yellow; 
 
} 
 
.menu__link::before { 
 
    content: ''; 
 
    position: absolute; 
 
    left: 0; 
 
    bottom: 3px; 
 
    width: 100%; 
 
    height: 2px; 
 
    background: yellow; 
 
    -webkit-transform: scale3d(0, 1, 1); 
 
    transform: scale3d(0, 1, 1); 
 
    -webkit-transition: -webkit-transform 0.1s; 
 
    transition: -webkit-transform 0.1s; 
 
    transition: transform 0.1s; 
 
    transition: transform 0.1s, -webkit-transform 0.1s; 
 
} 
 
.menu__item--current .menu__link::before { 
 
    -webkit-transform: scale3d(1, 1, 1); 
 
    transform: scale3d(1, 1, 1); 
 
    -webkit-transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1); 
 
    transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1); 
 
    -webkit-transition-duration: 0.3s; 
 
    transition-duration: 0.3s; 
 
} 
 
/****Vertical Nav Styles****/ 
 

 
#cd-vertical-nav { 
 
    position: fixed; 
 
    right: 40px; 
 
    top: 50%; 
 
    bottom: auto; 
 
    z-index: 9999; 
 
    -webkit-transform: translate3d(0, -50%, 0); 
 
    transform: translate3d(0, -50%, 0); 
 
} 
 
#cd-vertical-nav li { 
 
    text-align: right; 
 
} 
 
#cd-vertical-nav a { 
 
    display: inline-block; 
 
    -webkit-backface-visibility: hidden; 
 
    backface-visibility: hidden; 
 
} 
 
#cd-vertical-nav a:after { 
 
    content: ""; 
 
    display: table; 
 
    clear: both; 
 
} 
 
#cd-vertical-nav a span { 
 
    float: right; 
 
    display: inline-block; 
 
    -webkit-transform: scale(0.6); 
 
    -ms-transform: scale(0.6); 
 
    transform: scale(0.6); 
 
} 
 
#cd-vertical-nav a:hover span { 
 
    -webkit-transform: scale(1); 
 
    -ms-transform: scale(1); 
 
    transform: scale(1); 
 
} 
 
#cd-vertical-nav a:hover .cd-label { 
 
    opacity: 1; 
 
} 
 
#cd-vertical-nav a.is-selected .cd-dot { 
 
    background-color: white; 
 
    -webkit-transform: scale(1); 
 
    -ms-transform: scale(1); 
 
    transform: scale(1); 
 
} 
 
#cd-vertical-nav .cd-dot { 
 
    position: relative; 
 
    top: 8px; 
 
    height: 10px; 
 
    width: 10px; 
 
    border-radius: 50%; 
 
    background-color: white; 
 
    -webkit-transition: background-color 0.5s, -webkit-transform 0.5s; 
 
    transition: background-color 0.5s, -webkit-transform 0.5s; 
 
    transition: background-color 0.5s, transform 0.5s; 
 
    transition: background-color 0.5s, transform 0.5s, -webkit-transform 0.5s; 
 
    transition: background-color 0.5s, transform 0.5s, -webkit-transform 0.3s; 
 
    transition: transform 0.5s, background-color 0.5s; 
 
    transition: transform 0.5s, background-color 0.5s, -webkit-transform 0.5s; 
 
    transition: transform 0.5s, background-color 0.5s, -webkit-transform 0.3s; 
 
    -webkit-transform-origin: 50% 50%; 
 
    -ms-transform-origin: 50% 50%; 
 
    transform-origin: 50% 50%; 
 
} 
 
#cd-vertical-nav .cd-label { 
 
    position: relative; 
 
    margin-right: 10px; 
 
    padding: .4em .5em; 
 
    color: white; 
 
    font-size: 14px; 
 
    font-size: 0.875rem; 
 
    letter-spacing: 1.3px; 
 
    font-weight: 400; 
 
    -webkit-transition: opacity 0.3s, -webkit-transform 0.3s; 
 
    transition: opacity 0.3s, -webkit-transform 0.3s; 
 
    transition: transform 0.3s, opacity 0.3s; 
 
    transition: transform 0.3s, opacity 0.3s, -webkit-transform 0.3s; 
 
    opacity: 0; 
 
    -webkit-transform-origin: 100% 50%; 
 
    -ms-transform-origin: 100% 50%; 
 
    transform-origin: 100% 50%; 
 
} 
 
.cd-section { 
 
    height: 400px; 
 
} 
 
#landing-section { 
 
    background: DarkCyan; 
 
} 
 
#biography-section { 
 
    background: CornflowerBlue; 
 
} 
 
#recordings-section { 
 
    background: OrangeRed; 
 
} 
 
#gallery-section { 
 
    background: Coral; 
 
} 
 
#contact-section { 
 
    background: MediumPurple; 
 
}
<link href="https://cdnjs.cloudflare.com/ajax/libs/jqueryui/1.11.4/jquery-ui.css" rel="stylesheet" /> 
 
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<script src="https://cdnjs.cloudflare.com/ajax/libs/jqueryui/1.11.4/jquery-ui.js"></script> 
 
<div class="main-header-container"> 
 
    <header> 
 

 
    <nav class="menu clearfix" id="main-nav"> 
 
     <ul class="menu__list"> 
 

 
     <li class="menu__item menu__item--current" id="news"> 
 
      <a class="menu__link" href="#landing-section" data-number="1">News</a> 
 
     </li> 
 
     <li class="menu__item" id="biography"> 
 
      <a class="menu__link" href="#biography-section" data-number="2">Biography</a> 
 
     </li> 
 
     <li class="menu__item" id="recordings"> 
 
      <a class="menu__link" href="#recordings-section" data-number="3">Recordings</a> 
 
     </li> 
 
     <li class="menu__item" id="gallery"> 
 
      <a class="menu__link" href="#gallery-section" data-number="4">Gallery</a> 
 
     </li> 
 
     <li class="menu__item" id="contact"> 
 
      <a class="menu__link" href="#contact-section" data-number="5">Contact</a> 
 
     </li> 
 

 
     </ul> 
 
    </nav> 
 
    </header> 
 
</div> 
 
<nav id="cd-vertical-nav"> 
 
    <ul> 
 
    <li id="vertical-nav1"> 
 
     <a href="#landing-section" data-number="1"> 
 
     <span class="cd-dot"></span> 
 
     <span class="cd-label">News</span> 
 
     </a> 
 
    </li> 
 
    <li id="vertical-nav2"> 
 
     <a href="#biography-section" data-number="2"> 
 
     <span class="cd-dot"></span> 
 
     <span class="cd-label">Biography</span> 
 
     </a> 
 
    </li> 
 
    <li id="vertical-nav3"> 
 
     <a href="#recordings-section" data-number="3"> 
 
     <span class="cd-dot"></span> 
 
     <span class="cd-label">Recordings</span> 
 
     </a> 
 
    </li> 
 
    <li id="vertical-nav4"> 
 
     <a href="#gallery-section" data-number="4"> 
 
     <span class="cd-dot"></span> 
 
     <span class="cd-label">Gallery</span> 
 
     </a> 
 
    </li> 
 
    <li id="vertical-nav5"> 
 
     <a href="#contact-section" data-number="5"> 
 
     <span class="cd-dot"></span> 
 
     <span class="cd-label">Contact</span> 
 
     </a> 
 
    </li> 
 
    </ul> 
 
</nav> 
 

 
<section id="landing-section" class="cd-section"></section> 
 
<section id="biography-section" class="cd-section"></section> 
 
<section id="recordings-section" class="cd-section"></section> 
 
<section id="gallery-section" class="cd-section"></section> 
 
<section id="contact-section" class="cd-section"></section>

0

嘗試使用mutliplse selector syntax

navigationItems = $('#cd-vertical-nav a, #main-nav a') 

這一個

var navigationItems = $('#cd-vertical-nav>a', '#main-nav>a'); 
0

我試着改變jQuery(請參閱更新後的代碼片段),以便根據滾動位置向每個導航的活動鏈接添加一個類。 必須有在這裏是一個問題(也是別的地方?):

updateMainNavigation() 
updateVerticalNavigation() 

在這裏,他們用逗號分隔,但我也試着寫了兩個完整的不同的功能,即使該行爲是一樣的。我無法弄清楚我應該怎麼做才能使它工作。 我是昨天一樣的noob,歡迎任何幫助!

jQuery(document).ready(function($) { 
 
    var contentSections = $('.cd-section'), 
 
    navigationItems = $('.fixed-nav a'); 
 

 
    updateMainNavigation(), updateVerticalNavigation(); 
 
    $(window).on('scroll', function() { 
 
    updateMainNavigation(), updateVerticalNavigation(); 
 
    }); 
 

 
    //smooth scroll to the section 
 
    navigationItems.on('click', function(event) { 
 
    event.preventDefault(); 
 
    smoothScroll($(this.hash)); 
 
    }); 
 
    //smooth scroll to second section 
 
    $('.arrow-down').on('click', function(event) { 
 
    event.preventDefault(); 
 
    smoothScroll($(this.hash)); 
 
    }); 
 

 
    function updateMainNavigation() { 
 
    contentSections.each(function() { 
 
     $this = $(this); 
 
     var activeSection = $('#main-nav a[href="#' + $this.attr('id') + '"]').data('number') - 1; 
 
     if (($this.offset().top - $(window).height()/2 < $(window).scrollTop()) && ($this.offset().top + $this.height() - $(window).height()/2 > $(window).scrollTop())) { 
 
     navigationItems.eq(activeSection).addClass('menu__item--current'); 
 
     } else { 
 
     navigationItems.eq(activeSection).removeClass('menu__item--current'); 
 
     } 
 
    }); 
 
    } 
 

 
    function updateVerticalNavigation() { 
 
    contentSections.each(function() { 
 
     $this = $(this); 
 
     var activeSection = $('#cd-vertical-nav a[href="#' + $this.attr('id') + '"]').data('number') - 1; 
 
     if (($this.offset().top - $(window).height()/2 < $(window).scrollTop()) && ($this.offset().top + $this.height() - $(window).height()/2 > $(window).scrollTop())) { 
 
     navigationItems.eq(activeSection).addClass('is-selected'); 
 
     } else { 
 
     navigationItems.eq(activeSection).removeClass('is-selected'); 
 
     } 
 
    }); 
 
    } 
 

 
    function smoothScroll(target) { 
 
    $('body,html').animate({ 
 
     'scrollTop': target.offset().top - 120 
 
     }, 
 
     1500, 'easeOutExpo' 
 
    ); 
 
    } 
 
});
.main-header-container { 
 
    position: fixed; 
 
    width: 100%; 
 
    top: 0; 
 
    left: 0; 
 
    z-index: 9999; 
 
} 
 
header { 
 
    background: DarkGray; 
 
} 
 
a { 
 
    text-decoration: none; 
 
    color: white; 
 
} 
 
li { 
 
    list-style-type: none; 
 
} 
 
.menu { 
 
    line-height: 1.5; 
 
    margin: auto; 
 
} 
 
.menu, 
 
.menu__list { 
 
    padding: 0; 
 
} 
 
.menu__list { 
 
    position: relative; 
 
    display: -webkit-flex; 
 
    display: -webkit-box; 
 
    display: -ms-flexbox; 
 
    display: flex; 
 
    -webkit-flex-wrap: wrap; 
 
    -ms-flex-wrap: wrap; 
 
    flex-wrap: wrap; 
 
    margin: 0; 
 
    list-style: none; 
 
    -webkit-box-pack: center; 
 
    -webkit-justify-content: center; 
 
    -ms-flex-pack: center; 
 
    justify-content: center; 
 
} 
 
.menu__item { 
 
    display: block; 
 
    margin: 1em 0; 
 
} 
 
.menu__link { 
 
    color: white; 
 
    text-transform: uppercase; 
 
    letter-spacing: 2.3px; 
 
    text-decoration: none; 
 
    font-size: 0.9em; 
 
    font-weight: 600; 
 
    display: block; 
 
    cursor: pointer; 
 
    -webkit-user-select: none; 
 
    -moz-user-select: none; 
 
    -ms-user-select: none; 
 
    user-select: none; 
 
    -webkit-touch-callout: none; 
 
    -khtml-user-select: none; 
 
    -webkit-tap-highlight-color: rgba(0, 0, 0, 0); 
 
    position: relative; 
 
    margin: 0 1em; 
 
    padding: 0.75em 0; 
 
    text-align: center; 
 
    -webkit-transition: color 0.3s; 
 
    transition: color 0.3s; 
 
} 
 
.menu__link:hover, 
 
.menu__link:focus { 
 
    outline: none; 
 
    color: yellow; 
 
} 
 
.menu__item--current .menu__link { 
 
    color: yellow; 
 
} 
 
.menu__link::before { 
 
    content: ''; 
 
    position: absolute; 
 
    left: 0; 
 
    bottom: 3px; 
 
    width: 100%; 
 
    height: 2px; 
 
    background: yellow; 
 
    -webkit-transform: scale3d(0, 1, 1); 
 
    transform: scale3d(0, 1, 1); 
 
    -webkit-transition: -webkit-transform 0.1s; 
 
    transition: -webkit-transform 0.1s; 
 
    transition: transform 0.1s; 
 
    transition: transform 0.1s, -webkit-transform 0.1s; 
 
} 
 
.menu__item--current .menu__link::before { 
 
    -webkit-transform: scale3d(1, 1, 1); 
 
    transform: scale3d(1, 1, 1); 
 
    -webkit-transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1); 
 
    transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1); 
 
    -webkit-transition-duration: 0.3s; 
 
    transition-duration: 0.3s; 
 
} 
 
/****Vertical Nav Styles****/ 
 

 
#cd-vertical-nav { 
 
    position: fixed; 
 
    right: 40px; 
 
    top: 50%; 
 
    bottom: auto; 
 
    z-index: 9999; 
 
    -webkit-transform: translate3d(0, -50%, 0); 
 
    transform: translate3d(0, -50%, 0); 
 
} 
 
#cd-vertical-nav li { 
 
    text-align: right; 
 
} 
 
#cd-vertical-nav a { 
 
    display: inline-block; 
 
    -webkit-backface-visibility: hidden; 
 
    backface-visibility: hidden; 
 
} 
 
#cd-vertical-nav a:after { 
 
    content: ""; 
 
    display: table; 
 
    clear: both; 
 
} 
 
#cd-vertical-nav a span { 
 
    float: right; 
 
    display: inline-block; 
 
    -webkit-transform: scale(0.6); 
 
    -ms-transform: scale(0.6); 
 
    transform: scale(0.6); 
 
} 
 
#cd-vertical-nav a:hover span { 
 
    -webkit-transform: scale(1); 
 
    -ms-transform: scale(1); 
 
    transform: scale(1); 
 
} 
 
#cd-vertical-nav a:hover .cd-label { 
 
    opacity: 1; 
 
} 
 
#cd-vertical-nav a.is-selected .cd-dot { 
 
    background-color: white; 
 
    -webkit-transform: scale(1); 
 
    -ms-transform: scale(1); 
 
    transform: scale(1); 
 
} 
 
#cd-vertical-nav .cd-dot { 
 
    position: relative; 
 
    top: 8px; 
 
    height: 10px; 
 
    width: 10px; 
 
    border-radius: 50%; 
 
    background-color: white; 
 
    -webkit-transition: background-color 0.5s, -webkit-transform 0.5s; 
 
    transition: background-color 0.5s, -webkit-transform 0.5s; 
 
    transition: background-color 0.5s, transform 0.5s; 
 
    transition: background-color 0.5s, transform 0.5s, -webkit-transform 0.5s; 
 
    transition: background-color 0.5s, transform 0.5s, -webkit-transform 0.3s; 
 
    transition: transform 0.5s, background-color 0.5s; 
 
    transition: transform 0.5s, background-color 0.5s, -webkit-transform 0.5s; 
 
    transition: transform 0.5s, background-color 0.5s, -webkit-transform 0.3s; 
 
    -webkit-transform-origin: 50% 50%; 
 
    -ms-transform-origin: 50% 50%; 
 
    transform-origin: 50% 50%; 
 
} 
 
#cd-vertical-nav .cd-label { 
 
    position: relative; 
 
    margin-right: 10px; 
 
    padding: .4em .5em; 
 
    color: white; 
 
    font-size: 14px; 
 
    font-size: 0.875rem; 
 
    letter-spacing: 1.3px; 
 
    font-weight: 400; 
 
    -webkit-transition: opacity 0.3s, -webkit-transform 0.3s; 
 
    transition: opacity 0.3s, -webkit-transform 0.3s; 
 
    transition: transform 0.3s, opacity 0.3s; 
 
    transition: transform 0.3s, opacity 0.3s, -webkit-transform 0.3s; 
 
    opacity: 0; 
 
    -webkit-transform-origin: 100% 50%; 
 
    -ms-transform-origin: 100% 50%; 
 
    transform-origin: 100% 50%; 
 
} 
 
.cd-section { 
 
    height: 400px; 
 
} 
 
#landing-section { 
 
    background: DarkCyan; 
 
} 
 
#biography-section { 
 
    background: CornflowerBlue; 
 
} 
 
#recordings-section { 
 
    background: OrangeRed; 
 
} 
 
#gallery-section { 
 
    background: Coral; 
 
} 
 
#contact-section { 
 
    background: MediumPurple; 
 
}
<link href="https://cdnjs.cloudflare.com/ajax/libs/jqueryui/1.11.4/jquery-ui.css" rel="stylesheet" /> 
 
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<script src="https://cdnjs.cloudflare.com/ajax/libs/jqueryui/1.11.4/jquery-ui.js"></script> 
 
<div class="main-header-container"> 
 
    <header> 
 

 
    <nav class="menu clearfix" id="main-nav"> 
 
     <ul class="menu__list"> 
 

 
     <li class="menu__item menu__item--current" id="news"> 
 
      <a class="menu__link" href="#landing-section" data-number="1">News</a> 
 
     </li> 
 
     <li class="menu__item" id="biography"> 
 
      <a class="menu__link" href="#biography-section" data-number="2">Biography</a> 
 
     </li> 
 
     <li class="menu__item" id="recordings"> 
 
      <a class="menu__link" href="#recordings-section" data-number="3">Recordings</a> 
 
     </li> 
 
     <li class="menu__item" id="gallery"> 
 
      <a class="menu__link" href="#gallery-section" data-number="4">Gallery</a> 
 
     </li> 
 
     <li class="menu__item" id="contact"> 
 
      <a class="menu__link" href="#contact-section" data-number="5">Contact</a> 
 
     </li> 
 

 
     </ul> 
 
    </nav> 
 
    </header> 
 
</div> 
 
<nav id="cd-vertical-nav"> 
 
    <ul> 
 
    <li id="vertical-nav1"> 
 
     <a href="#landing-section" data-number="1"> 
 
     <span class="cd-dot"></span> 
 
     <span class="cd-label">News</span> 
 
     </a> 
 
    </li> 
 
    <li id="vertical-nav2"> 
 
     <a href="#biography-section" data-number="2"> 
 
     <span class="cd-dot"></span> 
 
     <span class="cd-label">Biography</span> 
 
     </a> 
 
    </li> 
 
    <li id="vertical-nav3"> 
 
     <a href="#recordings-section" data-number="3"> 
 
     <span class="cd-dot"></span> 
 
     <span class="cd-label">Recordings</span> 
 
     </a> 
 
    </li> 
 
    <li id="vertical-nav4"> 
 
     <a href="#gallery-section" data-number="4"> 
 
     <span class="cd-dot"></span> 
 
     <span class="cd-label">Gallery</span> 
 
     </a> 
 
    </li> 
 
    <li id="vertical-nav5"> 
 
     <a href="#contact-section" data-number="5"> 
 
     <span class="cd-dot"></span> 
 
     <span class="cd-label">Contact</span> 
 
     </a> 
 
    </li> 
 
    </ul> 
 
</nav> 
 

 
<section id="landing-section" class="cd-section"></section> 
 
<section id="biography-section" class="cd-section"></section> 
 
<section id="recordings-section" class="cd-section"></section> 
 
<section id="gallery-section" class="cd-section"></section> 
 
<section id="contact-section" class="cd-section"></section>

相關問題