欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

vux scroller在iOS13上,一停止滑动就跳到顶部

程序员文章站 2022-06-08 23:04:37
...

今天客户反馈的问题,说在最新版的iOS上(iOS13),滑动列表,滑完就会跳到顶部,然后去查了下vux的文档,没有解决办法,百度了一大堆,也没有相关问题,只能看下源码到底是哪除了问题。

经过一层层的查找,终于发现是ios13上面获取transform的结果跟老版本的结果不一样

// 老版本:
'matrix(1, -2.4492935982947064, 2.4492935982947064, 1, 0, 19.48200035095215)'

//新版本
'matrix(1, -2.4492935982947064e-16, 2.4492935982947064e-16, 1, 0, 19.48200035095215)'

而vux-xscroll的正则是这么写的  

window.getComputedStyle(this.container)[transform].match(/[-\d\.*\d*]+/g)

陪配最新版本的ios会出现["1", "-2.4492935982947064", "-16", "2.4492935982947064", "-16", "1", "0", "19.48200035095215"]

然后就导致程序错乱。

校验的代码具体目录是在 \node_modules\[email protected]@vux-xscroll\build\cmd\simulate-scroll.js下的getScrollTop方法

解决办法:将\node_modules\[email protected]@vux-xscroll\build\cmd\simulate-scroll.js下的getScrollTop方法里面的正则表达式替换成下面的就可以了。

  getScrollTop: function() {
    // var transY = window.getComputedStyle(this.container)[transform].match(/[-\d\.*\d*]+/g);
    var transY = window.getComputedStyle(this.container)[transform].match(/[-\d\.*\d*e\-\d]+/g);
    return transY ? Math.round(transY[5]) === 0 ? 0 : -Math.round(transY[5]) : 0;
  },

如果有什么好的解决方法,可以告诉博主哦。