前端模擬排序動畫

2021-08-28 14:36:52 字數 1638 閱讀 6427

第一種實現方式預覽

第二種實現方式預覽

第三種實現方式預覽

第四種實現方式預覽

贊一下攜程的這道題目,這才是前端該做的題目,既有意思,又考察了排序演算法,還考察了部分動畫及 dom 操作。話不多說,分析一下這道題目。

用定時器的方式觸發動畫(我這裡是通過改 marginleft 屬性,然後設定 transition)

.container

.sort

為什麼絕對定位呢,首先絕對定位可以讓元素脫離文件流,能夠儘量減少重排,而且絕對定位的位置方便計算,所以這裡採用絕對定位,當然 fixed 也是可以的。然後最重要的就是動畫的持續時間設定為 1s

var arr = [5,4,8,9,6,5,4,12,3,6,7,8,56];

var container = document.queryselector('.container');

var fragment = document.createdocumentfragment(); // 建立文件片段,儘量減少重繪和重排

var len = arr.length;

for(let i = 0; i < len; i++ )

至此,待排序元素輸出到頁面如下

for(let i = 0; i < len; i++)}}

解構賦值還是很好用的,推薦使用結構賦值那麼我們要實現氣泡排序的動畫該怎麼辦呢。

首先我們要獲取交換的兩個元素距離左邊長度,然後交換這兩個元素的位置,還記得我們之前給元素賦值了 id 嗎,我們可以通過 id 來找到這兩個元素。

var x = document.getelementbyid(j)	

var y = document.getelementbyid(j+1);

// 這裡同樣採用解構賦值

[x.style.left,y.style.left] = [y.style.left,x.style.left];

// 記得 id 也要交換

[x.id,y.id]=[y.id,x.id];

至此,我們做完了該做的一切,但是直接把這段**加入到氣泡排序裡面的話那我們直接看到的就是排序完成的效果了,看不到中間的過程,那要怎麼樣才能看到排序的過程呢,這個時候我們可以使用 settimeout。

冒泡部分的**如下

var time = 1;

for(let i = 0; i < len; i++),time * 1000)

time++;

} }}

time 是為了讓每次的效果都顯示出來,如果只是 1000 的話,那麼這個動畫 1s 之內就會完成,如果不清楚可以複習一下事件迴圈的相關知識。

攜程前端第三題之模擬排序動畫

排序動畫演示title container 採用絕對定位的理由 絕對定位可以讓元素脫離文件流,能夠儘量減少重排,而且絕對定位的位置方便計算。使用 fixed 也可以的。動畫的持續時間設定為 1s sort style head class container div body 1.首先將待排序元素輸...

前端動畫相關筆記

1.四個屬性 1 transition property 規定設定過渡效果的css屬性的名稱。2 transition duration 定義過渡效果花費的時間。預設是 0。3 transition timing function 規定過渡效果的時間曲線。預設是 ease 4 transition ...

模擬技能動畫

g.drawimage bkimage,0,0,null 把虛擬的內容畫到當前視窗 graphics gbkimg bkimage.getgraphics gbkimg.clearrect 0,0,width,height 先清空 this.paint gbkimg 將影象先畫到虛擬上 privat...