2012-10-03 14 views
57

में अपरिभाषित है मेरी एचटीएमएल 5 पेज में, मैं इस प्रकार mousemove घटना के साथ एक div है। लेकिन फ़ायरफ़ॉक्स में, दोनों मूल्य undefined दे रहे हैं। मैंने फ़ायरबग का उपयोग करके इसे चेक किया है, यानी e ऑब्जेक्ट को कंसोल पर लॉग ऑन किया है। offsetX और offsetY दोनों undefined पाए गए हैं।एचटीएमएल 5 e.offsetX फ़ायरफ़ॉक्स

जब मैं गूगल में खोज की है, वहाँ एक समाधान कह रहा layerX और layerY का उपयोग करना चाहिए, अगर दोनों offsetX और offsetY अपरिभाषित हैं था। लेकिन फायरबग से, मैं इसे खोजने में सक्षम नहीं था। और यहां तक ​​कि मैं इसे इस तरह एक कोशिश दिया था:

xpos = (e.offsetX==undefined)?e.layerX:e.offsetX; 
ypos = (e.offsetY==undefined)?e.layerY:e.offsetY; 

लेकिन वह भी मान के रूप में undefined दे रहा है।

मैं सबसे हालिया jQuery - v1.8.2 का उपयोग कर रहा हूं। और मैं अपने फ़ायरफ़ॉक्स v14.0.1

किसी भी विचार या सुझाव में परीक्षण कर रहा हूं?


संपादित

dystroy और मेरी मदद के लिए vusan के लिए धन्यवाद। ऊपर मुद्दे का हल इस प्रकार है:

समाधान

$('#canvas').mousemove(function(e){ 
    $('#cursor').show(); 
    if(e.offsetX==undefined) // this works for Firefox 
    { 
    xpos = e.pageX-$('#canvas').offset().left; 
    ypos = e.pageY-$('#canvas').offset().top; 
    }    
    else      // works in Google Chrome 
    { 
    xpos = e.offsetX; 
    ypos = e.offsetY; 
    } 
    $('#mouse').html("X : " + xpos + " ; Y : " + ypos); 
}); 
+0

यह सुनिश्चित नहीं है कि आप Google क्रोम का किस संस्करण का उपयोग कर रहे थे, लेकिन ऐसा लगता है कि संस्करण क्रोम v26 में एक अपरिभाषित वस्तु भी है। – cartbeforehorse

+0

@cartbeforehorse: मैं क्रोम संस्करण 26.0.1410.64 मीटर का उपयोग कर रहा हूँ। और यह ठीक काम करता है। इसे लाइव देखें: http://jsfiddle.net/EEftW/ –

+1

मुझे यकीन है कि इसमें चूसा गया है। टाइपस्क्रिप्ट और स्ट्रॉन्गली टाइप की गई jQuery परिभाषा फ़ाइलों का उपयोग करके, मुझे विश्वास था कि ऑफ़सेटएक्स/वाई jquery के कुछ हिस्सों थे। कभी नहीं पता था कि वे वैकल्पिक थे और केवल कुछ ब्राउज़रों में शामिल थे। आपकी पोस्ट के लिए धन्यवाद, आपने कोड की एक विशाल गड़बड़ी में समस्या को खोजने में मेरी मदद की। – fabspro

उत्तर

19

अन्य ब्राउज़र के लिए layerX और layerY Firefox के लिए और offsetX उपयोग करके देखें।

तो घटना jQuery के साथ निकाल दिया:

xpos = e.offsetX === undefined ? e.originalEvent.layerX : e.offsetX; 
ypos = e.offsetY === undefined ? e.originalEvent.layerY : e.offsetY; 

तो घटना जावास्क्रिप्ट के साथ निकाल दिया:

xpos = e.offsetX==undefined?e.layerX:e.offsetX; 
ypos = e.offsetY==undefined?e.layerY:e.offsetY; 
+2

धन्यवाद .. लेकिन जो मैं चाहता था वह एक कंटेनर ('# कैनवास') से संबंधित है। पेजएक्स/वाई '' तत्व के सापेक्ष हैं - http://stackoverflow.com/questions/6073505/what-is-the-difference-between-screenx-y-clientx-y-and-pagex-y –

+8

' var xInCanvas = e.pageX- $ canvas.offset()। बाएं; ' –

+4

धन्यवाद दोस्तों। मैंने यह काम किया जब मैंने कोशिश की कि @dystroy ने क्या सुझाव दिया था। कोड इस प्रकार है: 'अगर (e.offsetX == अपरिभाषित) \t \t \t \t { \t \t \t \t \t xpos = e.pageX - $ ('# कैनवास') ऑफसेट() छोड़ दिया;।। \t \t \t \t \t ypos = e.pageY - $ ('# कैनवास') ऑफसेट() शीर्ष; \t \t \t \t} \t \t \t \t \t \t \t बाकी \t \t \t \t {\t \t \t \t \t \t xpos = e.offsetX; \t \t \t \t \t ypos = e.offsetY; \t \t \t \t} ' धन्यवाद फिर लोग :) एक समाधान है कि jQuery की आवश्यकता नहीं है के लिए –

14

आप उन्हें क्योंकि इसके originalEvent में नहीं मिला। कोशिश: e.originalEvent.layerX e.originalEvent.layerY

बारे में पृष्ठ X और पृष्ठ Y वे एक ही बात की गणना नहीं कर रहे हैं। layerX पहले सापेक्ष/पूर्ण अभिभावक से ऑब्जेक्ट का बायां है। पेजएक्स पृष्ठ से ऑब्जेक्ट का बायां है।

19

उपयोग layerX और एफएफ में layerY और offsetX और सभी अन्य ब्राउज़र में offsetY

$('#canvas').mousemove(function(e){ 
    xpos = e.offsetX === undefined ? e.originalEvent.layerX : e.offsetX; 
    ypos = e.offsetY === undefined ? e.originalEvent.layerY : e.offsetY; 

    $('#mouse').html("X : " + xpos + " ; Y : " + ypos); 
}); 
+1

यह और मूल उत्तर को निर्दिष्ट करने वाले अन्य उत्तर में अधिक अपवॉट की आवश्यकता है। "सर्वश्रेष्ठ उत्तर" समाधान प्रदान करता है लेकिन ये अधिक सटीक हैं क्योंकि लेयरएक्स और लेयरवाई ऑफसेटएक्स और ऑफसेट वाई के बराबर हैं। धन्यवाद :) –

0

यह फ़ायरफ़ॉक्स और अन्य में ठीक काम करता है।

var offsetRequired = (e.offsetX || e.pageX - $(e.target).offset().left); 
0

फ़ायरफ़ॉक्स वास्तव में रिलीज 39.0, जो july 2015 में जारी किया गया है के बाद करता हैsupportMouseEvent.offsetX और MouseEvent.offsetY

+0

लेकिन फ़ायरफ़ॉक्स में ऑफ़सेटएक्स/वाई के मान समान नहीं हैं जैसे वे क्रोम में हैं। उन्हें बदलने की जरूरत है लेकिन कैसे नहीं पता। – scott

+0

मुझे दोनों ब्राउज़रों के नवीनतम संस्करण के साथ समान मान मिल रहे हैं। –

+0

मेरे पास क्रोम 49 है क्योंकि मेरा मैक ओएस 10.6.8 है। मैं क्रोम के एक नए संस्करण का उपयोग नहीं कर सकता जब तक कि मैं अपना ओएस अपडेट नहीं करता (या मेरा मालिक मुझे एक नई मशीन खरीदता है)। – scott

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