我想要的是让div元素四处移动,直到再次单击它,然后将其停在其当前位置。在事件内部是否有监听特定事件的特定方法?移动div并不是问题。我只是不知道如何停止它。谁能向我解释为什么我的东西不起作用?
var clickTracker = false;
$("#div3").click(function() {
if(clickTracker === false){
var width = $(window).width();
var height = $(window).height();
for(var i = 0; i < 1000; i++){
const randomLeft = Math.floor(Math.random() * (width - 200))-1;
const randomHeight = Math.floor(Math.random() * (height - 200))-1;
$("#div3").animate({left: '+='+randomLeft}, 500).animate({top: '+='+randomHeight}, 500);
$("#div3").click(function() {
clickTracker = true;
break;
});
}
}
else{
clickTracker = false;
}
});
答案 0 :(得分:1)
var clickTracker = false;
$("#div3").click(function() {
if (clickTracker === false) {
clickTracker = true;
var width = $(window).width();
var height = $(window).height();
for (var i = 0; i < 10; i++) {
const randomLeft = Math.floor(Math.random() * ((width - currentPos.left) - 200)) - 1;
const randomHeight = Math.floor(Math.random() * ((height - currentPos.top) - 200)) - 1;
console.log("putting stuff in animation queue");
$("#div3").animate({
left: '+=' + randomLeft
}, 5000).animate({
top: '+=' + randomHeight
}, 5000);
}
} else {
clickTracker = false;
$("#div3").stop(true);
}
});
#div3 {
width: 100px;
height: 100px;
background: black;
position: absolute;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div id="div3"></div>
我理解您最初想到的是为什么要在for-loop
中调用click函数,但是如果您第二次单击控制台后又查看了控制台,您会发现自己正在使用{{1 }}错误的方式-通过调用新函数,您正在更改作用域,并且该break
语句试图脱离该函数(您不能这样做,您必须使用{{ 1}},而不是循环。为同一事件设置两个处理程序也不是一个好主意。那是一种容易使计算机混乱的事情。 :)
也许值得指出的是,break
可能无法按照您的想法工作。它的实际操作(如果您查看代码段的控制台,您会看到这一点)正在为div填充动画队列。该循环运行十次(出于理智起见,我将其更改为十),生成一个随机数,然后将其放入div可以通过的位置列表中,所有这些操作都在几毫秒内完成。您可以这样想:return
,但是这里要注意的重要一点是,您永远不要在for loop
结束之前单击该div。
继续阅读$("#div3").animate().animate().animate() ... etc
here。