javascript - 使用 jQuery 和 JavaScript 模拟选择排序算法的动画问题
问题描述
我正在尝试可视化选择排序算法。动作开始正常工作,数组元素反转,但突然间,在最后一次迭代中,一切都变得一团糟,如图所示。我无法弄清楚问题所在。
async function selectionSort(main_arr) {
for (var i=0; i<main_arr.length; i++)
{
var min_ind=i;
for(var j=i+1; j<main_arr.length; j++)
{
if(main_arr[min_ind]>main_arr[j])
{
min_ind=j;
}
}
if(min_ind!=i)
{
var temp=main_arr[min_ind];
main_arr[min_ind]=main_arr[i];
main_arr[i]=temp;
var offbig=$('.slot'+min_ind).offset().left,offsmall=$('.slot'+i).offset().left;
$(".slot"+min_ind).animate(
{
right:offbig-offsmall
}
,500);
$(".slot"+i).animate(
{
left:offbig-offsmall
}
,500);
await sleep(1000);
}
}
}
解决方案
问题是尽管您已经对数组本身进行了变异,但您也没有考虑过该类。您使用.slotX
X 是其在数组上的索引的类。你也需要改变这个类。您可以在 的回调中执行此操作,animation
以便在动画之后,您将在 CSS 类中拥有正确的排序数组“顺序”。
最后,我不建议在这种情况下left
同时使用 CSS 属性。right
当 left 和 right 都被定义时,如果没有其他属性阻止这样做,元素将拉伸以满足两者。如果元素不能拉伸以同时满足两者——例如,如果声明了宽度——则元素的位置被过度约束。在这种情况下,当容器从左到右时,左值优先;当容器从右到左时,正确的值优先。
您可以简单地继续使用left
属性来移动您的容器。在这种情况下,我left
相对于它的当前位置改变了它们的新属性。
async function selectionSort(main_arr) {
for (var i=0; i<main_arr.length; i++)
{
var min_ind=i;
for(var j=i+1; j<main_arr.length; j++)
{
if(main_arr[min_ind]>main_arr[j])
{
min_ind=j;
}
}
if(min_ind!=i)
{
var temp=main_arr[min_ind];
main_arr[min_ind]=main_arr[i];
main_arr[i]=temp;
var offbig = $('.slot'+min_ind).offset().left
var offsmall = $('.slot'+i).offset().left
$(".slot"+min_ind).animate(
{
left:parseFloat($(".slot"+min_ind).css("left").replace("px", "")) - (offbig-offsmall)
}
,500);
$(".slot"+i).animate(
{
left:parseFloat($(".slot"+i).css("left").replace("px", "")) + (offbig-offsmall)
}
,500, function(){
$('.slot'+i).removeClass('slot'+i).addClass('slot'+min_ind).addClass('temp');
$('.slot'+min_ind).not('.temp').removeClass('slot'+min_ind).addClass('slot'+i);
$('.temp').removeClass('temp');
});
await sleep(1000);
}
}
}
推荐阅读
- wordpress - 添加简码后更新失败
- loops - 是否可以编写一个调用 BufRead::fill_buf 的函数,直到不再发生中断错误而不使用 unsafe?
- c - 为什么 mmap() 按降序返回地址,而 malloc() 按升序返回?
- mpi - 发送 MPI_COMM_NULL 作为参数时 MPI_Comm_dup() 不起作用
- javascript - 创建一个简单的“平滑滚动”(使用 javascript vanilla)
- reactjs - 如何在谷歌地图中设置绑定属性?
- reactjs - 如何在导航中获得道具
- python-3.x - 使用 BeautifulSoup 按类进行 Web Scraping 返回空列表
- r - 余弦相似度:函数无法计算矩阵
- python - 如何在 pygame 中获得流畅的运动?