javascript - 移动一些dom元素后的回调函数

标签 javascript

$('#gd').on('click', function(){
    $('.elact').insertBefore($('.elact').prev(), function(){
        console.log('done');  // doesn't work
    });
    $('#bsave').css('visibility', 'visible');  // works
});

insertBefore 也有效。

console.log 有什么问题?

最佳答案

insertBefore没有回调,因为它不是异步或动画操作。它的工作在调用返回时完成。 (CSS 动画/过渡可能让人觉得它还没有完成,但从 DOM 的 Angular 来看,它已经完成了。如果是这样,请使用 animation event 处理程序或 transition event 处理程序。)

例如:

setTimeout(function() {
    const beforeMe = $("#before-me");
    console.log(
      "Is it there before the move?",
      beforeMe.siblings(".slidein").length > 0 ? "Yes" : "No"
    );
    $(".slidein")
        .insertBefore(beforeMe)
        .on("animationend", function() {
            console.log("Animation complete");
        });
    console.log(
      "Is it there _immediately_ after the move?",
      beforeMe.siblings(".slidein").length > 0 ? "Yes" : "No"
    );

}, 3000);
.slidein {
  animation-duration: 2s;
  animation-name: slidein;
}

@keyframes slidein {
  from {
    margin-left:100%;
    width:300%
  }
  
  to {
    margin-left:0%;
    width:100%;
  }
}

.parent {
  border: 1px solid #ddd;
  height: 10em;
}
<div class="parent">
  <div id="before-me"></div>
</div>
<div class="parent">
  <div class="slidein">I slide</div>
</div>

<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>

关于javascript - 移动一些dom元素后的回调函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56938030/

相关文章:

javascript - 在 while 循环第一次迭代 ASP.NET 中不读取表单元素

javascript - 使用鼠标滚轮水平滚动 div-javascript

javascript - 如何让浏览器提示保存 Javascript 密码?

javascript - 从 HTML 属性中提取 JSON 对象

javascript - 如何根据最接近输入地址的纬度/经度显示内容

javascript - 如何在html中默认放大谷歌地图

JavaScript 在推送到数组后停止循环执行

javascript - 使用 jQuery 获取选中的复选框

javascript - iOS 浏览器 : touchstart doesn't fire on dynamically inserted element

javascript - 检测用户点击水平位置的百分比