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

bug出现的原因:

经过一层层的查找,终于发现是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@3.1.12@vux-xscroll\build\cmd\simulate-scroll.js下的getScrollTop方法如下
这里路径可能不完全一样,反正就是源码库里的vux-xscroll里的simulate-scroll.js文件

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

该方法校验transform的正则( /[-\d\.*\d*]+/g  )不能满足新版本 ,所以匹配最新版本的ios会出现得到 
transY  = ["1", "-2.4492935982947064", "-16", "2.4492935982947064", "-16", "1", "0", "19.48200035095215"]的结果。
getScrollTop得到的返回值为-Math.round(transY[5]) 的时候永远为-1,这也就是为什么获取到的scrollTop的值总是会变成-1。

解决办法:
将\node_modules\_vux-xscroll@3.1.12@vux-xscroll\build\cmd\simulate-scroll.js下的getScrollTop方法里面的正则表达式替换成下面(/[-\d\.*\d*e\-\d]+/g )的就可以了。

  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;},

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

重新npm install就没用了的解决方法:

首先在项目中新建scroller-edit.vue文件:
把node_modules\_vux@2.9.4@vux\src\components\scroller\index.vue文件重新拷贝一份出来放在项目文件里面命名scroller-edit.vue(可以自定义命名)

然后重写getScrollTop方法:

在mounted()方法里的this._xscroll = new XScroll({...})后面 加如下代码

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

这时候会提示transform not defined报错,因为当前文件没有这个transform 所以要把下面这段放在export default {}上面

var vendor = (function vendor() {var el = document.createElement('div').style;var vendors = ['t', 'webkitT', 'MozT', 'msT', 'OT'],transform,i = 0,l = vendors.length;for (; i < l; i++) {transform = vendors[i] + 'ransform';if (transform in el) return vendors[i].substr(0, vendors[i].length - 1);}return false;
})()
function prefixStyle(attrName) {if (vendor === false) return false;if (vendor === '') return attrName;return vendor + attrName.charAt(0).toUpperCase() + attrName.substr(1);
}
var transform = prefixStyle("transform");/*
这段代码中vendor和prefixStyle都是从下面这个目录文件里面抠出来的方法
\node_modules\_vux-xscroll@3.1.12@vux-xscroll\build\cmd\util.js,仅供参考!
*/

最后将项目中所有的<scroller></scroller>替换成我们自己的<scroller-edit></scroller-edit>,其余所有的用法跟原先一摸一样,就改了标签名称而已

然后再次运行项目,就可以啦!大功告成!

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

  1. vux scroller在iOS上,一停止滑动就跳到顶部

    vux scroller在iOS上滑动列表,滑完就会跳到顶部,然后去查了下vux的文档,没有解决办法,百度了一大堆,也没有相关问题,只能看下源码到底是哪除了问题. 经过一层层的查找,终于发现是ios1 ...

  2. Android从上往下滑动或从下往上滑动结束Activity

    之前有看过xiaanming写的侧滑返回,于是仿照他的Demo,写了这个从上往下滑动或者从下往上滑动结束Activity 先附图一张,由于这台电脑分辨率有问题以及模拟器的缘故,先凑活看吧 先贴代码: ...

  3. 如何在Android设备上关闭/停止正在运行的应用程序

    Android apps don't actually stop running when you return to the Home screen or switch to another app ...

  4. Ionic4 Camera插件在iOS13上选取视频失败 上传时候提示权限不足

    Ionic4 Camera插件在iOS13上选取视频失败 上传时候提示权限不足 问题 iOS13获取本地视频的路径: file:///private/var/mobile/Containers/Dat ...

  5. 微信小程序iOS系统上echarts不能滑动的问题

    在微信小程序中使用echarts插件的时候,遇到了一个问题:当系统是iOS时,如果手指先是长按图表,然后页面会无法滑动,其中南丁格尔玫瑰图尤其明显.作为一个微信小程序的新手开发,这个问题属实难倒我了. ...

  6. 2022-02-16 工作记录--Swiper-实现跑马灯效果:鼠标经过时停止滑动,鼠标离开后继续滑动

    Swiper-实现跑马灯效果:鼠标经过时停止滑动,鼠标离开后继续滑动 一.效果图 二.对应代码 [swiper详情可见swiper官网,下面给出实现跑马灯效果的代码] [注意] 下面CSS和JS代码里 ...

  7. iOS开发68-iOS 如何让UIScrollView在手指离开后立即停止滑动

    iOS开发68-iOS 如何让UIScrollView在手指离开后立即停止滑动 在Delegate里面 -(void)scrollViewWillBeginDecelerating: (UIScrol ...

  8. iOS13上传相册视频Code=1 Operation not permitted

    文章目录 iOS13上传相册视频Code=1 "Operation not permitted" 上传报错 分析问题 解决问题 发现问题 解决问题 iOS13上传相册视频Code= ...

  9. 滑动到底部或顶部响应的ScrollView实现

    转:http://www.trinea.cn/android/滑动到底部或顶部响应的scrollview/ 两种实现方式的主要不同点在于判断滑动位置的地方,第一种方式在onScrollChanged函 ...

最新文章

  1. Python删除list里面的重复元素的俩种方法
  2. 饿了么异地双活数据库实战
  3. 数据中心运维总监应具备哪些技能
  4. MFC提示 未在此计算机上注册ActiveX控件“{648A5600-2C6E-101B-82B6-000000000014}“完美解决
  5. cad2016中选择全图字体怎么操作_DNF手游快速升级攻略 DNF手游怎么快速升级
  6. 前端对div连线_《前端图形学从入门到放弃》003 三维世界
  7. js 弹窗并定时关闭
  8. 微信小程序字符长度超出变成神略号显示
  9. matlab中s查找数据,在数据中查找信号 - MATLAB Simulink - MathWorks 中国
  10. 视频播放加密功能的演示
  11. a as as big rat_Whats the meaning of give a rats as..._考试资料网
  12. 指纹识别算法的matlab实现
  13. tomcat:日志配置详解(避免日志过多撑爆磁盘)
  14. 信息系统安全思维导图
  15. IntelliJ IDEA怎么导包?
  16. 如何将.hwbk批量修改成.jpg 【实测成功】
  17. 解决java编译错误( 程序包javax.servlet不存在javax.servlet.*)
  18. 阅读提升领导力——领导者应该多读书
  19. Qt 之 ActiveX控件跑官方例程记录
  20. Linux 硬盘与硬件管理

热门文章

  1. 盛迈坤电商:店铺评分的优化提升方法
  2. 已入职今日头条!并附上8面面经
  3. 如何计算Java对象的大小
  4. 杨立昆最新访谈:AI威胁论是蒙昧主义,控制欲只有人才有 (全文+视频)
  5. 经典伴读_GOF设计模式_结构型模式
  6. 【论文阅读笔记】基于分类器预测置信度的集成选择| Ensemble Selection based on Classifier Prediction Confidence
  7. 视频监控方面部分基础知识
  8. excel行列互换_excel:关于选择性粘贴,你可能还不知道的操作
  9. 服务器和超级计算机的性能,超级计算机和云服务器的区别
  10. 常用电脑硬件检测工具下载