IOS App内嵌H5 swiper 轮播出现卡顿白屏闪烁
话说在前头:前端开发同学遇到这个问题不慌,因为接下来你要踩的坑我都帮你们踩完了,所以有了这一篇博客。希望能帮到你
轮播组件:swiper@4.5.1 (4x稳定的最后一个版本)
设备:ios版本15x ,14和16版本都挺好的,问题仅在ios15的版本
出现现象:左右滑动卡顿,不连手,放开的这一瞬间会卡一下。在同一部手机的safari或微信中没有这个问题,仅仅在app中有这个问题。
一些案例:https://ask.csdn.net/questions/7544894 https://juejin.cn/post/7023231843004579877
当然全都没有解决办法,只是都遇到。
我试过了网上几乎所有办法,3x和5x版本都换过,无果...
ok,网上找不到解决办法,老规矩,上github翻翻issue,有用,但不是特别有用。
办法1: 升级5x版本,有个新增的属性 cssMode 这个属性开启后用现代CSS Scroll Snap API。它不支持Swiper的很多功能,但可能会带来更好的性能。 会将一些js复杂的运算和过渡用css来代替
但是:少了很多功能(不推荐)
var mySwiper = new Swiper('.swiper-container', { cssMode: true });
办法2:css启用硬件加速(但是只能解决白屏闪烁,卡顿依旧)
1 .swiper-slide{
2 -webkit-backface-visibility: hidden;
3 -webkit-transform: translate3d(0,0,0);
4 }
5
6 .swiper-wrapper{
7 -webkit-transform-style: preserve-3d;
8 }
办法3 https://github.com/nolimits4web/swiper/issues/4493
1 function easeOut(currentTime, startValue, changeValue, duration) {
2 currentTime /= duration;
3 return -changeValue * currentTime * (currentTime - 2) + startValue;
4 }
5
6 function getTransitionSimulator(ele, distance, duration, callback) {
7 let handle;
8 let resolve;
9 return () => {
10 let promise = new Promise(res => {
11 resolve = res;
12 });
13 let startTime = performance.now();
14 cancelAnimationFrame(handle);
15 function _animation() {
16 let current = performance.now();
17 // distance to move this frame
18 let disVal = easeOut(current - startTime, 0, distance, duration);
19
20 callback(ele, disVal);
21 if ((current - startTime) / duration < 1) {
22 handle = requestAnimationFrame(_animation);
23 } else {
24 cancelAnimationFrame(handle);
25 resolve();
26 }
27 }
28 handle = requestAnimationFrame(_animation);
29 return promise;
30 };
31 }
32
33 swiper.on('setTranslate', (swiper, targetTransVal) => {
34 const wrapper = swiper.$wrapperEl[0]; // wrapper element
35 // when use transition to do animation
36 if (wrapper.style.transitionDuration !== '0ms') {
37 // get origin translate value
38 const curTransVal = this.swiper.getTranslate();
39 // cancel the animation of transition
40 wrapper.style.transitionDuration = '';
41 wrapper.style.transform = `translate3d(${curTransVal}px, 0px, 0px)`;
42
43 // use requestFrameAnimation to do animation my self
44 const transSimulator = getTransitionSimulator(wrapper, targetTransVal - curTransVal, 300, (el, val) => {
45 el.style.transform = `translate3d(${curTransVal + val}px, 0px, 0px)`;
46 });
47 await transSimulator();
48 // End the transition, call the callback (simulate the internal implementation of Swiper)
49 swiper.onSlideToWrapperTransitionEnd.call(wrapper, { target: wrapper });
50
51 }
52 })
有用,但是只适用于整页整页滑动,多列并不是适用。
办法4:用Mac电脑下载个xcode链接Iphone做一个Demo App 内嵌下你的H5 页面。看是否正常,如果正常的话。那毫无提问,问题不前端,让IOS开发去排查问题。顺利解决
最后:我这边是ios开发定位到了,确实是App的某个地方影响了全局的轮播,卡了好多天的问题,唉~~,如果你们也遇到过,把你们的解决办法说一下吧!!
IOS App内嵌H5 swiper 轮播出现卡顿白屏闪烁的更多相关文章
- ios应用内嵌h5页面数据自动变色识别为手机号码的解决方法——手机号码拨号禁用IOS手机页面数字自动识别为手机号
异常如下: ios应用内嵌h5页面,本来是设置了白色的数字,两三秒之后会自动变为黑色,然后点击的时候就会弹出是否拨号的提示: 解决方法: 添加如下meta标签,即可解决: <meta name= ...
- app内嵌H5踩坑
内嵌的H5是用的vue2版本开发的,期间有很多的坑要踩: 1.调用app返回上一个页面不触发页面的onmouted和window.onPageShow app返回上一个页面调用的方法并不会出发vue的 ...
- 移动端开发利器vConsole.js,app内嵌H5开发时调试用
vConsole:一个轻量.可拓展.针对手机网页的前端开发者调试面板,主要还是用于内嵌app页面时在手机上进行调试,打印完全和在PC端一样,方便大家找出问题所在. 不说废话直接进入主题,vConsol ...
- ios下app内嵌h5页面是video适配问题
ios下做新闻详情用h5页面实现然后打包到app中,其中新闻详情页会有视频,安卓下video的poster可以做到适应video大小,但是ios下会按照poster图片大小将video等比撑大,但是视 ...
- app内嵌h5页面在ios手机端滑动卡顿的解决方法
1.带滚动条的dom需加样式 -webkit-overflow-scrolling: touch;2.去掉 width:100%; height:100%
- app内嵌H5网页(webviewJavaScriptBridge)
摘要:使用的插件为webviewJavaScriptBridge,app端需要引入一下这个包,html页面只需一段JS代码 与IOS交互 <! 申明交互(此处代码固定) > functio ...
- app内嵌H5调用分享
最近产品提出了一个需求:我们在合作方的app中提供的部分页面中增加分享页面,具体要求是在3个二维码推广页面调用app的分享接口,分享方式有3种,分别是点击”分享链接“按钮调起分享,点击”分享图片“按钮 ...
- app内嵌h5分享到小程序分享功能
if (this.GLOBAL.env !== 'production') { try { window.JSBridge.shareMiniProgramToWx('https://www.lexi ...
- app内嵌H5的上传图片的功能
1.上传组件 <!-- - hasBorder {Boolean} cell底部边框,oneline 为 true 有效 - inlineBorder {Boolean} cell底部短边框 - ...
- app内嵌 h5页面 再滑动的时候 触发击穿底下的一些touchstart事件
我们的目的是再滑动的时候 不要触发到touchstart事件. // 再滑动的时候无法点开视频 var is_scroll_start,is_scroll_end; $(window).on({ 't ...
随机推荐
- 2022-06-23:给定一个非负数组,任意选择数字,使累加和最大且为7的倍数,返回最大累加和。 n比较大,10的5次方。 来自美团。3.26笔试。
2022-06-23:给定一个非负数组,任意选择数字,使累加和最大且为7的倍数,返回最大累加和. n比较大,10的5次方. 来自美团.3.26笔试. 答案2022-06-23: 要i还是不要i,递归. ...
- 2021-05-22:假设所有字符都是小写字母, 大字符串是str,arr是去重的单词表, 每个单词都不是空字符串且可以使用任意次。使用arr中的单词有多少种拼接str的方式。 返回方法数。
2021-05-22:假设所有字符都是小写字母, 大字符串是str,arr是去重的单词表, 每个单词都不是空字符串且可以使用任意次.使用arr中的单词有多少种拼接str的方式. 返回方法数. 福大大 ...
- 2022-01-22:力扣411,最短独占单词缩写。 给一个字符串数组strs和一个目标字符串target。target的简写不能跟strs打架。 strs是[“abcdefg“,“ccc“],tar
2022-01-22:力扣411,最短独占单词缩写. 给一个字符串数组strs和一个目标字符串target.target的简写不能跟strs打架. strs是["abcdefg", ...
- 2022-01-10:路径交叉。给你一个整数数组 distance 。 从 X-Y 平面上的点 (0,0) 开始,先向北移动 distance[0] 米,然后向西移动 distance[1] 米,向南
2022-01-10:路径交叉.给你一个整数数组 distance . 从 X-Y 平面上的点 (0,0) 开始,先向北移动 distance[0] 米,然后向西移动 distance[1] 米,向南 ...
- 爆肝一周,我开源了ChatGPT 中文版接口,官方1:1镜像支持全部 官方接口
这里实现我之前文章承诺承接上文 人人实现ChatGPT自由,手把手教你零撸部署自己聊天私服 现在ChatGPT 提供了api接口 可以让我自己对接去实现我们自己想要gpt应用,但是由于一些原因,国内也 ...
- extra别名,即给列取别名
extra别名,即给列取别名 Student.objects.all().extra(select={"name":"nickname"}) nickname为 ...
- .Net8顶级技术:IR边界检查之IR解析(二)
前言 IR技术应用在各个编程语言当中,它属于JIT的核心部分,确实有点点麻烦.但部分基本明了.本篇通过小例子了解下.前情提要,看这一篇之前建议看看前一篇:点击此处,以便于理解. 概括 1.前奏 先上C ...
- 电赛控制类PID算法实现
一.什么是PID 学过自动控制原理的对PID并不陌生,PID控制是对偏差信号e(t)进行比例.积分和微分运算变换后形成的一种控制规律.PID 算法的一般形式: PID控制系统原理框图 二.PID离散化 ...
- ODOO13之二 Odoo 13开发之开发环境准备
在更深入了解 Odoo 开发之前,我们应配置好开发环境并学习相关的基础管理任务.本文中,我们将学习创建 Odoo 应用所需用到的工具和环境配置.这里采用 Ubuntu 系统来作为开发服务器实例的主机, ...
- Active Directory Basic
Active Directory 是 Windows 域网络的目录服务 介绍 Active Directory 是在域内部连接的机器和服务器的集合,它们是构成 Active Directory 网络的 ...