冒泡排序是一種簡單的排序算法,它重復地走訪過要排序的數列,一次比較兩個元素,如果他們的順序錯誤就把他們交換過來。這個過程像氣泡從水底冒出水面一樣,而且每次走訪都會產生一個最大或最小的元素。
現在,我們將結合Vue動畫來實現冒泡排序過程中的可視化效果。在Vue中,我們可以使用transition標簽來包裹需要進行動畫的元素。transition標簽需要定義name屬性,用來指定動畫名稱。我們定義了兩個動畫:第一個動畫pElement表示元素交換的動畫,第二個動畫 pSortedElement 表示已排序的元素的動畫。
{{ value }} {{ value }}
我們還需要為這兩個動畫定義樣式,下面就是定義好的兩個動畫:
.pElement-enter-active, .pElement-leave-active { transition: all 0.5s; } .pElement-enter, .pElement-leave-to { opacity: 0; transform: translateY(30px); } .pSortedElement-enter-active, .pSortedElement-leave-active { transition: all 0.5s; } .pSortedElement-enter, .pSortedElement-leave-to { opacity: 0; transform: translateY(-30px); }
當我們點擊按鈕時,Vue實例中的sort方法會根據冒泡排序的思想交換數組中的元素,并將交換后的結果動態地更新。下面是sort方法的代碼:
sort() { let len = this.dataList.length; for (let i = 0; i< len; i++) { for (let j = 0; j< len - i - 1; j++) { if (this.dataList[j] >this.dataList[j + 1]) { [this.dataList[j], this.dataList[j + 1]] = [this.dataList[j + 1], this.dataList[j]]; this.sortedList.push(this.dataList[j + 1]); this.dataList[j + 1] = null; this.dataList[j] = null; setTimeout(() =>{ this.dataList[j] = this.sortedList.pop(); }, 500); } } } }
sort方法中的循環遍歷數組的嵌套是冒泡排序的核心,同時在元素交換時會將新的元素加入已排序的列表中,并將被交換元素在原數組中的位置設為null。然后,使用setTimeout函數和Vue動畫的結合來實現交換元素的可視化效果。通過這種方式,我們既完成了對數據的排序,同時又實現了可視化效果,這符合Vue的核心思想:數據驅動視圖。