vue长列表dom渲染性能问题解决办法示例代码
代码语言:html
所属分类:其他
代码描述:vue长列表dom渲染性能问题解决办法示例代码,只展示部分数据(可见区域展示数据),当屏幕滚动时替换展示的数据,DOM元素的数量是固定的,不会出现增加dom节点带来的性能问题。
代码标签: vue 长列表 dom 渲染 性能 问题 解决 办法 示例 代码
下面为部分代码预览,完整代码请点击下载或在bfwstudio webide中打开
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width,initial-scale=1.0,maximum=1.0,minimum=1.0,user-scalable=0" /> <script type="text/javascript" src="//repo.bfw.wiki/bfwrepo/js/mock.min.js"></script> <script type="text/javascript" src="//repo.bfw.wiki/bfwrepo/js/axios-0.18.js"></script> <script type="text/javascript" src="//repo.bfw.wiki/bfwrepo/js/vue@2.6.1.js"></script> <style> #app { height: 100vh; } .container { height: 100%; /* 设置overflow为auto才能监听scroll滚动事件 */ overflow: auto; } .box { width: 96vw; height: 150px; background: #eee; border: 2px navajowhite solid; box-sizing: border-box; } </style> </head> <body> <div id="app"> <div id="app"> <!-- 监听滚动事件使用passive修饰符 --> <div class="container" ref="container" @scroll.passive="handleScroll"> <div :style="paddingStyle"> <!-- key使用index,可避免多次渲染该dom --> <div class="box" v-for="(item, index) in showList" :key="index"> <h2>{{ item.title }} - {{ item.id }}</h2> <h3>{{ item.from }}</h3> </div> <div>到低了~~~</div> </div> </div> </div> </div> <script> Mock.mock('/api', { [`list|${10}`]: [ { 'id|+1': 10, title: "@ctitle(15,25)", from: "@ctitle(3,10)", } ] }); var Main = { name: "App", data() { return { allList: [], // 所有数据 isRequest: false,// 是否正在请求数据 oneHeight: 150, // 单条数据的高度 showNum: 0, // 可见区域最多能展示多少条数据 startIndex: 0, // 渲染元素的第一个索引 canScroll: true, // 可以监听滚动,用于节流 scrollTop: 0,// 当前滚动高度,再次返回页面时能定位到之前的滚动高度 lower: 150,// 距离底部多远时触发触底事件 }; }, created() { this.getData();// 请求数据 }, activited() { this.$nextTick(()=>{ // 定位到之前的高度 this.$refs.container.scrollTop = this.scrollTop }) }, mounted() { this.canShowNum(); // 获取可见区域能展示多少条数据 window.onresize = this.canShowNum; // 监听窗口变化,需要重新计算一屏能展示多少条数据 window.onorientationchange = this.canShowNum; // 监听窗口翻转 }, computed: { .........完整代码请登录后点击上方下载按钮下载查看
网友评论0