我有这段代码:
var num = 550;
$(document).keydown(function (event) {
switch (event.keyCode) {
// Left Arrow
case 37: num = num-- - 15;
document.getElementById('player').style.margin = '550px ' + num + 'px 0px ';
break;
// Right Arrow
case 39: num = 15 + num++;
document.getElementById('player').style.margin = '550px ' + num + 'px 0px ';
break;
}
});
var nump = 0;
var touch = false;
var flagtouch;
$(document).ready(function () {
flagtouch = setInterval(function () {
movePoint(nump);
}, 10);
});
function movePoint() {
document.getElementById('point').style.margin = nump + 'px 615px 0px';
touch = chekTouch($('#point'), $('#player')) // check whether the divs touches and return true if touched
if (touch) {
$('.point').ready(function () {
var docWidth = $(document).width();
var $div = $('.point');
var divWidth = $div.width();
var widthMax = docWidth - divWidth;
$div.css({
marginLeft: Math.floor(Math.random() * widthMax),
marginTop: 150,
});
});
}
else {
nump++;
}
}
function chekTouch($div1, $div2) {
var x1 = $div1.offset().left;
var y1 = $div1.offset().top;
var h1 = $div1.outerHeight();
var w1 = $div1.outerWidth();
var b1 = y1 + h1;
var r1 = x1 + w1;
var x2 = $div2.offset().left;
var y2 = $div2.offset().top;
var h2 = $div2.outerHeight();
var w2 = $div2.outerWidth();
var b2 = y2 + h2;
var r2 = x2 + w2;
if (b1 < y2 || y1 > b2 || r1 < x2 || x1 > r2) return false;
return true;
}
现在,我有了这个触控功能,当div 点触及div 玩家时,他会以随机方式执行marginLeft,并且marginTop为0px。
所以它的工作但只有1个问题,随机并没有停止工作,当div实际上相互接触时,他继续移动。
我的问题是,只有当他触摸div时,如何才能使随机边距有效?
谢谢!
答案 0 :(得分:2)
// - 这是因为你正在使用setInterval,每隔10ms就会播放一次
修改强>
抱歉,我误解了你的意思,
触摸后你应该清除这样的间隔:clearInterval(flagtouch);
然后循环将停止
<强> DEMO 强>
答案 1 :(得分:1)
在movePoint()
中,在touch
true 后设置随机设置边距后,您仍然将边距设置为{{1在每个时间间隔,但不要增加document.getElementById('point').style.margin = nump + 'px 615px 0px';
,所以nump
总是 true 之后。