关于 jQuery hover()、setInterval 范围和 "this" 问题的问题 ---
A question regarding jQuery hover(), setInterval scope, and The "this" Problem ---
更新---
来自某些性能:
$(".gallery-image").each(function() {
let callInterval;
$(this).hover(function(){
clearInterval(callInterval);
}, function(){
callInterval = setInterval(intervalFunction.bind(this), 500);
});
});
这有助于解决范围问题;但现在我有一个跟进 -
position
i
处的每个图像都需要迭代一个单独的索引,index
确定图像在位置 [=16] 的当前 src =].每个图像的 setInterval
循环的起始 index
应该是它的 position
,然后是每个循环 index++
。但是我被困在每个图像的 src index
只增加一个的地方,然后为每个 setInterval
循环重复相同的值。我到底应该在哪里声明 index
以便它在每个图像的 setInterval
循环中是本地的,但是在不重置为起始值的情况下递增....?
这太基础了,但我不能把它们全部放在一起。
----------------
在我开始之前 -- 我已经花了几个小时来解决解决这个问题的某些部分的 SO 问题,但我真的很难把它们放在一起,所以如果这是几件事情的重复,请原谅我, 哈哈
我正在制作一个图库页面,其中每张图片的占位符会快速循环显示所有可能的图库图片,直到用户将鼠标悬停在 image/placeholder 上,然后(静态)显示“正确的”图片.然后,当用户悬停时,该图像将恢复其快速循环。每个图像占位符都同时且彼此独立地循环显示源。
我在需要 jQuery hover() 函数的 hover-in 和 hover-out 部分引用相同的 setInterval ID 时遇到了麻烦,但与此同时,setInterval 应该有一个本地范围,特定于悬停在其上的每个图像元素。我对 jQuery 也有些陌生,它和 js 之间的区别对我来说并不总是非常清楚。
HTML:
<div class="gallery">
<img class="gallery-image" src="image0.jpg">
<img class="gallery-image" src="image1.jpg">
<img class="gallery-image" src="image2.jpg">
<img class="gallery-image" src="image3.jpg">
<img class="gallery-image" src="image4.jpg">
</div>
js:
var images = document.getElementsByClassName('gallery-image');
var callInterval;
$(".gallery-image").hover(function(){
clearInterval(callInterval);
}, function(){
callInterval = setInterval(intervalFunction.bind(this), 500);
})
function intervalFunction(){
var position = $(this).index();
var index = position;
if (index < 14) {
$(this).attr("src", "image" + index + ".jpg");
index++;
} else {
$(this).attr("src", "image" + index + ".jpg");
index = 0;
}
}
我已经尝试了香草 javascript 和 jQuery,以及两者的各种组合。我是否以错误的方式混合它们?我是否需要多个 hover() 函数,并以这种方式定义 setInterval 函数?我是否应该为图库中的每张图片手动写出一个 hover() 并将 setInterval 函数以这种方式绑定到每张图片?
post 一个片段会更有帮助吗?
我觉得我一直盯着这个问题看太久了,现在我只是在按自己的方式行事,答案一定就在我面前......我正在失去我的介意哈
我将使用 each
遍历每个元素,为每个元素创建一个新的本地作用域,callInterval
可以在以下位置声明:
$(".gallery-image").each(function() {
let callInterval;
$(this).hover(function(){
clearInterval(callInterval);
}, function(){
callInterval = setInterval(intervalFunction.bind(this), 500);
});
});
更新--- 来自某些性能:
$(".gallery-image").each(function() {
let callInterval;
$(this).hover(function(){
clearInterval(callInterval);
}, function(){
callInterval = setInterval(intervalFunction.bind(this), 500);
});
});
这有助于解决范围问题;但现在我有一个跟进 -
position
i
处的每个图像都需要迭代一个单独的索引,index
确定图像在位置 [=16] 的当前 src =].每个图像的 setInterval
循环的起始 index
应该是它的 position
,然后是每个循环 index++
。但是我被困在每个图像的 src index
只增加一个的地方,然后为每个 setInterval
循环重复相同的值。我到底应该在哪里声明 index
以便它在每个图像的 setInterval
循环中是本地的,但是在不重置为起始值的情况下递增....?
这太基础了,但我不能把它们全部放在一起。
----------------
在我开始之前 -- 我已经花了几个小时来解决解决这个问题的某些部分的 SO 问题,但我真的很难把它们放在一起,所以如果这是几件事情的重复,请原谅我, 哈哈
我正在制作一个图库页面,其中每张图片的占位符会快速循环显示所有可能的图库图片,直到用户将鼠标悬停在 image/placeholder 上,然后(静态)显示“正确的”图片.然后,当用户悬停时,该图像将恢复其快速循环。每个图像占位符都同时且彼此独立地循环显示源。
我在需要 jQuery hover() 函数的 hover-in 和 hover-out 部分引用相同的 setInterval ID 时遇到了麻烦,但与此同时,setInterval 应该有一个本地范围,特定于悬停在其上的每个图像元素。我对 jQuery 也有些陌生,它和 js 之间的区别对我来说并不总是非常清楚。
HTML:
<div class="gallery">
<img class="gallery-image" src="image0.jpg">
<img class="gallery-image" src="image1.jpg">
<img class="gallery-image" src="image2.jpg">
<img class="gallery-image" src="image3.jpg">
<img class="gallery-image" src="image4.jpg">
</div>
js:
var images = document.getElementsByClassName('gallery-image');
var callInterval;
$(".gallery-image").hover(function(){
clearInterval(callInterval);
}, function(){
callInterval = setInterval(intervalFunction.bind(this), 500);
})
function intervalFunction(){
var position = $(this).index();
var index = position;
if (index < 14) {
$(this).attr("src", "image" + index + ".jpg");
index++;
} else {
$(this).attr("src", "image" + index + ".jpg");
index = 0;
}
}
我已经尝试了香草 javascript 和 jQuery,以及两者的各种组合。我是否以错误的方式混合它们?我是否需要多个 hover() 函数,并以这种方式定义 setInterval 函数?我是否应该为图库中的每张图片手动写出一个 hover() 并将 setInterval 函数以这种方式绑定到每张图片?
post 一个片段会更有帮助吗?
我觉得我一直盯着这个问题看太久了,现在我只是在按自己的方式行事,答案一定就在我面前......我正在失去我的介意哈
我将使用 each
遍历每个元素,为每个元素创建一个新的本地作用域,callInterval
可以在以下位置声明:
$(".gallery-image").each(function() {
let callInterval;
$(this).hover(function(){
clearInterval(callInterval);
}, function(){
callInterval = setInterval(intervalFunction.bind(this), 500);
});
});