动画气泡排序算法



我正在尝试对bubblesort算法进行简单的动画处理。我有几个里面有文字的div:https://codepen.io/menezesr08/pen/pozYMKG

我的目标是交换div 中的文本,因为算法正在执行交换。我最初的方法是获取所有div,遍历它们并在进行交换时更改"innerHTML"。这种 html 更改发生得太快了,那么有没有办法减慢速度,让它看起来像是动画?

<div class="box">
<p>8</p>
</div>
<div class="box">
<p>2</p>
</div>
<div class="box">
<p>10</p>
</div>
<div class="box">
<p>12</p>
</div>

如果您使用的是最新的浏览器,则可以尝试以下方法(自包含的css和JS(。使用 CSS 过渡和 async/await 语法的承诺。您可以直接在此处运行代码片段。

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta
name="viewport"
content="width=

, initial-scale=1.0"
/>
<meta http-equiv="X-UA-Compatible" content="ie=edge" />
<title>Document</title>
<style>
.box1 {
height: 100px;
width: 100px;
background: red;
display: inline-block;
vertical-align: middle;
transition: transform 1s linear;
}
p {
text-align: center;
color: yellow;
font-size: 30px;
}
</style>
</head>
<body>
<div class=" box1">
<p>8</p>
</div>
<div class="box1">
<p>2</p>
</div>
<div class="box1">
<p>12</p>
</div>
<div class="box1">
<p>10</p>
</div>
<div class="box1">
<p>2</p>
</div>
<div class="box1">
<p>1</p>
</div>
<script>
var divs = document.getElementsByTagName("div");
var firstNumberHTML = divs[0].getElementsByTagName("p");
var maxNumberDiv = divs[0];
var maxNumber = Number(firstNumberHTML[0].innerHTML);
async function bubbleSort (){
for (var i = 1; i < divs.length; i++) {
let currentNumberHTML = divs[i].getElementsByTagName("p");
let number = Number(currentNumberHTML[0].innerHTML);
await new Promise(res => {
setTimeout(() => res("delay"), 1000);
})
if (maxNumber > number) {
const offset = divs[i].getBoundingClientRect().x -
maxNumberDiv.getBoundingClientRect().x;
let prevTranslateMaxDiv = maxNumberDiv.style.transform.replace("translateX","").replace("(","").replace(")", "").replace("px", ""); 
prevTranslateMaxDiv = Number(prevTranslateMaxDiv) === NaN ? 0: Number(prevTranslateMaxDiv);
maxNumberDiv.style.transform = `translateX(${prevTranslateMaxDiv + offset}px)`;
divs[i].style.transform = `translateX(-${offset}px)`;
} else {
maxNumberDiv = divs[i];
maxNumber = number;
}      
}
}
bubbleSort();

</script>
</body>
</html>

最新更新