javascript - jquery animate 即使条件不满足也执行

标签 javascript jquery html jquery-animate settimeout

正如有人在 my previous question 中建议我的那样,我正在使用 jquery 来移动 div。
现在我希望它在距离左边距达到 200 像素时停止。
为此,我使用了以下代码:

  var timeout = 100;
  var width = 200;
  var height = 500;
  var howmuch = 0;
  function move(before) {
	howmuch = before + 5;
	$("#obj").animate({'marginLeft' : '+=' + howmuch + 'px' } );
	if(howmuch < width){
	    setTimeout(function() {
		move(howmuch)
		}, timeout);
		}
	else{alert('finished');
	}
  }
  setTimeout(function() {
	move(howmuch)
  }, timeout);
  #obj {
  background-color: red;
  width: 100px;
  height: 100px;
  margin-left: 0px;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
  <div id="obj"></div>

但这不起作用:当框达到 200 像素时我会收到警报,但它不会停止。
可能是什么问题?

最佳答案

问题是 jQuery 的 animate() 需要一定的时间才能完成,并且您不允许一个动画在开始另一个动画之前完成。您还增加了 margin 增加额。您不是增加 5 像素,而是增加之前的 margin 量和额外的 5 像素。要完成您正在尝试做的事情(循环中的多个动画),您需要分配一个回调。在这里 fiddle :http://jsfiddle.net/o5d6z7qL/1/

var timeout = 100;
var width = 200;
var height = 500;
var howmuch = 0;
function move(before) {
    howmuch = before + 5;
    $("#obj").animate({ 'marginLeft': '+=5px' }, function () {
        if (howmuch < width) {
            setTimeout(function () {
                move(howmuch)
            }, timeout);
        }
        else {
            alert('finished');
        }
    });


}
setTimeout(function () {
    move(howmuch)
}, timeout);

关于javascript - jquery animate 即使条件不满足也执行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26533935/

相关文章:

javascript - 验证输入后提交表单

javascript - 通过 Highcharts 从 MySQL 获取 JSON 编码数据时遇到问题

javascript - 如何循环并选择附加元素以获取 .text() 和 .data() 值?

html - 为什么 html 不在我的网络浏览器上呈现?

javascript - 带有 javascript 文件的 html 图表

jquery - 使用 JQuery 将 HTML 插入到 DIV 中

javascript - 如何调整窗口大小而不在加载页面上执行

javascript - 使用ajax从数据库中删除记录

javascript - 向上堆叠按钮

javascript - WebVR - PositionSensorVRDevice 没有方向或位置