2009-07-15 6 views
37

मैं पूर्ण माउस स्थिति/निर्देशांक (एक्स और वाई) पर भी नियंत्रण प्राप्त करने के लिए this tutorial में की तरह, लेकिन किसी भी JavaScript घटना के बाहर का उपयोग कर (अधिमानतः) jQuery की जरूरत है। धन्यवाद।घटनाओं के बाहर माउस स्थिति निर्धारित करें (jQuery का उपयोग कर)?

उत्तर

44

संभव नहीं है। हालांकि आप ग्लोबल वैरिएबल में स्थिति को स्टोर करने और ईवेंट के बाहर इसे पढ़ने के लिए ट्यूटोरियल में एक ही दृष्टिकोण का उपयोग कर सकते हैं।

इस तरह

:

jQuery(document).ready(function(){ 
    $().mousemove(function(e){ 
     window.mouseXPos = e.pageX; 
     window.mouseYPos = e.pageY; 
    }); 
}) 

अब आप कहीं से भी window.mouseXPos और window.mouseYPos उपयोग कर सकते हैं।

+0

क्या यह एक jQuery या जावास्क्रिप्ट सीमा है? – pbz

+4

@pbz यह एक जावास्क्रिप्ट सीमा है। –

+4

मैंने अभी एक jQuery.one ('mousemove', function() {}) स्थापित किया है; इस उद्देश्य के लिए। इसे सेटटाइमआउट के साथ विलंब करें, अगली बार चलने पर माउस स्थिति को कैप्ला करें। – aceofspades

29

यह Chetan Sastry's answer पर एक टिप्पणी के रूप में शुरू किया था, लेकिन मैं यह महसूस भी एक जवाब के रूप में पोस्ट के लायक हो सकता है:

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

इस तरह एक समस्या लगभग निश्चित रूप से डिजाइन निर्णय का सवाल उठता है: अगर आप कर्सर की स्थिति के लिए मतदान पर एक माउस घटना को संभालने के लिए की जरूरत नहीं है, तुम सच में कर्सर की स्थिति की जरूरत है? क्या आप जिस समस्या को हल करने की कोशिश कर रहे हैं उसे हल करने का कोई बेहतर तरीका है?

संपादित करें: सफारी 4 है, जो (ख़ामोश) बहुत तेजी से में भी, कि एकल mousemove घटना है कि ट्यूटोरियल पेज के साथ हर संपर्क काफ़ी मेरे लिए अस्थिर बनाता है। इस बारे में सोचें कि इससे आपकी साइट या एप्लिकेशन की उपयोगकर्ताओं की धारणाओं को कैसे प्रभावित किया जाएगा।

+3

+1: मुझे वही चिंताएं थीं। – Joel

+0

बिल्कुल सही नहीं है। एक माउस घटना हमेशा उत्पन्न हो रही है। यही है, जब माउस चलता है, ब्राउज़र एक माउस ईवेंट की गणना करेगा (मूल कोड के माध्यम से) लेकिन जेएस कॉलबैक फ़ंक्शन निष्पादित करने सहित नहीं; यह सभी माउस संबंधित घटना श्रोताओं के लिए मौलिक है। यह बस इतना है कि ब्राउज़र 'document.onmousemove' के माध्यम से उस जानकारी को उजागर करने की सामान्य सौजन्य प्रदान करने में विफल रहता है। यह, जहां तक ​​मेरा संबंध है, ईएस 5/ईएस 6 की एक शॉर्टसाइट है। दरअसल मतदान करने वाली माउस स्थिति डी-बाउंसिंग 'ऑनमोसमोव' घटनाओं को सरल बना सकती है, जैसे माउस द्वारा डीओएम तत्वों को स्थानांतरित करना। – codechimp

10

यह फ़ंक्शन केवल एक अंतराल पर माउस स्थिति हो रही द्वारा यूआई प्रदर्शन पर प्रभाव कम हो जाएगा: "। अब आप window.mouseXPos और window.mouseYPos कहीं से भी उपयोग कर सकते हैं"

function getMousePosition(timeoutMilliSeconds) { 
    // "one" attaches the handler to the event and removes it after it has executed once 
    $(document).one("mousemove", function (event) { 
     window.mouseXPos = event.pageX; 
     window.mouseYPos = event.pageY; 
     // set a timeout so the handler will be attached again after a little while 
     setTimeout(function() { getMousePosition(timeoutMilliSeconds) }, timeoutMilliseconds); 
    }); 
} 

// start storing the mouse position every 100 milliseconds 
getMousePosition(100); 

बस अन्य जवाब में के रूप में

आप एक छोटे से सटीकता खो के रूप में माउस चाल के अंतराल के दौरान पाया नहीं किया जाएगा।

+6

आपको eval-like constructs का उपयोग करने से बचना चाहिए। वे कम कुशल हैं, और संभावित सुरक्षा जोखिम हैं। 'सेटटाइमआउट (फ़ंक्शन() {getMousePosition (timeoutMilliSeconds)}, टाइमआउटमिलिसकंड); ' –

1

मैंने @ चेतन शास्त्री की आत्माओं को आजमाया है, लेकिन यह काम नहीं करता है। (मैं jQuery 1.6.4 का उपयोग कर रहा हूं)। मैं कोड बदलता हूं और फिर मैं अब काम करता हूं। मेरा कोड यहाँ है। मुझे उम्मीद है कि इससे सहायता मिलेगी।



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

+0

सत्यापित। यह परिवर्तन jQuery 1.4.4 के लिए भी ठीक करता है – Emperorlou

संबंधित मुद्दे