然后给待排序元素加个样式
.container{
text-align:center;
}
.sort{
position:absolute;
width:50px;
height:50px;
line-height:50px;
border:1px solid black;
transition:1s;
}
为什么绝对定位呢,首先绝对定位可以让元素脱离文档流,能够尽量减少重排,而且绝对定位的位置方便计算,所以这里采用绝对定位,当然 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++ ){
var node = document.createElement(‘div’);
node.className = ‘sort’;
node.id = i; // 这个后面移动位置的时候需要用到
node.style.left = i * 60 + ‘px’;
fragment.append(node);
}
container.append(fragment);
至此,把待排序元素先输出到页面上了。
然后开始处理排序,这里采用冒泡排序,正常的冒泡排序结构是这样的
for(let i = 0; i < len; i++){
for(let j = 0; j < len - i; j++){
if(arr[j] >= arr[j+1]){
// 这里使用了 ES6 的解构赋值,即交换两个元素的值
[arr[j],arr[j+1]] = [arr[j+1],arr[j]];
// 也可以这样
/*
var temp = arr[j];
arr[j] = arr[j+1];
arr[j+1] = temp;
*/
}
}
}
解构赋值还是很好用的,推荐使用结构赋值
那么我们要实现冒泡排序的动画该怎么办呢。
首先我们要获取交换的两个元素距离左边长度,然后交换这两个元素的位置,还记得我们之前给元素赋值了 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++){
for(let j = 0; j < len - i; j++){
if(arr[j] >= arr[j+1]){
[arr[j],arr[j+1]] = [arr[j+1],arr[j]];
setTimeout(function(){
var x = document.getElementById(j)
var y = document.getElementById(j+1);
[x.style.left,y.style.left] = [y.style.left,x.style.left];
[x.id,y.id] = [y.id,x.id];
},time * 1000)
time++;
}
}
}
time 是为了让每次的效果都显示出来,如果只是 1000 的话,那么这个动画 1s 之内就会完成,如果不清楚可以复习一下事件循环的相关知识。
至此,代码结束
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数前端工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年Web前端开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上前端开发知识点,真正体系化!
由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!
如果你觉得这些内容对你有帮助,可以扫码获取!!(备注:前端)
最后
资料过多,篇幅有限,需要文中全部资料可以点击这里免费获取前端面试资料PDF完整版!
自古成功在尝试。不尝试永远都不会成功。勇敢的尝试是成功的一半。
gtp.com/2024/03/13/H4lCoPEF.jpg" />
最后
[外链图片转存中…(img-0fEaonl8-1712367903251)]
[外链图片转存中…(img-thmf85AZ-1712367903251)]
资料过多,篇幅有限,需要文中全部资料可以点击这里免费获取前端面试资料PDF完整版!
自古成功在尝试。不尝试永远都不会成功。勇敢的尝试是成功的一半。