2009-10-22 3 views
6

나는 마우스 위치에 따라 하나의 div를 움직이는 javascript 함수가 있습니다. 이 함수는 setInterval() 함수에서 설정되고 매 초마다 실행됩니다. 나는이 같은 마우스 위치를 캡처해야합니다자바에서 setInterval()에 마우스 위치 캡처

function mousemov() { 
    document.getElementById("myDiv").style.left = Event.clientX; //don't work 
} 

window.onload = function() { 
    setInterval("mousemov()",1000); 
} 

시가 : 함수가 마우스가 정지 된 경우에도 실행해야하기 때문에 나는에서 mousemove 이벤트를 사용할 수 없습니다.

도움 주셔서 감사합니다.

+1

mousemove 이벤트를 사용하지 않는 이유는 무엇입니까? 마우스가 움직이지 않으면'div' 좌표를 바꾸고 싶지는 않습니다. mousemove에서만 좌표를 업데이트하십시오. –

+1

마우스가 중지 된 경우 mouseMove 이벤트에서 가져온 이전 값을 사용할 수 없습니까? – pgb

답변

7

는 이벤트 객체가 이벤트 핸들러의 실행 중입니다 액세스 할 수있는 유일한 시간이 될 것입니다. 따라서 문서에서 OnMouseMove 이벤트를 만들고 전역으로 액세스 가능한 개체에 마우스 좌표를 저장하면됩니다. 그런 다음 스크립트의 다른 곳에서이 값에 액세스하여 마우스 위치를 결정할 수 있습니다. 여기

은 예이다 (당신이 jQuery를 사용하지 않는, 그래서 이것은 바로 DOM 코드) :

document.onmousemove = function(e) { 
    var event = e || window.event; 
    window.mouseX = event.clientX; 
    window.mouseY = event.clientY; 
} 

function mousemov() { 
    document.getElementById("myDiv").style.left = window.mouseX; 
} 

window.onload = function() { 
    setInterval(mousemov, 1000); 
} 

내가는 clientX와 clientY로 계정에 스크롤하지 않도록 메모를해야한다. 스크롤 오프셋을 가져 와서 반환 된 값에 적용해야합니다.

+3

+1. 이벤트를 캡처하지 않으면 이벤트 오브젝트가 작성되지 않는다고 설명 할 수 있습니다. 따라서 그가 기본적으로 수행해야하는 작업은 mousemove 이벤트를 캡처하고 전역 적으로 액세스 할 수있는 위치에 마우스 위치를 저장 한 다음 interval 함수에서 해당 값을 사용하는 것입니다. –

+3

또한'setInterval ("functionName()", 1000)'은 좋은 습관이 아닙니다 ('eval()'과 유사합니다). 'setInterval (mousemov, 1000)'또는'setInterval (function() {mousemove()}, 1000)' –

+1

FYI'clientX' /'clientY'는 존재할 수있는 문서 스크롤을 제외시킵니다. –

1

글쎄, 문서를 마우스로 움직이고 위치를 저장하면 원할 때마다. 귀하의 경우 매초마다 최신 마우스 위치가 등록되어 있습니다.

이 JQuery와 예를

$(document).ready(function() 
{ 
    $().mousemove(function(e) 
    { 
     window.mouseX = e.pageX; 
     window.mouseY = e.pageY; 
    }); 
}); 

하고 당신의 MouseMove 이벤트 기능은

function mousemov() { 
    document.getElementById("myDiv").style.left = window.mouseX; 
}