日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 前端技术 > vue >内容正文

vue

列表排序应用FLIP动画(vue)

發布時間:2024/8/23 vue 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 列表排序应用FLIP动画(vue) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

效果

原理詳解

鏈接

1.beforeUpdate 獲取first 變化前位置 (以id建立map映射)
2.updated 獲取變化后位置 last
3.禁用transition并transform元素回初始位置
4.異步恢復transition 并取消 transform

代碼

<template><div ref="container"><div style="display: flex"><div style="width:400px"><!--僅展示三級數據,若需遞歸自行修改--><div class="item" :id="i.value" v-for="i in locArr" :key="i.value"><div>{{i.label}}</div><div class="item" :id="j.value" v-for="j in i.children" :key="j.value"><div>{{j.label}}</div><div class="item" :id="k.value" v-for="k in j.children" :key="k.value"><div>{{k.label}}</div></div></div></div></div><div style="padding: 10px"><button @click="shuffle">重新隨機數據</button><button @click="shuffleOne">打亂一級順序</button><button @click="shuffleTwo">打亂二級順序</button></div></div></div> </template><script> /* 1.beforeUpdate 獲取first 變化前位置 (以id建立map映射), 2.updated 獲取變化后位置 last , 3.禁用transition并transform元素回初始位置, 4.異步恢復transition 并取消 transform *//*** 亂序數組*/ Array.prototype.shuffle = function () {let input = this;for (let i = input.length - 1; i >= 1; i--) {let ri = ~~(Math.random() * (i + 1));input[i] = [input[ri], input[ri] = input[i]][0];}return input; };/*** 隨機多級數據* @param root* @param len* @param level*/ const treeOptions = ({ root = '0', len = 40, level = 4 }) => {let levelPoolLen = level, originPoolLen = len - levelPoolLen//創建 level 個 LevelPool ,并為每個 LevelPool 初始化一個元素let levelPool = []for (let i = 1; i <= levelPoolLen; i++) {levelPool.push([{ id: '', parentId: root, label: '', value: '' }])}//初始化指定數量的元素并隨機丟入 LevelPool 中for (let i = 0; i < originPoolLen; i++) {let currLevel = ~~(Math.random() * level)levelPool[currLevel].push({ id: '', parentId: root, label: '', value: '' })}let nextId = 0//由前到后依次遍歷LevelPool,遍歷本級池中各項并隨機從前一級池中選取一項作為當前項的父級for (let i = 0, item; (item = levelPool[0][i]) != null; i++) {item.id = ++nextIditem.parentId = rootitem.label = `label${item.id}`item.value = `value${item.id}`item.level = 0}for (let i = 1; i < levelPoolLen; i++) {let prevLevelPool = levelPool[i - 1]let prevLevelPoolLen = prevLevelPool.lengthfor (let j = 0, item; (item = levelPool[i][j]) != null; j++) {//隨機父節點let parent = prevLevelPool[~~(Math.random() * prevLevelPoolLen)]if (!parent.children) {parent.children = []}item.id = `${parent.id}-${parent.children.length}`item.parentId = parent.iditem.label = `label${item.id}`item.value = `value${item.id}`item.level = iparent.children.push(item)}}//將一級levelPool合并輸出return levelPool[0] }let firstMap = [], last = [] export default {name: "FLIP",data() {return {locArr: treeOptions({ level: 3, len: 40 })}},beforeUpdate() {this.$refs.container.querySelectorAll('.item').forEach(d => firstMap[d.id] = d.getBoundingClientRect())},updated() {let lastRect, firstRect, transX, transY, $lastNodes = this.$refs.container.querySelectorAll('.item')$lastNodes.forEach(d => {lastRect = d.getBoundingClientRect()firstRect = firstMap[d.id]if (firstRect) {transX = firstRect.left - lastRect.lefttransY = firstRect.top - lastRect.topd.style.transition = 'none'd.style.transform = `translate3D(${transX}px,${transY}px,0) `}})setTimeout(_ => {$lastNodes.forEach(d => {d.style.transition = ''d.style.transform = ''})})},methods: {shuffle() {// this.locArr[1].children.push( this.locArr.shift())this.locArr = treeOptions({ level: 3, len: 40 })},shuffleOne() {this.locArr = [...this.locArr.shuffle()]},shuffleTwo() {const vm = thisthis.locArr.forEach((d, index) => {if (d.children) {d.children = [...d.children.shuffle()]}})}} } </script><style scoped>.item {transition: all 1s;margin-left: 20px;}.item>div:not(.item){padding:5px;border-radius:2px;background: #fff;box-shadow: #999999 2px 2px 5px 1px;}button{display: block;margin: 10px;cursor: pointer;} </style>

總結

以上是生活随笔為你收集整理的列表排序应用FLIP动画(vue)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 偷拍一区二区三区四区 | 亚洲成a | 男生和女生一起差差差视频 | 欧美激情亚洲综合 | 桃色视屏 | 精国产品一区二区三区a片 国产精品第一 | 北条麻妃久久精品 | 99热91| 欧美视频精品在线 | 男人操女人的免费视频 | 国外亚洲成av人片在线观看 | 亚洲青青草 | 一本色道久久综合熟妇 | 成人免费观看视频 | 成人在线观看免费 | 亚洲超碰av| 国产一极毛片 | 欧美日韩大陆 | 亚洲精品在线中文字幕 | 琪琪电影午夜理论片八戒八戒 | 疯狂做受xxxx高潮人妖 | www.国产黄色| 爆操91| 永久免费的网站入口 | 欧美日韩中文字幕在线播放 | 精品无码国产av一区二区三区 | 国产乡下妇女做爰毛片 | 99爱视频在线 | 永久精品网站 | 天天综合视频 | 亚洲欧洲日本在线 | 黑人多p混交群体交乱 | 欧美xx孕妇 | 天天干天 | 无码国内精品人妻少妇蜜桃视频 | aaa级片 | 风间由美一区二区三区 | 三级免费黄录像 | 国产人成精品 | 一级在线免费视频 | 欧美激情小视频 | 十八禁视频网站在线观看 | 国产精品久久久久久久久久妞妞 | 国产资源在线免费观看 | 嫩草影院中文字幕 | 欧美色图日韩 | 亚洲制服丝袜诱惑 | 一区二区三区网 | 精品国产综合区久久久久久 | 欧美性生活网 | 国产精品国产三级国产Av车上的 | 伦理一级片 | 亚洲精品国产精品国自产网站 | 黄色的网站免费看 | 97影音| 亚洲av无码一区二区乱子仑 | 美女写真福利视频 | 亚洲视频网站在线 | 成都电影免费大全 | 四虎精品一区二区 | 在线爱情大片免费观看大全 | 久草青青视频 | 少妇超碰 | 欧洲亚洲成人 | 91免费精品视频 | 久久久黄色网 | 青青草五月天 | 久久av高潮av无码av喷吹 | gay男互凵gay男同偷精 | 精品人妻伦一二三区久久 | 欧洲亚洲女同hd | 国产欧美亚洲一区二区 | 青青草国产成人99久久 | 一本久道在线 | 国产美女一级片 | 男人天堂色 | 成人午夜网站 | 91久久久久久久 | 国产午夜不卡 | 亚洲一区二区自偷自拍 | 欧美怡春院 | 黄色a区| 成人性色生活片 | 人妻无码中文久久久久专区 | 免费一区视频 | 这里只有精品国产 | 精品国产乱码久久久久久蜜柚 | 乖女从小调教h尿便器小说 欧美韩一区二区 | 窝窝午夜视频 | 中文字幕有码在线观看 | 69色堂 | 永久免费无码av网站在线观看 | 亚洲小说在线 | 国产伦精品一区二区三区视频女 | 成人黄色av网址 | 王者后宫yin肉h文催眠 | 久久亚洲电影 | 成人av小说| 欧美成人精品激情在线视频 |