拓冰建站拓冰建站
首页 / 资讯中心 / 正文

为什么它滑得这么顺:Vue3 仿抖音的虚拟滚动拆解

为什么它滑得这么顺Vue3 仿抖音的虚拟滚动拆解【免费下载链接】douyinVue3 Pinia 仿抖音Vue 在移动端的最佳实践 . Imitate TikTok Vue Best practices on Mobile项目地址: https://gitcode.com/GitHub_Trending/do/douyin刷抖音的时候你大概没想过这件事手指一抬就切到下一条几千条视频刷下来页面却从来没卡过。秘密不在后端在前端——屏幕上的视频其实只有寥寥几个节点在反复搬运。这个开源项目 douyin-vue 用 Vue 3 完整复刻了抖音的滑动流、页面转场和返回不刷新体验接口全部用本地 JSON 模拟。本文挑出它最值钱的两个机制讲透无限下滑流为什么只维护 5 条视频 DOM以及页面缓存是怎么被精确控制的。读完这两节你对仿抖音项目怎么写基本就有了答案。技术选型一眼看懂Vue 3 TypeScript组合式 APIVite 构建Vue Router 4 管路由Pinia 管全局状态数据层用 axios-mock-adapter 拦截请求直接返回 public/data 下的 JSON前端零后端依赖五分钟跑起来克隆仓库git clone https://gitcode.com/GitHub_Trending/do/douyin进目录装依赖pnpm install启动pnpm run dev浏览器打开提示的 3000 端口按 CtrlShiftM 切手机模式上下滑动即切换视频值得细看的一处实现无限下滑流DOM 里永远只有 5 条视频。如果按常规思路渲染每滑一条就往列表里追加一个节点刷几百条之后 DOM 会涨到上千个滚动必然掉帧。项目在 SlideVerticalInfinite.vue 里换了个打法容器里恒定挂 5 条 SlideItemvirtualTotal 5上下滑动时不新增也不销毁节点而是把滑出去的那条 DOM 搬到列表另一头换绑新数据后复用。整层位移用translate3d完成浏览器走 GPU 合成滑动全程不触发回流——这就是丝滑的来源。// 每条 item 对应一个独立渲染实例滑出屏幕即卸载 appInsMap.set(index, { unmount: () { vueRender(null, parent) parent.remove() } })手势检测放在 utils/slide组件只负责搬家判断滑向上还是滑向下prepend或appendChild一条节点再把所有条目的top统一平移。组件卸载、视频暂停这些生命周期也都跟着 DOM 搬运一起走。返回不刷新keep-alive 的排除名单是动态的。抖音里从首页点进个人页再返回首页列表滚动位置原封不动。App.vue 把keep-alive和transition直接套在router-view外面但缓存哪些页面不靠路由 meta 写死而是交给 store 里的excludeNames动态控制// App.vue router-view v-slot{ Component } transition :nametransitionName keep-alive :excludestore.excludeNames component :isComponent / /keep-alive /transition /router-view路由守卫在 src/router/index.ts 里做判断用路由在 routes 表中的下标比较新旧页面的深度。前进时把目标页加入排除名单下次进入它会重新挂载后退时把来源页移出名单keep-alive 立刻生效。配合 App.vue 里按深度切换的go/back过渡类前进右滑入、后退左滑出整套 App 感就出来了。拿到手后你可以怎么改接真实接口mock 全收在 src/mock/index.ts删掉 MockAdapter 初始化后src/api/ 里的接口函数会直接打到你的后端把 public/data 下的 JSON 当接口文档照抄字段即可。换主题换资源less 全局变量和 src/config/index.ts 里的图片前缀集中在几个文件把视频源换成自家 CDN、调色板换成品牌色整体换皮工作量很小。改滑动形态竖滑旁边就放着 SlideHorizontal.vue横滑、双列信息流都是同一套手势 节点搬运思路改 transform 轴和手势判断即可。写在最后这个仓库算是把 Vue 3 在移动端该踩的坑都演示了一遍手势处理、虚拟 DOM 复用、keep-alive 精细控制代码不长但每个决策都有理由值得逐行读一遍。仓库地址https://gitcode.com/GitHub_Trending/do/douyin GPL 协议改完再开源记得保持同协议 【免费下载链接】douyinVue3 Pinia 仿抖音Vue 在移动端的最佳实践 . Imitate TikTok Vue Best practices on Mobile项目地址: https://gitcode.com/GitHub_Trending/do/douyin创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
分享:

看完干货,该让你的企业上线了

免费需求沟通 · 48 小时内出具建站方案 · 河南本地可上门