[英]Why does my javascript function only work once calling from codebehind?
[英]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.