Javascript同时执行if和else
这是我的密码:Javascript同时执行if和else,javascript,if-statement,Javascript,If Statement,这是我的密码: var srcArray = ["_images/overlook.jpg","_images/winery_sign.jpg","_images/lunch.jpg","_images/bigSur.jpg","_images/flag_photo.jpg","_images/mission_look.jpg"]; var myImg = document.getElementById("mainImage"); var imgIndex = 0; var status = f
var srcArray = ["_images/overlook.jpg","_images/winery_sign.jpg","_images/lunch.jpg","_images/bigSur.jpg","_images/flag_photo.jpg","_images/mission_look.jpg"];
var myImg = document.getElementById("mainImage");
var imgIndex = 0;
var status = false;
myImg.onclick = function () {
if (status) {
var collage = setInterval(changeSrc,1500);
status = true;
} else {
clearInterval(collage);
status = false;
}
}
function changeSrc (){
myImg.setAttribute("src",srcArray[imgIndex]);
imgIndex++;
if (imgIndex == srcArray.length) {
imgIndex = 0;
}
}
我试图做的是在未设置interval时设置interval onchangeSrc
,在设置interval时清除interval。我在Firebug中看到,浏览器执行if
的第一部分,然后执行else
的第二行(status=false)
当我点击图像时,一旦设置了间隔,它就会在同一图像上开始另一个间隔。它基本上只是每次点击都会运行得更快,而且不会停止
问题出在哪里
提前感谢您的帮助:)在
函数更改src()
中更改状态,而不是在if else
中更改函数更改src()
中的状态,而不是在if else
中执行此操作:
myImg.onclick = function () {
if (status) {
var collage = setInterval(changeSrc,1500);
} else {
clearInterval(collage);
}
status = !status;
}
在代码中,您未正确初始化状态请执行以下操作:
myImg.onclick = function () {
if (status) {
var collage = setInterval(changeSrc,1500);
} else {
clearInterval(collage);
}
status = !status;
}
在您的代码中,初始化状态不正确您的代码运行得很好。你必须改变:
if (status)
借
也
说明:如果编写If(status==true)
,则只有status为true时,结果才会为true。但是,如果您写入if(status)
,则对于与false
、null
、空字符串
、未定义值
或0
不同的任何状态,结果都将为true
希望它有用 您的代码运行得很好。你必须改变:
if (status)
借
也
说明:如果编写If(status==true)
,则只有status为true时,结果才会为true。但是,如果您写入if(status)
,则对于与false
、null
、空字符串
、未定义值
或0
不同的任何状态,结果都将为true
希望它有用 当您单击图像时,它开始滚动图像,第一个瞬间,而不是单击停止时的每个计时器。我想这是理想的效果。你不需要这个身份
var srcArray = ["_images/overlook.jpg","_images/winery_sign.jpg","_images/lunch.jpg","_images/bigSur.jpg","_images/flag_photo.jpg","_images/mission_look.jpg"],
myImg = document.getElementById("mainImage"),
imgIndex = 0,
tmr;
myImg.onclick = function () {
// if tmr === undefined, start the rollover.
if (!tmr) {
// I call changeSrc() to give instant feedback on first click!
changeSrc();
tmr = setInterval(changeSrc,1500);
// else if tmr has a value stop the rollover, make sure we set tmr to undefined.
}else{
clearInterval(tmr);
tmr=undefined; !IMPORTANT
}
}
function changeSrc (){
myImg.setAttribute("src",srcArray[imgIndex]);
imgIndex++;
if (imgIndex == srcArray.length) {
imgIndex = 0;
}
}
当您单击图像时,它会启动图像滚动,第一个瞬间,而不是单击停止时按计时器滚动。我想这是理想的效果。你不需要这个身份
var srcArray = ["_images/overlook.jpg","_images/winery_sign.jpg","_images/lunch.jpg","_images/bigSur.jpg","_images/flag_photo.jpg","_images/mission_look.jpg"],
myImg = document.getElementById("mainImage"),
imgIndex = 0,
tmr;
myImg.onclick = function () {
// if tmr === undefined, start the rollover.
if (!tmr) {
// I call changeSrc() to give instant feedback on first click!
changeSrc();
tmr = setInterval(changeSrc,1500);
// else if tmr has a value stop the rollover, make sure we set tmr to undefined.
}else{
clearInterval(tmr);
tmr=undefined; !IMPORTANT
}
}
function changeSrc (){
myImg.setAttribute("src",srcArray[imgIndex]);
imgIndex++;
if (imgIndex == srcArray.length) {
imgIndex = 0;
}
}
只需将拼贴变量从if语句中移出,因为当您将其声明到if语句中时,该变量将仅存在于该范围内 我不知道为什么bool不能用,这就是为什么我把它改成数字:p我希望其他人能回答这个问题
var myImg = document.getElementById("mainImage");
var imgIndex = 0;
var status = 1;
var collage;
myImg.onclick = function ()
{
if(status == 1)
{
collage = setInterval(changeSrc,1500);
status = 0;
}
else
{
clearInterval(collage);
status = 1;
}
}
只需将拼贴变量从if语句中移出,因为当您将其声明到if语句中时,该变量将仅存在于该范围中 我不知道为什么bool不能用,这就是为什么我把它改成数字:p我希望其他人能回答这个问题
var myImg = document.getElementById("mainImage");
var imgIndex = 0;
var status = 1;
var collage;
myImg.onclick = function ()
{
if(status == 1)
{
collage = setInterval(changeSrc,1500);
status = 0;
}
else
{
clearInterval(collage);
status = 1;
}
}
您需要声明
拼贴
与声明状态
的位置相同-否则每次调用“click”处理程序时都会有一个新的拼贴
变量,您将丢失旧的计时器句柄。您将状态=true
和状态=false
混淆。请注意,在if(status)
中,您正在设置status=true
,此时您应该说status=false
,因为它已经是true了。对我来说,它似乎是if(status){
永远不会执行您需要声明拼贴
与您声明的状态
相同的位置-否则每次“单击”时都会有一个新的拼贴
变量处理程序被调用,您将丢失旧的计时器句柄。您将状态=真
和状态=假
混淆。请注意,在if(status)
中,您正在设置状态=真
,此时您应该说状态=假
,因为它已经是真的。在我看来,它就像if(status){
从未执行过非常感谢,它很有效!但如果您不介意的话,我有一个问题要问您。当我声明tmr的值为“undefined”时,为什么“!tmr”为真?还有一件事。计时器停止后,它不会再次启动。tmr返回值“2”…好的,我已经修复了代码并更新了我的答案。很抱歉,太晚了!它现在将重新启动。当我们清除间隔时,我们必须将tmr设置为未定义。(请参阅更新的代码和FIDLE)因此,当他们再次单击时!tmr===未定义,滚动重新启动。我认为这回答了您的问题为什么是2。我认为我的答案是问题的正确解决方案,而选择的答案不是,因为它不起作用。我认为应该选择我的答案,因为它正确解决了问题,起作用并解释了OP遇到的问题。非常感谢,它可以工作!但如果您不介意的话,我有一个问题要问您。当我声明tmr的值为“undefined”时,为什么“!tmr”为真?还有一件事。计时器停止后,它不会再次启动。tmr返回值“2”…好的,我已经修复了代码并更新了我的答案。很抱歉,太晚了!它现在将重新启动。当我们清除间隔时,我们必须将tmr设置为未定义。(请参阅更新的代码和FIDLE)因此,当他们再次单击时!tmr===未定义,滚动重新启动。我认为这回答了您的问题为什么是2。我认为我的答案是问题的正确解决方案,而选择的答案不是,因为它不起作用。我认为应该选择我的答案,因为它正确解决了问题,起作用并解释了OP遇到的问题。谢谢你,将拼贴var移出if helpedI我认为我的答案是正确的,因为它有效地解决了问题要求我们解决的问题。在评论中也被认为是正确和有效的。你是对的@MartinWebb,但这里重要的是相互帮助和学习。我完全同意,我的工作只是为了帮助他人解决问题,并从中学习自己。如果我发现我的本意不是帮助他人,我会纠正自己。谢谢。谢谢,将collage var移出if help。我认为我的答案是正确的,因为它起作用了,解决了问题要求我们解决的问题。它也被