由于in this question about creating a responsive nav menu描述的问题,我需要有两个相同的导航元素,一个对于小屏幕可见,另一个对于大屏幕可见。
但是,我希望使用scrollspy跟踪并同时应用.active
个类。为简单起见,我们假设我们有两个相同的导航,如下所示:
<div class="scrollspy navbar">
<nav class="nav">
<li><a href="#option1">Option 1</a></li>
<li><a href="#option2">Option 2</a></li>
<li><a href="#option3">Option 3</a></li>
<li><a href="#option4">Option 4</a></li>
<li><a href="#option5">Option 5</a></li>
</nav>
</div>
然后是内容:
<div class="content">
<section id="option1">1</section>
<section id="option2">2</section>
<section id="option3">3</section>
<section id="option4">4</section>
<section id="option5">5</section>
</div>
然后调用scrollspy:
$(".wrapper").scrollspy({ target: ".scrollspy" });
你会在fiddle中看到活动类混乱,并在两个导航上来回闪烁。但是,如果从其中一个导航中删除scrollspy
类,则另一个可以正常工作。这可以解决吗?
答案 0 :(得分:3)
这是修复我的朋友。它有点满口,所以如果有人有更直接的解决方案,请继续。与此同时,这将得到解决。
$(document).ready(function () {
$(".wrapper").scrollspy({ target: ".scrollspy" });
var scollSpy2ActiveLI = "";
$('.wrapper').on('activate.bs.scrollspy', function () {
if (scollSpy2ActiveLI != "") {
scollSpy2ActiveLI.removeClass('active');
}
var activeTab = $('.scrollspy li.active a').attr('href');
scollSpy2ActiveLI = $('.scrollspy2 li a[href="' + activeTab + '"]').parent();
scollSpy2ActiveLI.addClass('active');
})
$('.wrapper').trigger('activate.bs.scrollspy');
});
注意我使用.scrollspy2
作为您的第二个导航。
答案 1 :(得分:2)
这个解决方案对我不起作用,因为我有两个不相同的导航并且内部没有相同的锚链接。 (.scrollspy1中的活动链接不一定在.scrollspy2中有相应的双胞胎)
然而,简单:
$(".wrapper").scrollspy({ target: ".scrollspy, .scrollspy2" });
足以解决闪烁的问题。
答案 2 :(得分:0)
如果您提供空目标,则所有导航都有效:https://stackoverflow.com/a/23937735
我自己测试过。一个令人惊讶的解决方案。
答案 3 :(得分:0)
使用id代替类。
mock