6

के उपयोग को बदलने के लिए क्रॉस-ब्राउज़र समाधान मैं एक सरल ऐप से कुछ कोड अनुकूलित करने की कोशिश कर रहा हूं जो रैफेल का उपयोग करता है ताकि उपयोगकर्ताओं को कैनवास पर मंडल और आयत खींचने की अनुमति मिल सके। (https://gist.github.com/673186 पर मूल कोड)event.layerX और event.layerY

मूल कोड jQuery के पुराने संस्करण का उपयोग करता था और ठीक काम करता था। http://jsfiddle.net/GHZSd/

jQuery के एक अद्यतन संस्करण का उपयोग करके, उदाहरण को तोड़ता है। http://jsfiddle.net/GHZSd/1/

इसका कारण यह है कि event.layerX और event.layerY को jQuery के नए संस्करण में परिभाषित नहीं किया गया है। मेरा सवाल है - मैं उन मूल्यों को बदलने के लिए किस कोड का उपयोग कर सकता हूं? मैंने कुछ गणित करके कुछ चीजों की कोशिश की है (event.originalEvent.layerX/layerX अभी भी अभी मौजूद है इसलिए मैं कुछ सामान जोड़ने/घटाने की कोशिश कर रहा हूं जिसके परिणामस्वरूप वे मान होंगे) लेकिन अब तक क्या काम करता है ब्राउज़र उन सभी पर काम नहीं करता है।

क्षमा करें अगर इससे पहले पूछा गया है लेकिन मुझे SO या कहीं और पर ठोस जवाब नहीं मिला।

+0

लाइब्रेरी निर्भरता की खुशी में आपका स्वागत है। आप बस पुराने jQuery (आप उन्नयन क्यों कर रहे हैं?) के साथ रह सकते हैं या पता लगा सकते हैं कि पुराने संस्करण में परतों को कैसे कार्यान्वित किया गया था और उन्हें नए में फिर से कार्यान्वित किया गया था। – RobG

+0

मुझे समझ में नहीं आता कि आप मूल घटनाओं का उपयोग क्यों नहीं करते हैं, यह ठीक काम करता है: http://jsfiddle.net/GHZSd/19/ – mddw

+0

@RobG - मुझे अपनी परियोजना के अन्य तत्वों के लिए jQuery का एक अद्यतन संस्करण चाहिए। – zeke

उत्तर

9

तो, मैंने इस समस्या के बारे में थोड़ा सोचा, क्योंकि क्रोम टीम अजीब कारणों से layerX और layerY को हटाना चाहता है।

सबसे पहले, हम अपने कंटेनर की स्थिति की जरूरत है:

var position = $paper.offset(); 

यह हमारे दो देता है (खोला बेला के बिना पढ़ने वालों के लिए, $ कागज div जहां svg तैयार हो जाएगा) कॉर्ड, position.top और position.left, इसलिए हम जानते हैं कि पृष्ठ में कंटेनर कहां है।

फिर, क्लिक पर, हम e.pageX और e.pageY का उपयोग करते हैं, जो पृष्ठ के तार हैं। layerX और layerY का अनुकरण करने के लिए, हम (e.pageX - position.left) और (e.pageY - position.top)

का उपयोग एट देखा: http://jsfiddle.net/GHZSd/30/ पर क्रोम, सफारी, एफएफ और ओपेरा

काम करता है।

+0

हाँ जो काम करता है। मैं एक समान समाधान में आया था। एक अजीब चीज यह है कि, जब मैंने पोस्ट किए गए उदाहरण में ठीक काम किया है, तो मेरे ऐप में मैं काम कर रहा हूं, क्रोम का उपयोग करते समय एक्स और वाई दोनों के लिए 1 पिक्सेल अंतर है। कोई बड़ा सौदा नहीं है और वहां कुछ अन्य गुण हैं जो मैं सभी ब्राउज़रों में originalEvent.layerX/layerY के बराबर सबकुछ बनाने के लिए समीकरण में जोड़ सकता हूं। तो सुनिश्चित नहीं है कि यह सबसे अच्छा तरीका है लेकिन ऐसा लगता है कि यह काम करता है ... – zeke

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