Cleartimeout javascript不工作
由于某种原因,clearTimeout函数在此脚本上不起作用Cleartimeout javascript不工作,javascript,timeout,settimeout,Javascript,Timeout,Settimeout,由于某种原因,clearTimeout函数在此脚本上不起作用 脚本将 1) 自动播放整个youtube视频,并使用setTimeout突出显示产品菜单中的活动步骤以继续下一步。这工作正常 2) 单击菜单中的某个步骤时,自动播放应停止。 -第1步:转到youtube视频的第15秒-播放到第25秒 -第2步:转到youtube视频的第25秒-播放到第35秒 当您在菜单中单击某个步骤时,setTimeout函数仍在运行,因此几秒钟后会调用gotostep函数,并且电影将以错误的步骤继续 有人能查一下
脚本将
1) 自动播放整个youtube视频,并使用setTimeout突出显示产品菜单中的活动步骤以继续下一步。这工作正常
2) 单击菜单中的某个步骤时,自动播放应停止。
-第1步:转到youtube视频的第15秒-播放到第25秒
-第2步:转到youtube视频的第25秒-播放到第35秒
当您在菜单中单击某个步骤时,setTimeout函数仍在运行,因此几秒钟后会调用gotostep函数,并且电影将以错误的步骤继续 有人能查一下吗
<script type="text/javascript">
$(document).ready(function(){
gotostep('C9x4vG_6Qcs','1','1');});
function gotostep(youtube,step,auto){
var steparray=[15,25,35,48,58,65,79];
var numbersteps=steparray.length-1;
var i=1;
var nextstep=parseInt(step)+1;
while(i<=numbersteps){
if(step==i){
document.getElementById('step'+i+'').style.background='url("bg-button-active.jpg")';
var timeout=steparray[step]*1000-steparray[step-1]*1000+3000;
if(nextstep<=numbersteps && auto==1){
var timer1=setTimeout('gotostep("'+youtube+'","'+nextstep+'","1")',timeout);
}
if(nextstep<=numbersteps && auto==0){
clearTimeout(timer1);
}
}else{
document.getElementById('step'+i+'').style.background='url("bg-button.jpg")';
}
i++;
}
var thestart=parseInt(steparray[step-1]);
var theend=steparray[step];
document.getElementById('productdemo-iframe').src="http://www.youtube.com/embed/"+youtube+"?autoplay=1&rel=0&start="+thestart+"&end="+theend+"";
}
$(文档).ready(函数(){
gotostep('C9x4vG_6Qcs','1','1');});
函数gotostep(youtube、step、auto){
var steparray=[15,25,35,48,58,65,79];
var numbersteps=steparray.length-1;
var i=1;
var nextstep=parseInt(步骤)+1;
而(i最简单的修复方法是用window.timer1=
替换var timer1=
,使timer1成为全局的。取消超时时,timer1没有被设置,因为它超出了范围。在全局范围内添加另一个变量来保存timer1值是不好的,但这是最快的修复方法
关于代码,有两点:
请不要在html中使用onclick,您使用的是jQuery,因此可以使用$(“slector”)。在(“单击”)上,使用li的id查看单击的内容
将字符串传递给setTimeout是一个坏主意,它将使用eval来确定要做什么,请参阅下面的代码如何做得更好
您可以使用变量step和auto作为字符串调用gotoStep,但稍后会将它们与数字进行比较。这是因为您使用的是=
而不是==
。最好使用===
传递数字并将数字与数字进行比较
要运行setTimeout,请执行以下操作:
window.timer1=setTimeout(function(){
gotostep(youtube,nextstep,1);
},timeout);
最简单的修复方法是将var timer1=
替换为window。timer1=
使timer1全局化。取消超时时,timer1未被设置,因为它已超出范围。在全局范围上添加另一个变量只是为了保存timer1值是不好的,但这是最快的修复方法
关于代码,有两点:
请不要在html中使用onclick,您使用的是jQuery,因此可以使用$(“slector”)。在(“单击”)上,使用li的id查看单击的内容
将字符串传递给setTimeout是一个坏主意,它将使用eval来确定要做什么,请参阅下面的代码如何做得更好
您可以使用变量step和auto作为字符串调用gotoStep,但稍后会将它们与数字进行比较。这是因为您使用的是=
而不是==
。最好使用===
传递数字并将数字与数字进行比较
要运行setTimeout,请执行以下操作:
window.timer1=setTimeout(function(){
gotostep(youtube,nextstep,1);
},timeout);
@MichaelV还有一件事;使用getDuration()查看视频播放了多远,并使用它突出显示菜单按钮,不是更好吗?如果用户暂停视频,您的代码此时会失败,不是吗?下面是api文档:@MichaelV还有一件事;使用getDuration()不是更好吗要查看视频播放的距离并使用该距离突出显示菜单按钮,请执行以下操作?如果用户暂停视频,您的代码此时会失败,不是吗?以下是api文档: