2011-10-14 12 views
23

तो, जैसे सवाल निर्दिष्ट करता है, क्या jQuery में एक मूसोमव ईवेंट ट्रिगर करने का कोई तरीका है जो ऑब्जेक्ट ऑब्जेक्ट में माउस निर्देशांक भेजता है?क्या mousemove को ट्रिगर करने और event.pageX, event.pageY प्राप्त करने का कोई तरीका है?

अब तक मेरा कोड .trigger (event) फ़ंक्शन का उपयोग करके mousemove को ट्रिगर कर सकता है लेकिन event.pageX और event.pageY अपरिभाषित हैं।

+0

क्या यह परीक्षण के लिए है? – airportyh

+0

एक बार जब आप ऐसा कर सकते हैं, तो अंतिम वास्तविक mousemove ईवेंट से ईवेंट डेटा को सहेज लेते हैं, फिर जब आप इसे ट्रिगर करते हैं तो प्रोग्रामेटिक रूप से पुन: उपयोग करें यदि कोई नया ईवेंट डेटा मौजूद नहीं है। यदि असली मूसोम घटनाओं को निकाल दिया नहीं जाता है, तो इसका मतलब है कि माउस हिल नहीं गया था, इसलिए अंतिम असली मूसोम के इवेंटडाटा में अभी भी वर्तमान स्थिति होनी चाहिए। – Mahn

उत्तर

3

मुझे विश्वास नहीं है कि माउस जावास्क्रिप्ट/jQuery के माध्यम से मांग पर माउस निर्देशांक प्राप्त करना संभव है; लेकिन अगर आप एक वैश्विक वर को स्थिति के लिए बाध्य आप तो इस तरह किसी भी समय उन तक पहुँचने के दस्तावेज़ में कर सकते हैं:

$(document).ready(function(){ 
    $().mousemove(function(e){ 
     window.xPos = e.pageX; 
     window.yPos = e.pageY; 
    }); 
}); 
एक कम CPU गहन विकल्प के लिए

, आप एक समय समाप्ति जोड़ सकते हैं, हालांकि आप एक मामूली के लिए प्रदर्शन व्यापार जानने में देरी जहां माउस है:

function getMousePosition(timeoutMilliSeconds) { 
    $(document).one("mousemove", function (event) { 
     window.xPos = event.pageX; 
     window.yPos = event.pageY; 
     setTimeout("getMousePosition(" + timeoutMilliSeconds + ")", timeoutMilliSeconds); 
    }); 
} 
getMousePosition(100); 

अब आप एक छद्म घटना को गति प्रदान करने की जरूरत के बिना या तो समाधान का उपयोग कर दस्तावेज़ में कहीं से भी window.xPos और window.yPos उपयोग करने में सक्षम होना चाहिए।

+7

-1 यह प्रश्न को संबोधित नहीं करता है, जिसमें मैन्युअल रूप से ट्रिगर किए गए ईवेंट शामिल हैं। – zzzzBov

+0

मुझे पता है कि किसी ऑब्जेक्ट पर mousemove को बाध्य करके माउस के निर्देशांक कैसे प्राप्त करें। लेकिन कहें कि माउस हिल नहीं रहा है, लेकिन मैं वर्चुअल मूसोम को ट्रिगर करने के लिए jQuery में ट्रिगर फ़ंक्शन का उपयोग करना चाहता हूं और अभी भी निर्देशांक प्राप्त कर सकता हूं। –

+2

@ geossj5 - यदि आप पहले से ही माउस को ट्रैक कर रहे हैं, और माउस अब आगे नहीं बढ़ रहा है, तो निश्चित रूप से जो भी अंतिम रिकॉर्ड किए गए निर्देशांक थे, वे अभी भी मामले होंगे ...? –

0

मुझे यकीन नहीं है कि मैं इस सवाल को पूरी तरह से समझता हूं। आप कर सकते हैं:

$('.someClass').mousemove(function(event){ 
    console.log(event.pageX); 
    console.log(event.pageY); 
}); 

अब, जब भी someClass पर माउस चलता है, यह xy cordinates रजिस्टर करेंगे। कार्रवाई में देखने के लिए jsfiddle यहां है और jquery documentation है।

+1

