JS/jQuery – 在循环中检查一次初始位置(滚动事件)
JS/jQuery – Check initial position once inside a loop (scroll event)
编辑
var setInitPos = true;
function loop() {
$(".image").each(function() {
// some other code
if (imageIsVisible) {
// some other code
// Set variable initPos only once for each item
if (setInitPos) {
initPos = $(window).scrollTop();
setInitPos = false;
}
}
// some other code
})
}
$(window).scroll(function(){ loop() }
如果某个项目在视口中可见,则用每个项目的值填充一次 var initPos。
但是现在第二项以setInitPos = false开始!这是为什么?
它是全局的,因为您在全局范围内指定了它。
要使它在迭代中是局部的,然后在函数中声明它。您需要为此使用 varb 关键字(如果您使用 ES6,则使用 let)
要使其成为图像的本地属性,请使用 this.initPos,这样您就可以为每个图像元素创建一个新属性。
我发现除了initPos之外没有声明其他变量。而且只声明一次。
尝试在 "if (imageIsVisible) {"
中再次声明 "var initPos"
编辑
在每个 DOM 元素的基础上保持 initPos
的最佳方法是将它附加到每个 DOM 元素,您可以使用 jQuery
' s .data()
$(".image").each(function() {
var initPos = $(this).data('initpos') || 0;
// some other code
if (imageIsVisible) {
// some other code
// Set variable initPos only once for each item
if (!initPos) {
$(this).data('initpos',$(window).scrollTop());
}
}
编辑
var setInitPos = true;
function loop() {
$(".image").each(function() {
// some other code
if (imageIsVisible) {
// some other code
// Set variable initPos only once for each item
if (setInitPos) {
initPos = $(window).scrollTop();
setInitPos = false;
}
}
// some other code
})
}
$(window).scroll(function(){ loop() }
如果某个项目在视口中可见,则用每个项目的值填充一次 var initPos。
但是现在第二项以setInitPos = false开始!这是为什么?
它是全局的,因为您在全局范围内指定了它。
要使它在迭代中是局部的,然后在函数中声明它。您需要为此使用 varb 关键字(如果您使用 ES6,则使用 let)
要使其成为图像的本地属性,请使用 this.initPos,这样您就可以为每个图像元素创建一个新属性。
我发现除了initPos之外没有声明其他变量。而且只声明一次。
尝试在 "if (imageIsVisible) {"
中再次声明 "var initPos"编辑
在每个 DOM 元素的基础上保持 initPos
的最佳方法是将它附加到每个 DOM 元素,您可以使用 jQuery
' s .data()
$(".image").each(function() {
var initPos = $(this).data('initpos') || 0;
// some other code
if (imageIsVisible) {
// some other code
// Set variable initPos only once for each item
if (!initPos) {
$(this).data('initpos',$(window).scrollTop());
}
}