我在一个固定为 3 个元素的 Javascript 文件中有一些代码。
我现在从数据库中提取项目,因此我需要将其转换为循环以创建适量的元素。
我似乎无法弄清楚如何正确编写动态变量。
这是我最初拥有的:
var block0=$('#block0').offset().top;
var block1=$('#block1').offset().top;
var block2=$('#block2').offset().top;
$(window).scroll(function(){
windowScroll=$(window).scrollTop();
// conditional first item
if(windowScroll > block0){
$('.arrow').show();
$('.static_ele').hide();
$('#block_1').show();
$('#block_1').css({'position':'fixed','padding-top':0});
$('.arrow a').removeClass('upward');
}else{
$('.arrow a').attr('href','#block1');
}
// all central items
if(windowScroll > block1-200){
$('.static_ele').hide();
$('#block_2').show();
$('#block_2').css('position','fixed');
$('.arrow a').attr('href','#block2');
$('.arrow a').removeClass('upward');
}
// conditional last item
if(windowScroll > block2-200){
$('.static_ele').hide();
$('#block_3').show();
$('#block_3').css('position','fixed');
$('.arrow a').attr('href','#arrow1');
$('.arrow a').addClass('upward');
}
})
这就是我现在必须要做的:
var i=1;
var len={{collection.products_count}};
$(window).scroll(function(){
windowScroll=$(window).scrollTop();
// first block
if(windowScroll > $('#block0').offset().top){
$('.arrow').show();
$('.static_ele').hide();
$('#block_1').show();
$('#block_1').css({'position':'fixed','padding-top':0});
$('.arrow a').removeClass('upward');
}else{
$('.arrow a').attr('href','#block1');
}
// central blocks
for (i; i<len-2; i++)
{
if(windowScroll > $('#block'+i).offset().top-200){
$('.static_ele').hide();
$('#block_'+(i+1)).show();
$('#block_'+(i+1)).css('position','fixed');
$('.arrow a').attr('href','#block'+(i+1));
$('.arrow a').removeClass('upward');
}
} // end for loop
// last block
if(windowScroll > $('#block'+(len-1)).offset().top-200){
$('.static_ele').hide();
$('#block_'+len).show();
$('#block_'+len).css('position','fixed');
$('.arrow a').attr('href','#arrow1');
$('.arrow a').addClass('upward');
}
}) // end window scroll function
这仍然无法正常工作。如果我将项目从四个循环中取出并手动输入它们就可以了。因此,如果我将上面的 For 循环替换为
// central blocks
if(windowScroll > $('#block1').offset().top-200){
$('.static_ele').hide();
$('#block_2').show();
$('#block_2').css('position','fixed');
$('.arrow a').attr('href','#block2');
$('.arrow a').removeClass('upward');
}
if(windowScroll > $('#block2').offset().top-200){
$('.static_ele').hide();
$('#block_3').show();
$('#block_3').css('position','fixed');
$('.arrow a').attr('href','#block3');
$('.arrow a').removeClass('upward');
}
然后它非常适用于有 4 个项目的场景。所以我认为这是因为所有情况都需要从 windowScroll 函数中访问,而当它们包含在 for 循环中时它们不是?还有另一种编码方式吗?
(一点背景 - 这个脚本是在用户向下滚动页面时隐藏和显示 div。页面底部的箭头可用于单击下一张幻灯片。当您到达底部时,箭头会出现并带您回到顶部。)