首页 > 其他分享 >IOS App内嵌H5 swiper 轮播出现卡顿白屏闪烁

IOS App内嵌H5 swiper 轮播出现卡顿白屏闪烁

时间:2023-08-11 15:56:37浏览次数:29  
标签:style handle 轮播 App IOS wrapper animation let swiper

   话说在前头:前端开发同学遇到这个问题不慌,因为接下来你要踩的坑我都帮你们踩完了,所以有了这一篇博客。希望能帮到你

   轮播组件:[email protected] (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的某个地方影响了全局的轮播,卡了好多天的问题,唉~~,如果你们也遇到过,把你们的解决办法说一下吧!!

 

标签:style,handle,轮播,App,IOS,wrapper,animation,let,swiper
From: https://www.cnblogs.com/yezi1116/p/17623161.html

相关文章

  • kettle 调用ssl异常javax.net.ssl.SSLHandshakeException: No appropriate protocol (
    javax.net.ssl.SSLHandshakeException:Noappropriateprotocol(protocolisdisabledorciphersuitesareinappropriate  调用kettle发送邮件的时候本地没问题 服务器报异常 查看很多都是要改动 D:\java\jdk\jre\lib\security 下面的 java.security文件 ......
  • 小程序生成App:可跨平台开发的移动应用开发框架
    小程序生成App可以成为一种轻量低门槛的开发App的方式,但是需要根据具体情况进行选择。如果应用需要处理大量数据或需要进行复杂计算,或者需要实现原生特有的功能或交互效果,可能需要选择其他开发方式。在文章开始之前,我们看看目前市面上比较容易上手、低门槛开发App的框架和方式Rea......
  • Ios上架app无需688,xcode打包导出IPA,供人内测
    无需支付688苹果开发者账号,xcode打包导出ipa,提供他人进行内测众所周知,在开发苹果应用时需要使用签名(证书)才能进行打包安装苹果IPA,作为刚接触ios开发的同学,只是学习iosapp开发内测,并没有上架appstore需求,对于苹果开发者账号认证需要支付688,真的是极大的浪费,经过一番百度,APPUploade......
  • 2022最全Hbuilder打包成苹果IOS-App的详解
    本文相关主要记录一下使用Hbuilder打包成苹果IOS-App的详细步骤。介绍一下个人开发者账号:再说下什么是免费的苹果开发者账号,就是你没交688年费的就是免费账号,如果你想变成付费开发者账号,提交申请付费就行,账号都是一样的账号。没有账号的点击链接申请:苹果开发者账号申请登录开发者......
  • 苹果APP安装包ipa如何安装在手机上
    苹果APP安装包ipa如何安装在手机上苹果APP的安装比安卓复杂且困难,很多人不知道如何将ipa文件安装到手机上。以下是几种苹果APP安装在iOS设备的方式,供大家参考。一、上架AppStore这是最正规的方式。虽然审核过程复杂、时间较长,且审核条件较为苛刻,但借助第三方开发者服务平台进行上......
  • APP备案明明是好事,为啥有些人反对呢?
    我是卢松松,点点上面的头像,欢迎关注我哦!APP和小程序备案,这事在网上闹的沸沸扬扬,明明是好事,可为啥那么多人反对呢?而且最近出现了好多阴阳怪气的声音。话说从2005年3月起,国内所有的网站都要求备案了,一直持续到现在。很多站长都习惯了也没觉得啥,备案也很简单。2012年,移动互联网兴起,当......
  • 2022最新上传ipa到appstore的步骤说明​
    我们平时在开发原生的iosapp的时候,有苹果电脑在手,上传ipa文件到苹果开发者中心比较简单,直接在xcode上就可以实现了。但是现在大多数人开发app不再是用原生框架开发了,也没有苹果电脑。很多朋友们选择了跨平台的H5技术来开发app,真正做到实现一种语法到处运行的场景。现在比较热的框......
  • 如何将你的iOS应用成功上架App Store(图文详解)
    上架基本需求资料1、苹果开发者账号(如还没账号先申请-苹果开发者账号申请教程)2、开发好的APP通过本篇教程,可以学习到ios证书申请和打包ipa上传到appstoreconnect.apple.com进行TestFlight测试然后提交审核的完整流程!上架AppStore审核分7步进行。1、安装iOS上架辅助软件Appuploade......
  • ios app真机测试到上架App Store详细教程-必看
    Appuploader常见问题转存失败重新上传取消上架基本需求资料1、苹果开发者账号(如还没账号先申请-苹果开发者账号申请教程)2、开发好的APP通过本篇教程,可以学习到ios证书申请和打包ipa测试上架的完整流程,中途可能会遇到一些报错,一般在教程对常见错误都有解释,仔细看看,不清楚可以联系......
  • iOS快速实现环形渐变进度条
    前言进度条相信我们大家都不陌生,往往我们很多时候需要使用到圆形进度条。这篇文章给大家分享了利用ios如何快速实现环形进度条,下面来一起看看。一:先制作一个不带颜色渐变的进度条自定义一个cycleview,在.m中实现drawrect方法-(void)drawrect:(cgrect)rect{cgcontextrefctx......