【web前端】ios上使用swiper 在自动翻页时出现白色闪屏的解决

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了【web前端】ios上使用swiper 在自动翻页时出现白色闪屏的解决相关的知识,希望对你有一定的参考价值。

参考技术A ios上,如果有一个宽度100%的swiper,在自动向右翻页时,后面一页的左边会闪一块白色
经过多次各种试验,我发现了这个问题的原因
应该是ios判断后面一页这个dom没有在屏幕上显示,所以没有渲染它,等到滚动到屏幕内时候开始渲染,所以出现的短暂的白屏。
发现这个原因后,我让每个swiper-slide左边多出来一块padding,这样在显示当前的swiper-slide时,也有一小块下一页的swiper-slide在屏幕中,所以系统就会去渲染这个dom
就是加上如下的css

swiper在vue中使用,纵向滚动翻页,超出一屏的解决方案

参考技术A 1.使用方法

<template>

  <Swiper

    :options="swiperOption"

    :style=" height: setHeight "

    @slideChange="onSlideChange"

  >

    <SwiperSlide class="slide">page1</SwiperSlide>

    <SwiperSlide class="slide">page2</SwiperSlide>

    <SwiperSlide class="slide">page3</SwiperSlide>

  </Swiper>

</template>

<script>

import  swiper, swiperSlide  from 'vue-awesome-swiper';

import 'swiper/css/swiper.css';

export default 

  components: 

    Swiper: swiper,

    SwiperSlide: swiperSlide,

  ,

  data() 

    let vm = this;

    return 

      swiperOption: 

        direction: 'vertical',

        initialSlide: 0,

        on: 

          init() 

            vm.$swiper = this;

          ,

        ,

      ,

      setHeight:

        document.documentElement.clientHeight || document.body.clientHeight,

    ;

  ,

  created() 

    this.setHeight =

      document.documentElement.clientHeight || document.body.clientHeight;

    this.handlerSwiper();

  ,

  methods: 

    onSlideChange() 

      let pageIndex = this.$swiper.activeIndex;

      switch (pageIndex) 

        case 0:

          // ...

          break;

        case 1:

          // ...

          break;

        case 2:

          // ...

          break;

      

    ,

    handlerSwiper() 

      let startScroll, touchStart, touchCurrent;

      this.$nextTick(() => 

        this.$swiper.slides.on(

          'touchstart',

          function (e) 

            startScroll = Math.floor(this.scrollTop); // 针对安卓获取到小数进行向下取整

            touchStart = e.targetTouches[0].pageY;

          ,

          true,

        );

        this.$swiper.slides.on(

          'touchmove',

          function (e) 

            touchCurrent = e.targetTouches[0].pageY;

            let touchesDiff = touchCurrent - touchStart;

            let slide = this;

            let onlyScrolling =

              slide.scrollHeight > slide.offsetHeight && //allow only when slide is scrollable

              ((touchesDiff < 0 && startScroll === 0) || //start from top edge to scroll bottom

                (touchesDiff > 0 &&

                  startScroll === slide.scrollHeight - slide.offsetHeight) || //start from bottom edge to scroll top

                (startScroll > 0 &&

                  startScroll < slide.scrollHeight - slide.offsetHeight)); //start from the middle

            if (onlyScrolling) 

              e.stopPropagation();

            

          ,

          true,

        );

      );

    ,

  ,

;

</script>

<style scoped>

body 

  overflow: hidden;



.swiper-container 

  width: 100%;



.swiper-slide 

  overflow: scroll;

  background: #00f;

  height: 1000px; /* 高度由内容填充后删掉 */



</style>

2.解决swiper在微信开发者工具无法滑动:

以上是关于【web前端】ios上使用swiper 在自动翻页时出现白色闪屏的解决的主要内容,如果未能解决你的问题,请参考以下文章

vue-awesome-swiper - 基于vue实现h5滑动翻页效果

2022-02-20 Vue中使用swiper,上下翻页和分页器自定义

swiper在vue中使用,纵向滚动翻页,超出一屏的解决方案

swiper的基础使用(十五)

swiper实现翻页,页面高度超出可滚动

swiper的基本使用(十三)