关于js中setInterval自身调用clearInterval的算法

55555~
我写这个算法已经一个星期了,还是解决不了,往各位大佬能帮忙看看

问题描述:手机APP上的自动滑动效果,详细点就是触摸滑动,然后app自动滑动完剩下部分。
滑动第一次的效果很正常,但是第二次的时候就有问题了,有两个setInterval在运行!

Slide.prototype.touchend = function (ev) {
    var _this = this
    var ev = ev || window.event
    var i = this.slidePos > -(this.slideWidth*3/5) ? 4 : -4//判断方向并设置速度
    _this.slideUpdate = setInterval(function() {
        if (_this.slidePos <= -5 && _this.slidePos >= -_this.slideWidth-1) {//判断是否自动滑动
            _this.moveLong += i//更新滑动的距离
            _this.moveSlide()//调用滑动函数,滑动moveLong个距离
            _this.slidePos = parseInt(_this.slide.style.left)//更新滑块位置,以便判断是否自动滑动
            console.log("does it work?1",);
            // ableDrag = false
        }else{//滑动结束,应清除自身滑动,否则下次再次滑动会叠加!!!!就是这!!!!!
            //console.log("does it work?2", _this.slideUpdate);
            clearInterval(_this.slideUpdate)//清除滑动
            console.log("does it work?3", _this.slideUpdate);
            _this.slidePos = parseInt(_this.slide.style.left)//更新滑块位置,以便判断是否自动滑动
        }
    },10)

}

Slide.prototype.moveSlide = function (ev) {
    var _this = this
    var ev = ev || window.event
    _this.slide.style.left = _this.moveLong  +"px"
}

这是运行时候的结果

这是运行时候的结果,第一次拖动运行1,2行,第二次拖动运行3,4行

感谢各位大佬。能帮忙宣传一下更好了

阅读 4k
5 个回答

在这行代码_this.slideUpdate = setInterval 之前
添加 if (_this.slideUpdate) clearInterval(_this.slideUpdate)

看代码没有看出什么问题,这样子也没法调试。
但是setInterval出问题的代码,一般可以改成setTimeout解决。

_this.slideUpdate 这个变量没必要放到当前对象上,直接 var slideUpdate 试试

建议换成setTimeout规避setinterval带来的问题

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题