【uniapp】swiper切换时,v-for重新渲染页面导致文字在视觉上的拉扯问题

问题描述

先用v-for渲染了几个列表,但这几个列表是占同一个位置的,只是通过切换swiper来显示哪个列表显示,也就是为了优化页面切换时候,没有根据swiper的current再更新v-for的数据,但现在就有个问题,怎么隐藏这些列表,并且不占dom。v-if控制的时候,会出现非常明显的重新渲染的闪屏现象。

解决方法

使用position: absolute和clip属性

绝对定位与裁剪:

将元素设置为position: absolute,它就脱离了文档流,不再影响页面布局。然后通过clip属性来裁剪元素,当裁剪区域设置为0时,元素在视觉上就被隐藏了。这种方式下元素仍然在DOM中,但不占据布局空间,并且避免了v - if的重新渲染闪屏问题。

html 复制代码
<template>
   <div>
    <swiper :options="swiperOptions">
      <swiper-item v-for="(list, index) in lists" :key="index">
        <div :class="{ 'hidden-class': shouldHide(index) }">
          <!-- 这里渲染列表内容 -->
          <ul>
            <li  v-for="item in list" :key="item.id">{{item.name}}</li>
          </ul>
        </div>
      </swiper-item >
    </swiper>
   </div>   
</template>
   
<script>   
export default {
   data() {
    return {
      currentIndex: 0,
      lists: [
        [
          {id: 1, name: 'List 1-Item 1'},
          {id: 2, name: 'List 1-Item 2'}
        ],
        [
          {id: 3, name: 'List 2-Item 1'},
          {id: 4, name: 'List 2-Item 2'}
        ]
      ],
      swiperOptions: {
        // Swiper的配置选项
      }
    };
   },
   methods: {
    shouldHide(index) {
      return this.currentIndex!== index;
    }
   },
};   
</script>
   
<style>   
	.hidden-class{
	  position: absolute;   
	 clip: rect(0, 0, 0, 0);
	}
</style>
相关推荐
0xBADCODE5 分钟前
2026 强网杯 Web 题 cwp · 全链路复盘
前端·安全·web安全·网络安全·系统安全·ctf
麦麦麦当劳大王9 小时前
【油猴脚本】Boss直聘 岗位职责复制
开发语言·前端·javascript
小lu飞9 小时前
2026小红书小工具怎么制作:纯前端 ZIP 打包、沙箱限制与笔记挂载流程
前端·笔记·ai·ai编程
只睡四小时10 小时前
Three.js Sub-tick:漏判 60.7%→0
开发语言·javascript·性能优化·ecmascript·游戏开发·three.js·碰撞检测
smallcelebration10 小时前
151 从0开始搭建后端项目
前端·firefox
wangruofeng10 小时前
手机和电脑传文件,除了微信还有 LocalSend
前端
excel10 小时前
基于 GPT 的自动发布文章接口方案:从一句话或一张图片生成并发布内容
前端·javascript·后端
其实防守也摸鱼12 小时前
个人学习 Pwn 思路:从基础到漏洞利用的进阶路径
大数据·前端·人工智能·chrome·算法·安全·网络安全
朱涛的自习室13 小时前
212 个需求、22 万行代码:Agent 接管开源项目的 19 天
android·前端·人工智能
aZhe的全栈知识分享13 小时前
AI 还原 Figma 效果总达不到预期?先别急着让它写代码
前端·后端·面试