为什么这个非常简单的javascript/jquery代码无法正常工作
Why this very simple javascript/jquery code won't work correctly
我有一个非常简单的JavaScript/jquery代码,它不仅可以正常工作。问题似乎是,当循环运行时,似乎没有计算出带有 id 'circle' 的div 的位置。只需要知道问题发生的原因以及是否有任何可用的修复程序。
这是链接 http://jsfiddle.net/TDRyS/基本上,我想做的是尝试在球距离顶部 500px 的距离后向上移动球。
代码:
var maxa = document.width;
var maxb = document.height;
$(document).ready(function() {
dothis();
});
function dothis() {
var left = parseInt(document.getElementById('circle').style.left);
var top = parseInt(document.getElementById('circle').style.top);
if (top >= 500) {
$("#circle").animate({
top: "-=" + Math.floor(Math.random() * 100 + 1) + "px",
left: "-=" + Math.floor(Math.random() * 100 + 1) + "px"
}, 1000);
}
else {
$("#circle").animate({
top: "+=" + Math.floor(Math.random() * 100 + 1) + "px",
left: "+=" + Math.floor(Math.random() * 100 + 1) + "px"
}, 1000);
}
dothis();
}
在再次调用函数之前需要设置超时'' 将函数作为回调传递
现场演示
完整代码:
var maxa = document.width;
var maxb = document.height;
var up = false;
$(document).ready(function() {
doThis();
});
function doThis() {
var left = parseInt(document.getElementById('circle').style.left);
var top = parseInt(document.getElementById('circle').style.top);
if (top < 50) {
up = false;
}
if (top >= 500 || up) {
up = true;
$("#circle").animate({
top: "-=" + Math.floor(Math.random() * 100 + 1) + "px",
left: "-=" + Math.floor(Math.random() * 100 + 1) + "px"
}, 500, doThis);
}
else {
$("#circle").animate({
top: "+=" + Math.floor(Math.random() * 100 + 1) + "px",
left: "+=" + Math.floor(Math.random() * 100 + 1) + "px"
}, 500, doThis);
}
}
这有几个问题:
- 您无法从 DOM 元素的"style"属性读取来自 CSS 的样式信息。无论如何,你都在使用jQuery;它可以为您提供样式信息。
- 对"动画"的调用不会同步完成。你可以传递"dothis"作为第三个参数,jQuery将在动画完成后调用你的函数。
这是一个工作版本。
要计算左侧和顶部,您还可以使用:
$("#circle").position().left // or .top (relative to parent object)
$("#circle").offset().left // or .top (relative to window)
无论如何,代码对我来说似乎是错误的,因为您一直在调用"animate";在调用另一个动画之前,您不会让任何时间让动画"运行"(如果top>500px,则执行令人讨厌的函数递归)。
你要做的是- 等待动画完成,使用时间延迟或使用某些事件- 使用计时器每n毫秒检查一次,如果top>500。如果是这样,请停止当前动画并在相反方向上启动一个新动画
相关文章:
- Javascript:selenium Web驱动程序isDisplayed()不工作
- jQuery UI自动完成突然停止工作
- AngularJS UI路由器不能像ng路由器那样工作
- HTML5音频加载和播放获胜'我不能在iPad上工作
- JavaScript打印功能使日历停止工作
- Javascript.getHours()工作不正常
- 为什么这在IE中的工作方式与在Firefox中不同
- 视频HTML没有'无法在Internet Explorer 11上工作
- 扩展移相器按钮类不工作
- Firebase迁移-简单的Firebase.set没有'不再工作了——旧的还是新的
- 谷歌地图不是以HTML显示,而是在JS Fiddle上工作
- 正在尝试使用if和else添加类,但无法正常工作
- Jquery FadeIn FadeOut 只工作一次
- Foreach无法在Typescript中工作
- 另一个ajax调用中的Jquery ajax调用在for循环中没有按预期工作
- 为什么不是't窗口.恢复正常工作吗?(javascript/jquery)
- JS可以在Chrome中工作,但不能在Firefox中工作
- ajaxToolkit PopupControlExtender不工作.过时的
- HTML标记在脚本标记中工作
- javascript扫雷器floodfill算法不能正常工作