javascript - 动画改变div的位置

标签 javascript jquery html css

好吧,我已经实现了一些 div 并且当我开始页面时我希望它们具有动画效果,但问题是有时一个 div 与另一个 div 重叠然后我看到一个空白区域.. . 我怎样才能避免这种情况?我正在这样做:

这就是我更改 div 的方式:

function swap(d1, d2){
var topaux, leftaux;
topaux = d1.css("top");
leftaux = d1.css("left");
    d1.animate({
        top: d2.css("top"),
        left: d2.css("left"),
    }, { duration: 1000, queue: false });
    d2.animate({
        top: topaux,
        left: leftaux,
    }, { duration: 1000, queue: false });
}

这就是我现在尝试做的方式,但是在尝试这个之后,我没有任何动画,所以我有这段代码并且它有效我的意思是 div 之间没有重叠......

    d1.css("top", d2.css("top"));
    d1.css("left", d2.css("left"));
    d2.css("top", topaux);
    d2.css("left", leftaux);

当我按如下方式改组 div 时,我调用此函数(交换):

function swapdivs(){
var i,r, c, d1, d2;
for (i = 1; i < 100; i++) {
    r = Math.floor((Math.random() * rows) + 1);
    c = Math.floor((Math.random() * columns) + 1);
    d1= $("#r"+r+"c"+c);
    r = Math.floor((Math.random() * rows) + 1);
    c=Math.floor((Math.random() * columns) + 1);
    d2 = $("#r"+r+"c"+c);
    swap(d1,d2);
}
}

这是 jfiddle 我缺少什么?

最佳答案

好的,现在我看到问题了。

在您的 barrejarPeces 函数中,您多次随机打乱所有元素 (100)

for (i = 1; i < 100; i++) {

interanvipeces 函数中,您尝试使用 1000ms 的动画切换 2 个不同元素的位置,计算它们的 css 属性 top

好吧,问题是当一个(或两个)元素已经切换位置时(因为 barrejarPeces 函数将在不等待任何动画完成的情况下进行 100 次加扰),top 和 left 值不会是正确的。

所以有两种可能的解决方案:

  1. 不要使用动画延迟(尝试在你的 fiddle 中设置为 0 而不是 1000,你会发现它有效)
  2. 打乱所有元素一次(参见我的example here,我在其中更改了一些逻辑)

关于javascript - 动画改变div的位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36896389/

相关文章:

javascript - 处理焦点行的按键事件

javascript - 基于 HTML 和 JQuery 中的复选框显示/隐藏下拉菜单和按钮

javascript - Cypress - 存储一个值以供稍后访问

javascript - $(this).attr({类 : "activeTab"}); is not working because this is undefined

c# - 如何将波浪号的相对路径呈现为 ../../jquery/javascript 中的相对路径?

javascript - 不必要的主体卸载在页面刷新时被触发?

javascript - Angular 6 fullCalendar 在鼠标悬停事件上显示弹出窗口

javascript - 将参数传递给 casperjs.start

Jquery 在第二次单击后工作,然后继续正常工作

javascript - JQuery AJAX-如何从 URL 检索 JSON 数据?