Javascript, setIntervallal bejegyzet fv futása nem áll le a clearIntervalra
Már órák óta vacakolok egy scripttel és nem értem, hol a hiba. Van két div-em. Az #inner nagyobb, mint az #outer. Abban kéne mozgatni az #inner-t, az egér pozíciójától függően. Ha az egér 30px-nél jobban megközelíti az #outer szélét, akkor a megfelelő irányba tologatja az #inner-t, amíg az egér ismét el nem távolodik 30px-nél jobban a széltől.
CSS:HTML:JS:Nos, ha a clearInterval (D komment) sor nem a B helyen van, akkor az "úsztatás" végtelen ciklusba kerül, és az #inner "elúszik". Ha a B helyen van, akkor meg meg se moccan. Amint látható, mindenfélét megpróbáltam már kiiratni, hogy megtaláljam a hibát, de nem megy :-/ Miért nem áll le az úsztatás, ha az egér ismét eltávolodik a széltől?
Kiegészítés, teszteléshez, ami az átláthatóság miatt az előzőkből kimaradt:
■ CSS:
#outer {
width: 600px;
height: 400px;
overflow: hidden;
position: absolute;
}
#inner {
position: absolute;
}
<div id="outer" onMouseMove="mouseMoveHandler">
<div id="inner">
Vmi tartalom....
</div>
</div>
var moveInterval = 0;
function mouseMoveHandler(e) {
container = document.getElementById('outer');
mX = getElementMouseX(container, e);
mY = getElementMouseY(container, e);
document.test.n.value = mX;
document.test.m.value = mY;
/* A */
if(mX<30 || mY<30)
{
moveX = (mX<30) ? 30-mX : 0;
moveY = (mY<30) ? 30-mY : 0;
moveInterval = window.setInterval(moveInner, 100, moveX, moveY);
/* B */
} else {
/* C */
}
}
function moveInner(intervalX, intervalY) {
var inner = document.getElementById('inner');
inner.style.left = inner.offsetLeft+intervalX+'px';
inner.style.top = inner.offsetTop+intervalY+'px';
window.clearInterval(moveInterval); /* D */
}
Kiegészítés, teszteléshez, ami az átláthatóság miatt az előzőkből kimaradt:
function getElementMouseX(obj, e)
{
var xcoord = (typeof(e.pageX)=='number') ? e.pageX : e.clientX+document.body.scrollLeft;
xcoord = xcoord - getElementX(obj);
return xcoord;
}
function getElementMouseY(obj, e)
{
var ycoord = (typeof(e.pageY)=='number') ? e.pageY : e.clientY+document.body.scrollTop;
ycoord = ycoord - getElementY(obj);
return ycoord;
}
Kimaradt
Szerintem a 'var' a gond.
Lehet, hogy segíteni fog, ha a 16. sort átírod így:
Nem biztos, hogy működik, de érdemes megpróbálni.
Egy jótanács: használj kisbetűs eseménykezelőneveket, mert ez a szabványos és néhány esetben nem működik ez a módszer.
Remélem segítettem.