2009-10-22 6 views
6

में setInterval() पर माउस स्थिति कैप्चर करें मेरे पास जावास्क्रिप्ट में एक फ़ंक्शन है जो माउस स्थिति के आधार पर एक div को ले जाता है। यह फ़ंक्शन एक 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

यदि माउस रुक गया है, तो क्या आप माउसमोव इवेंट पर मिलने वाले पिछले मान का उपयोग नहीं कर सकते? – pgb

उत्तर

7

केवल समय आप उपयोग कर सकते हैं कि घटना वस्तु एक ईवेंट हैंडलर के निष्पादन के दौरान है किया जाएगा। तो आपको दस्तावेज़ पर ऑनमोउसमोव इवेंट बनाना है और माउस कोऑर्डिनेट्स को विश्व स्तर पर सुलभ ऑब्जेक्ट में स्टोर करना है। माउस स्थिति निर्धारित करने के लिए आप इन स्क्रिप्ट में कहीं भी इन मानों तक पहुंच सकते हैं।

यहाँ एक उदाहरण है (आप jQuery उपयोग नहीं कर रहे है, तो यह सीधे डोम कोड है):

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। आप यह बताना चाहते हैं कि एक ईवेंट ऑब्जेक्ट तब तक नहीं बनाया जाता जब तक आप कोई ईवेंट कैप्चर नहीं करते। तो उसे अनिवार्य रूप से क्या करने की ज़रूरत है वह मूसोम घटना को पकड़ लेता है और माउस की स्थिति को विश्व स्तर पर सुलभ जगह में संग्रहीत करता है और फिर अंतराल फ़ंक्शन में उस मान का उपयोग करता है। –

+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; 
} 
संबंधित मुद्दे