Cleartimeout javascript不工作

Cleartimeout javascript不工作,javascript,timeout,settimeout,Javascript,Timeout,Settimeout,由于某种原因,clearTimeout函数在此脚本上不起作用 脚本将 1) 自动播放整个youtube视频,并使用setTimeout突出显示产品菜单中的活动步骤以继续下一步。这工作正常 2) 单击菜单中的某个步骤时,自动播放应停止。 -第1步:转到youtube视频的第15秒-播放到第25秒 -第2步:转到youtube视频的第25秒-播放到第35秒 当您在菜单中单击某个步骤时,setTimeout函数仍在运行,因此几秒钟后会调用gotostep函数,并且电影将以错误的步骤继续 有人能查一下

由于某种原因,clearTimeout函数在此脚本上不起作用


脚本将

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文档: