javascript覆盖循环
javascript overriding a loop
这可能很荒谬,询问如此庞大的代码。。。但基本上,我有一个完整的部分,循环通过4个div的内容。这很好。然后我有一个部分,如果你把鼠标悬停在一个div上,这个部分将保持活动状态,或者如果你点击这个div,它将一直保持活动状态。这一点也能单独发挥作用。但当我将它们组合在一起时,我会遇到这样的问题,即使你在悬停,循环也会一直工作,因为循环永远不会停止。
现在,有没有一种方法可以使悬停和单击位也暂停循环部分。Essentally我正在尝试为你在互联网上看到的所有滑块编写我自己的小版本
谢谢。
$(window).load(function(){
var clicked = 0;
var i = 1;
var j = (i - 1);
function myLoop () {
setTimeout(function () {
if (clicked == 0) {
$("#nHstuff4").hide();$("#nHpicture4").hide();
$("#nH4").removeClass("active");
$("#nHstuff" + j).hide();$("#nHpicture" + j).hide();
$("#nH" + j).removeClass("active");
$("#nHstuff" + i).show();$("#nHpicture" + i).show();
$("#nH" + i).addClass("active");
i++;
j++;
if (i < 5) {
myLoop();
}
else if (i == 5) {
i = 1;
j = 0;
myLoop();
}
}else{} } ,3000);
}
myLoop();
$("#nH1").click(function() {
if (clicked == 0) {
clicked = 1;
$("#nH1").addClass("active");
}else if (clicked == 1) {
$(".nHstuff").hide();
$(".nH").removeClass("active");
clicked = 0;
}
});
$("#nH2").click(function() {
if (clicked == 0) {
clicked = 1;
$("#nH2").addClass("active");
}else if (clicked == 1) {
$(".nHstuff").hide();
$(".nH").removeClass("active");
clicked = 0;
}
});
$("#nH3").click(function() {
if (clicked == 0) {
clicked = 1;
$("#nH3").addClass("active");
}else if (clicked == 1) {
$(".nHstuff").hide();
$(".nH").removeClass("active");
clicked = 0;
}
});
$("#nH4").click(function() {
if (clicked == 0) {
clicked = 1;
$("#nH4").addClass("active");
}else if (clicked == 1) {
$(".nHstuff").hide();
$(".nH").removeClass("active");
clicked = 0;
}
});
$("#nH1").hover(function() {if (clicked == 0) {
$("#nH1stuff").show();$("#nH1picture").show();
}else{}},function(){
if (clicked == 0) {
$("#nH1stuff").hide();$("#nH1picture").hide();
}
else {}
});
$("#nH2").hover(function() {if (clicked == 0) {
$("#nH2stuff").show();$("#nH2picture").show();
}else{}},function(){
if (clicked == 0) {
$("#nH2stuff").hide();$("#nH2picture").hide();
}
else {}
});
$("#nH3").hover(function() {if (clicked == 0) {
$("#nH3stuff").show();$("#nH3picture").show();
}else{}},function(){
if (clicked == 0) {
$("#nH3stuff").hide();$("#nH3picture").hide();
}
else {}
});
$("#nH4").hover(function() {if (clicked == 0) {
$("#nH4stuff").show();$("#nH4picture").show();
}else{}},function(){
if (clicked == 0) {
$("#nH4stuff").hide();$("#nH4picture").hide();
}
else {}
});
});
试试这个。。。
$(window).load(function(){
var clicked = 0;
var i = 1;
var j = (i - 1);
var hovering = false;
function myLoop () {
setTimeout(function () {
if (hovering) return;
if (clicked == 0) {
$("#nHstuff4").hide();$("#nHpicture4").hide();
$("#nH4").removeClass("active");
$("#nHstuff" + j).hide();$("#nHpicture" + j).hide();
$("#nH" + j).removeClass("active");
$("#nHstuff" + i).show();$("#nHpicture" + i).show();
$("#nH" + i).addClass("active");
i++;
j++;
if (i < 5) {
myLoop();
}
else if (i == 5) {
i = 1;
j = 0;
myLoop();
}
}else{} } ,3000);
}
myLoop();
$("#nH1").click(function() {
if (clicked == 0) {
clicked = 1;
$("#nH1").addClass("active");
}else if (clicked == 1) {
$(".nHstuff").hide();
$(".nH").removeClass("active");
clicked = 0;
}
});
$("#nH2").click(function() {
if (clicked == 0) {
clicked = 1;
$("#nH2").addClass("active");
}else if (clicked == 1) {
$(".nHstuff").hide();
$(".nH").removeClass("active");
clicked = 0;
}
});
$("#nH3").click(function() {
if (clicked == 0) {
clicked = 1;
$("#nH3").addClass("active");
}else if (clicked == 1) {
$(".nHstuff").hide();
$(".nH").removeClass("active");
clicked = 0;
}
});
$("#nH4").click(function() {
if (clicked == 0) {
clicked = 1;
$("#nH4").addClass("active");
}else if (clicked == 1) {
$(".nHstuff").hide();
$(".nH").removeClass("active");
clicked = 0;
}
});
$("#nH1").hover(function() {if (clicked == 0) {
hovering = true;
$("#nH1stuff").show();$("#nH1picture").show();
}else{}},function(){
hovering = false;
if (clicked == 0) {
$("#nH1stuff").hide();$("#nH1picture").hide();
}
else {}
});
$("#nH2").hover(function() {if (clicked == 0) {
hovering = true;
$("#nH2stuff").show();$("#nH2picture").show();
}else{}},function(){
hovering = false;
if (clicked == 0) {
$("#nH2stuff").hide();$("#nH2picture").hide();
}
else {}
});
$("#nH3").hover(function() {if (clicked == 0) {
hovering = true;
$("#nH3stuff").show();$("#nH3picture").show();
}else{}},function(){
hovering = false;
if (clicked == 0) {
$("#nH3stuff").hide();$("#nH3picture").hide();
}
else {}
});
$("#nH4").hover(function() {if (clicked == 0) {
hovering = true;
$("#nH4stuff").show();$("#nH4picture").show();
}else{}},function(){
hovering = false;
if (clicked == 0) {
$("#nH4stuff").hide();$("#nH4picture").hide();
}
else {}
});
});
我只添加了变量hovering
,悬停时将其设置为true,不悬停时设置为false。然后我在超时中添加了一个条件返回。(这与您对clicked
所做的操作类似,但使用了布尔值而不是整数)。
有一个更好的方法来完成超时。你可以使用setInterval
,这样你就不必一直调用它,然后你可以在悬停时使用clearInterval
,在停止悬停时再调用setInterval
。不过,你所拥有的一切都会奏效。只要在谷歌上搜索一下setInterval
,因为它更适合这样的东西。
顺便说一句,制作自己的版本并学习如何做到这一点,而不仅仅是使用插件,值得称赞:)插件非常棒,通常非常方便,但你无法战胜自己知道如何做!
将timerID的值保存在变量中。
var loopTimer = 0;
function myLoop() {
loopTimer = setTimeout(function() {
//All your loop code
}, 30000);
}
清除悬停时的超时,并在鼠标离开时重新启动:
$("#nH1").hover(function() {if (clicked == 0) {
hovering = true;
$("#nH1stuff").show();$("#nH1picture").show();
clearTimeout(loopTimer);
}
},function() {
hovering = false;
if (clicked == 0) {
$("#nH1stuff").hide();$("#nH1picture").hide();
myLoop(); //restart your loop
}
});
请研究在已知的时间间隔上对定期安排的事件使用setInterval。这将使代码更易于理解。
相关文章:
- 在循环中分配json值时,值被覆盖
- 如何覆盖requestAnimationFrame循环
- 如何在循环中使用jQuery.on()方法,而不覆盖我循环的对象
- 当我'm试图覆盖循环中的元素
- 在 forEach 循环中覆盖的变量
- 为什么我的 JS 循环会覆盖对象中以前的条目
- Javascript 循环和数组通过给定的最后一个值覆盖元素
- for 循环中的覆盖函数
- JavaScript 事件在 for 循环中被覆盖
- 如何在循环中更新html标记的值而不覆盖前几轮
- javascript覆盖循环
- JQuery变量在循环中覆盖,希望保留不同的值
- for循环生成的二维JavaScript数组正在被上一个循环结果覆盖
- 如何循环遍历新生成的数组而不覆盖它?
- 每次循环覆盖变量
- 变量在异步函数中被async覆盖.forEach循环
- 当使用循环添加标记时,Leafletjs地图覆盖停止工作
- 如何在单个for循环中覆盖网格中的每个正方形
- $.getJSON,并在foreach循环中覆盖所有输入字段
- 循环中的变量被覆盖