日韩性视频-久久久蜜桃-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)的全部內容,希望文章能夠幫你解決所遇到的問題。

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

主站蜘蛛池模板: 青青青免费在线视频 | 欧美 日韩 国产 中文 | av片一区二区 | 人妻巨大乳hd免费看 | 美女裸体跪姿扒开屁股无内裤 | 日本美女黄视频 | 中国一区二区视频 | 人妻久久久一区二区三区 | 欧美日韩一区二区三区在线播放 | 国产小视频免费观看 | 亚洲国产精品视频一区 | 国产色呦呦 | 男女激情四射网站 | 色戒未删节版 | 精品国产第一页 | 99久久99 | 打美女屁股网站 | 91视频日本 | 欧洲视频在线观看 | 欧美在线视频观看 | 男人天堂久久 | 日韩欧美国产精品综合嫩v 国产小毛片 | 国产真人做爰毛片视频直播 | 精品一区二区三区视频在线观看 | 人人干天天干 | 国产主播中文字幕 | 调教驯服丰满美艳麻麻在线视频 | 狠狠激情 | αv在线 | 中文在线字幕免费观看 | 国产精品无码久久久久久电影 | 日本人妻丰满熟妇久久久久久 | 一级女人毛片 | 男人操女人网站 | 一区二区三区日韩精品 | 欧美aa视频 | 亚洲欧美国产精品久久久久久久 | jjzzjjzz欧美69巨大| 这里只有精品999 | 91蝌蚪在线观看 | 午夜国产一区 | 日本一区二区三区免费电影 | 日本黄色录像 | 久久久国产精品无码 | 手机看片日韩久久 | 久久丝袜视频 | 国产做爰高潮呻吟视频 | 91区 | 九九色 | 麻豆av电影网 | 91免费在线播放 | a毛片在线 | 成人乱码一区二区三区av | 夜夜精品一区二区无码 | 国产在线精品一区二区三区 | 久久精品9| 国产黄网站| 亚洲一级片 | 亚洲二区av| 野花社区视频在线观看 | 久久国产激情视频 | 久久久不卡国产精品一区二区 | 日韩欧美三级在线 | 国产一级二级毛片 | 色狠狠一区二区三区 | 香蕉视频免费在线观看 | 91www| 免费啊v在线观看 | 99久久免费国产精精品 | 欧美性大战xxxxx久久久 | 久精品在线观看 | aa片在线观看视频在线播放 | 奇米综合| 制服.丝袜.亚洲.中文.综合懂 | 国产内射一区二区 | 日本公与丰满熄 | 伊人色影院 | 阿v免费视频 | 91久久综合精品国产丝袜蜜芽 | 欧美脚交| 欧洲精品久久久久毛片完整版 | 巨胸大乳www视频免费观看 | www.xxx日韩| 午夜影视在线观看 | 夜色88v精品国产亚洲 | 国产又色又爽无遮挡免费 | 7777在线视频 | 超碰操| 日韩精品在线一区二区 | 成人看片泡妞 | 日本韩国欧美一区二区 | 亚洲熟妇丰满大屁股熟妇 | 欧美亚洲国产精品 | 女人洗澡一级特黄毛片 | 久久久久人妻精品一区二区三区 | 亚欧美色图 | 欧美怡红院视频一区二区三区 | av中亚| 国产夜夜嗨 |