warpcgd / vue-concise-slider

vue-concise-slider,A simple vue sliding component
https://warpcgd.github.io/vue-concise-slider/#/
919 stars 185 forks source link

Cannot read property 'addActive' of undefined #67

Closed anyclub closed 5 years ago

anyclub commented 5 years ago

版本3.3.3,垂直方向,自动滚动,一定时间后 出现 错误

Cannot read property 'addActive' of undefined

配置文件如下

options: {
        currentPage: 0,
        centeredSlides: true,
        autoplay: 4000,
        loop: true,
        direction: 'vertical',
        loopedSlides: 1,
        slidesToScroll: 1,
        timingFunction: 'ease-in-out',
        speed: 300,
        pagination: false
      }

此时滚动区域变成空白了

此时去改变窗口大小 会频繁触发该报错

warpcgd commented 5 years ago

@anyclub 更新3.3.4 试下,应该是定时轮播切换页面后出现的

anyclub commented 5 years ago

@warpcgd OK!

anyclub commented 5 years ago

3.3.4BUG 仍在, 但是出现概率低了很多,复现有难度... 待我找找稳定点的复现方法

anyclub commented 5 years ago

找到方法了,应该是和VUE生命周期结束时没有取消演示器的监听

显示slider之后,切换路由到无SLIDER的页面,错误重现

warpcgd commented 5 years ago

@anyclub resize确实会造成一个错误,刚刚已经修复了,Destroy时没考虑clock,也已经添加上

anyclub commented 5 years ago

问题仍在........

VUE切换页面后, DESTORY应该是没有取消到事件的监听

需要更详尽的重现方式否

warpcgd commented 5 years ago

@anyclub v3.3.5 版本吗,destroy已经把定时和全局事件取消了,还是会抛出错误吗

anyclub commented 5 years ago

对的,3.3.5还是会出错

@warpcgd 开着页面,开发其他组件, 一下午出现了两次,并不确定是哪个操作导致的

anyclub commented 5 years ago

@warpcgd removeEventListener这个方法应该是不能用匿名函数来取消监听吧 slider.vue里面 328行这个写法应该不行吧

除此之外,310行里监听了resize事件 但是并没有REMOVE掉

这个VUE文件貌似还有哪里有格式错误,我用的VSCODE插件VETUR和ESLINT一直无法通过,格式化之后就全乱了,暂时不敢动代码

warpcgd commented 5 years ago

@anyclub removeEventListener 的问题我会再写几个例子测试下, eslint的问题,要查看下vscode的配置,使用项目里面.eslintrc.js 而不是全局的elint配置

做了几次测试,没发现这个错误

   Cannot read property 'addActive' of undefined

出现这个问题在于页面不存在或者已经销毁时,定时器还在跑,可以在切换的时候自己手动stop试下