मुझे पता है कि एक तत्व पर mousemove बाध्यकारी द्वारा माउस के निर्देशांक कैसे प्राप्त करें। लेकिन कहें कि माउस हिल नहीं रहा है, लेकिन मैं वर्चुअल मूसोम को ट्रिगर करने के लिए jQuery में ट्रिगर फ़ंक्शन का उपयोग करना चाहता हूं और अभी भी निर्देशांक प्राप्त कर सकता हूं। –

+0

आप माउस को जावास्क्रिप्ट से कैसे ले जा रहे हैं? – Ryre

0

यदि आप यही पूछ रहे हैं तो आप माउस को स्थानांतरित नहीं कर सकते हैं। लेकिन आप जो भी संदर्भ और तर्क चाहते हैं उसके साथ आप एक समारोह को कॉल कर सकते हैं। उदा .:

function foobar(e) 
{ 
    this.className = 'whatever'; // this == element 
} 

someElement.onmousemove = foobar; 

var obj = {whatever:'you want'}; 
foobar.call(someElement, obj); // calls foobar(obj) in context of someElement 
0

सोचें कि मुझे आपकी समस्या पता है। आप प्रोग्राम की स्थिति में माउस स्थिति से पूछने की कोशिश कर रहे हैं। शायद आपके पास कुछ ऐसा कोड है:

$(document).one('mousemove.myModule', function (e) { 
    // e.pageY and e.pageX is undefined. 
    console.log('e.pageY: ' + e.pageY + ', e.pageX: ' + e.pageX); } 
     ).trigger('mousemove.myModule'); 

फिर आप बिल्कुल सही हैं। इवेंट ऑब्जेक्ट पर गुण पृष्ठ वाई और पेजएक्स परिभाषित नहीं किया जाएगा। दरअसल, ईवेंट ऑब्जेक्ट में बहुत सारी चीजें हैं जो वहां नहीं होंगी, न केवल .pageY और .pageX। JQuery में कुछ बग हो सकता है। वैसे भी, और को ट्रिगर करने के लिए कॉल करने वाली श्रृंखला को केवल $ (विंडो) पर ईवेंट ट्रिगर न करें। मुझसे पूछें मत कारण है कि यह हालांकि काम करता है लेकिन मेरे लिए यह किया:

$(document).one('mousemove.myModule', function (e) { 
    console.log('e.pageY: ' + e.pageY + ', e.pageX: ' + e.pageX); }); 

// Now e.pageY and e.pageX will be defined! 
$(window).trigger('mousemove.myModule'); 
37

आप सीधे ईवेंट सक्रिय करने से पहले pageX और pageY सेट करना होगा। इन गुणों को सेट करने के लिए, jQuery.Event ऑब्जेक्ट बनाएं।

// create a jQuery event 
e = $.Event('mousemove'); 

// set coordinates 
e.pageX = 100; 
e.pageY = 100; 

// trigger event - must trigger on document 
$(document).trigger(e); 

See it in jsFiddle

+0

यह काम नहीं करता है क्योंकि jQuery पेजएक्स और पृष्ठ वाई पैरामीटर को अनदेखा कर देगा जब ट्रिगर कहा जाता है। –

+0

आपको इस निष्कर्ष पर क्या कारण है? [यह jsfiddle] देखें (http://jsfiddle.net/yPgnp/)। – tenedor

+0

मैं मानता हूं, यह विधि मेरे लिए सबसे अच्छी रही है, स्वयं को ईवेंट को परिभाषित करने में काफी आसान है और केवल पेजएक्स/पेज को बदलना है – CatalinBerta

0

यह सबसे अच्छा है जिसके साथ मैं आ सकता हूं, जो आपको वैश्विक चर सेट करने में शामिल नहीं करता है। क्लिक इवेंट अभी भी निर्देशांक कैप्चर करेगा, ताकि आप उस घटना को अपने मूसमोव में पास कर सकें।

$(element).click(function(e){ 
    $(element).trigger('mousemove',e); 
}); 

फिर, यह ईवेंट ऑब्जेक्ट आपके mousemove फ़ंक्शन में दूसरा तर्क होगा; पहला या तो असली mousemove घटना या jQuery बनाया घटना है।

$(element).mousemove(function(e,clickEvent){ 
    if typeof e.pageX === 'undefined' e = clickEvent; 
    // or if you prefer, clickEvent.pageX; 
}); 
संबंधित मुद्दे

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