最近在项目上遇到了一个很恶心的问题,就是项目在ios 13
的苹果手机上,滑动的时候总是会莫名其妙的弹回顶部。
因为是维护之前的项目,这个项目之前也不是我写的,也不清楚当时那位老哥是为何非要使用已经停止维护的vux
的Scroller
。
刚开始面对这个问题我也是很茫然,因为在开发的时候用浏览器测试时是完全没有这个问题,加上我手机之前也没有升级到ios 13
,所以也是没有发现到这个问题。发现了以后,我去排查代码,感觉也没什么问题呀。好像也没有类似让他滚回顶部的逻辑代码呀。于是我就百度一下,看了一些,好像这个vux
坑还蛮多的,但是似乎没有找到于我类似的文章。于是,我就只能与google了。幸运的是我终于找到了遇到跟我一样的孩纸。
简单的说一下原因:
大概就是因为ios13上面获取transform的结果跟老版本的结果不一样
// 老版本:
'matrix(1, -2.4492935982947064, 2.4492935982947064, 1, 0, 19.48200035095215)'
//新版本
'matrix(1, -2.4492935982947064e-16, 2.4492935982947064e-16, 1, 0, 19.48200035095215)'
解决方法:
将\node_modules\vux-xscroll\build\cmd\simulate-scroll.js
下的getScrollTop方法里面的正则表达式替换成下面(/[-\d.\de-\d]+/g )的就可以了。
这里路径可能不完全一样,反正就是源码库里的vux-xscroll里的simulate-scroll.js
这个文件
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;
}
其实这个里面的更深层的意思是什么我也不懂,就是想记录一下自己的经历,然后也希望以后要是还有小朋友遇到这个问题,可以更快的解决这个问题。
原文的地址:(https://blog.csdn.net/sllailcp/article/details/102502452)