返回顶部

vue——使用vant轮播组件swipe + flex时,文字抖动问题

参考:https://blog.csdn.net/m0_37983475/article/details/103493921

  https://blog.csdn.net/yummy_go/article/details/50696328

  https://segmentfault.com/a/1190000008015671

 

原抖动效果

 

 

改后效果

 

原因

vant轮播组件swipe原理是通过translateX来实现的,会修改元素的位置,引起回流(reflow),进而引起重绘(repaint),页面呈现的就是抖动效果

解决方法

在外层容器的css里加上:transform: translateZ(0);   因为使用translateZ的元素会单独占据一个渲染层;这样减小了元素变动时,浏览器的重新绘制的区域。

 

部分页面代码

<van-swipe-item v-for="(item,index) in meetingList" :key="index">
      <div class="d-meet-top">
         <div>
            <van-icon name="clock" class="v-icon" color="#AEAEB0"/>
            <span class="gray s-text">今天</span>
            <span class="gray" style="color:#111111;font-weight:bold;letter-spacing: -1px;">
               {{item.startTime}}
               <span class="gray" style="margin:0 .5rem;"></span>
               {{item.endTime}}
            </span>
         </div>
        <div class="d-status green">
              <span>进行中</span>
         </div>
      </div>
      <div class="d-meet-top">
         <div>
            <van-icon name="location" class="v-icon" color="#AEAEB0"/>
            <span class="gray s-text">{{item.location}}</span>
         </div>
         <div>
            <span class="gray s-text" style="margin-left:0;">参会人</span>
            <span class="s-name" v-for="(data,index) in item.person" :key="index"> {{data.substring(0,1)}}</span>
            <van-icon v-if="item.person.length>3 || true" name="ellipsis" color="#AEAEB0"/>
         </div>
    </div>
</van-swipe-item>

部分css代码

  .d-meet-top {
      display: flex;
      justify-content: space-between;
      transform: translateZ(0);  //  《== 关键
}

  .d-meet-top div {
     display: flex;
     align-items: center;
}

 

posted @ 2021-01-07 11:24  前端-xyq  阅读(835)  评论(0编辑  收藏  举报