javascript - 为什么这个动画 marginTop 函数没有像我预期的那样工作?

标签 javascript jquery

仍在尝试解决昨天的问题。

我试图通过动画它的“marginTop”属性来将元素一次向上滚动 50 像素。问题是,每次单击触发器时,元素都会“重置”并从 0 开始动画。任何人都可以向我解释这种令人困惑的行为吗?

在这里查看我的提醒

$(document).on("click",".scroll-control",function(e){
    e.preventDefault();
    var newMarginTop = parseInt($('.scroll-frame').css('marginTop'));
    alert (newMarginTop);  // returns 0
    newMarginTop = newMarginTop - 50;
    alert (newMarginTop);  // returns -50
    $('.scroll-frame').animate({"margin-top": newMarginTop},1000);
    var newMarginTop = parseInt($('.scroll-frame').css('marginTop'));
    alert (newMarginTop);  // returns 0  <<< ??? Why not -50 ???    
});

最佳答案

animate 方法是异步的。直到退出函数后,动画才会真正开始。 animate 调用之后的代码立即运行,而不是在动画完成后运行。

如果你想在动画结束后做一些事情,你需要使用回调:

$('.scroll-frame').animate({"margin-top": newMarginTop}, 1000, function(){
  var newMarginTop = parseInt($('.scroll-frame').css('marginTop'));
  alert (newMarginTop);
});

关于javascript - 为什么这个动画 marginTop 函数没有像我预期的那样工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9824345/

相关文章:

javascript - jQuery 单击外部关闭过滤器

javascript - 如何使用展开运算符将对象数组插入特定元素

javascript - 谷歌分析异步 : Events Tracking Callback?

javascript - 如何将按钮点击转换为 onload 事件?

javascript - 如何通过索引而不是名称映射 JSON 属性

javascript - 使用 javascript 在浏览器中使用折线图可视化日期特定数据

Jquery .on ("click") 第二次不起作用

javascript - ProtoBuf.js 如何在编码对象时过滤额外字段

javascript - jqgrid - 在添加/编辑对话框中上传文件

javascript - Firebase 分页