繁体   English   中英

为什么此JavaScript函数只能运行一次?

[英]Why does this JavaScript function only work once?

我已经尽力找出为什么此函数只能运行一次,但是似乎没有一种解决方案适用(例如,声明变量与函数同名)。 以下函数“ scroll()”以所需速度滚动我的页面,以与正在播放的音频读数相协调。 它的效果很好,但仅在不刷新页面的情况下只能工作一次。

我要去哪里错了?

function scroll() {
  var element = document.getElementById("scrolldiv");
  var scrollingheight = element.scrollHeight - window.innerHeight;
  var thirdscreen = (window.innerHeight * .31);
  var halfscreen = (window.innerHeight * .69);
  var delaypercent = (thirdscreen / element.scrollHeight) * 100;
  var speedpercent = (halfscreen / element.scrollHeight) * 100;
  var dur = $("#jquery_jplayer_audio_1").data("jPlayer").status.duration;
  var speedcalc1 = (dur * speedpercent) / 100;
  var speedcalc2 = dur - speedcalc1;
  var speed = (speedcalc2 * 1000) / scrollingheight;
  speed2 = (Math.round(speed * 4) / 4).toFixed(2);
  var delay = (delaypercent * dur) * 10;
  setTimeout(function(){
      scrollinterval = setInterval("scrollmove()", speed2);
  }, delay);
}

function scrollmove() {
  if (localStorage.getItem("scrolling") == 'on') {
    var position = $('#scrolldiv').scrollTop();
    $('#scrolldiv').scrollTop(position + 1);
  }
}

我意识到我的代码可以更优雅地编写,但是现在我正在努力使其工作。 感谢您的输入

我们知道setTimeout()仅执行一次,并且setInterval()重复执行。 当调用这些方法中的任何一个时,您正在创建一个包含关联回调的变量对象。 放下该对象时-setTimeout()执行或使用clearInterval()取消setInterval()-该对象将无效并被垃圾回收。 发生这种情况时,它所包含的回调及其所有变量也都会改变。

因为您将setInterval()嵌套在setTimeout()中作为回调的一部分,所以一旦setTimeout()执行,就会删除setInterval()。 您需要找到另一种调用setInterval()的方法。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM