当用户滚动到#bx2并在用户滚动到#bx3时将#pg3更改为'active'时,我正试图计算如何将#pg2的css类更改为'active'等等...
<ul id="navi" style="position:fixed;top:0">
<li><a href="#bx1" id="pg1" class="active">1</a></li>
<li><a href="#bx2" id="pg2" class="">2</a></li>
<li><a href="#bx3" id="pg3" class="">3</a></li>
...
<li><a href="#bx00" id="pg100" class="">100</a></li>
</ul>
<div class="tallbigblock" id="bx1">...</div>
<div class="tallbigblock" id="bx2">...</div>
<div class="tallbigblock" id="bx3">...</div>
...
<div class="tallbigblock" id="bx100">...</div>
这是我的jquery:
$( window ).scroll( function() {
var t = $( "#bx1" ).offset().top;
if( $(this).scrollTop() > t )
{
$( "#navi li a" ).removeClass( "active" ).hasClass( "active" );
$( "#pg1" ).addClass( "active" );
}
var t = $( "#bx2" ).offset().top;
if( $(this).scrollTop() > t )
{
$( "#navi li a" ).removeClass( "active" ).hasClass( "active" );
$( "#pg2" ).addClass( "active" );
}
var t = $( "#bx3" ).offset().top;
if( $(this).scrollTop() > t )
{
$( "#navi li a" ).removeClass( "active" ).hasClass( "active" );
$( "#pg3" ).addClass( "active" );
}
});
问题是,如果我有一个50“.tallbigblock”divs ...或动态生成“.tallbigblock”divs ...
我一直试图弄清楚如何使jquery为 n 数量的“.tallbigblock”div工作,而无需手动编写每个div的jquery ... 希望你们能帮助我...
非常感谢!
答案 0 :(得分:1)
这是未经测试的,但与原始代码的唯一区别在于它不是硬编码的,只允许一次激活一个框。
$(window).scroll(function() {
var scrollTop = $(this).scrollTop();
$('#navi li a').removeClass('active');
$('.tallbigblock').each(function()
{
if(scrollTop > $(this).offset().top)
{
$('#pg'+this.id.split('x')[1]).addClass('active');
return false; // this breaks the each loop
}
});
});
答案 1 :(得分:0)
基于@summoner发布的代码,我修改并测试了以下代码:
$(window).scroll(function() {
var scrollTop = $(this).scrollTop();
$(".tallbigblock").each(function() {
if(scrollTop > $(this).offset().top)
{
var i = $(this).attr('id');
var nid = "#pg" + i.replace("bx", "");
$("#navi li a").removeClass("active").hasClass("active");
$(nid).addClass("active");
}
});
});