2012-10-10 14 views
5

मैंने स्क्रीन बनाने के लिए इस साइट पर कहीं और प्रदान किए गए कैनवास कोड का उपयोग किया है जहां मेरे पास गैर-पारदर्शी हिस्सों अनियमित आकार वाले कई ओवरलैपिंग पारदर्शी पीएनजी हैं। मैं कर्सर के नीचे रंग प्राप्त कर सकता हूं और यह बहुत अच्छा है। लेकिन मेरे आकार सभी एक ही रंग हैं और मुझे विशेष आकार की आईडी प्राप्त करने के लिए एक तरीका चाहिए, इसलिए मुझे पता है कि किस पर क्लिक किया गया था। देश तक पहुंचने के लिए ओवरलैपिंग पीएनजी से बने मानचित्र की कल्पना करें और आप यह जानना चाहते हैं कि किस देश पर क्लिक किया गया था। जो मैं बता सकता हूं, आईडी पहचान केवल आयताकार क्षेत्रों पर लागू होती है। कोई सुझाव?क्या एचटीएमएल 5 हिट पहचान संभव है?

$('#myCanvas').click(function(e){ 
var position = findPos(this); 
var x = e.pageX - position.x; 
var y = e.pageY - position.y; 
var coordinate = "x=" + x + ", y=" + y; 
var canvas = this.getContext('2d'); 
var p = canvas.getImageData(x, y, 1, 1).data; 
var hex = "#" + ("000000" + rgbToHex(p[0], p[1], p[2])).slice(-6); 
alert(hex); 
}); 

इस कोड को हो जाता है और रंग (findPos और rgbToHex अलग कार्यों स्पष्टता के लिए दूर छोड़ दिया जाता है) प्रदर्शित करता है। मुझे एक आईडी चाहिए! मदद!

उत्तर

4

पारदर्शिता के साथ भी, छवियां सभी आयत हैं। फिर आप जानते हैं कि आयत छेड़छाड़ द्वारा एक क्लिक किए गए बिंदु पर कौन सी छवियां हैं - छवियों की अपनी सरणी और उनके एक्स, वाई अंक चौड़ाई के साथ, बिंदु चौराहे के लिए ऊंचाई की जांच करें। फिर आप संभावित रूप से क्लिक की गई छवियों की एक सरणी के साथ आते हैं। यदि सूची में केवल एक ही है, तो आप कर चुके हैं।

छवियों में उल्लिखित क्रम का एक ज़ेड-ऑर्डर होता है जिसमें आपने उन्हें लिखा था, जिसका अर्थ है कि एक छवि अगली छवि द्वारा लिखी गई है जो इसे ओवरलैप करती है। आप इसका उपयोग यह जानने के लिए कर सकते हैं कि हिट-टेस्टिंग के लिए उन्हें किस क्रम में आज़माएं, यदि एक से अधिक बिंदु पर क्लिक किया गया है। एकमात्र चाल यह पता लगाने के लिए है कि कोई छवि पिक्सेल पारदर्शी है या नहीं।

एक छवि में क्लिक किए गए पिक्सेल बिंदु के लिए पारदर्शिता का पता लगाने के लिए, आप एक दूसरा छुपा कैनवास तत्व रख सकते हैं। इसे साफ़ करें, फिर उसी स्थिति पर लक्षित छवि लिखें, और यह देखने के लिए एक ही कोड का उपयोग करें कि दूसरे कैनवास के भीतर क्लिक किया गया पिक्सेल पारदर्शी रंग है या नहीं। यदि ऐसा है, तो इस प्रक्रिया को जेड-ऑर्डर में अगली छवि के साथ दोहराएं जब तक कि आपको उस छवि को प्राप्त न किया जाए जहां एक गैर पारदर्शी पिक्सेल क्लिक किया गया था।

एक छोटा लेकिन महत्वपूर्ण अनुकूलन रंग को पहले क्लिक करने के लिए है, और यदि यह पारदर्शी रंग है तो आप पहले ही जानते हैं कि किसी भी छवि को गैर-पारदर्शी बिंदु पर क्लिक नहीं किया गया था।

+0

यह जटिल है लेकिन वास्तव में काफी चालाक है। मेरे क्लाइंट में एक ऐप है जिसमें कई सौ ओवरलैपिंग छवियां हैं (एक मानचित्र की तरह) और प्रत्येक छवि कम-से-कम आयताकार है इसलिए मामला # 1 अधिकतर समय काम करेगा। रंगीन मूल्य> 0 लौटने वाले केवल एक के लिए संबंधित रंगों के लिए उम्मीदवारों के माध्यम से लूपिंग एक आदर्श समाधान है। –

+0

धन्यवाद। अक्सर मैं स्रोत कोड प्रदान करता हूं, लेकिन ऐसा करने के लिए यह थोड़ा लंबा था। –

+0

कोई स्रोत आवश्यक नहीं है। यह पर्याप्त कस्टम है कि यह उद्देश्य को पूरा नहीं करेगा। :) मैं पहले से ही यह काम कर रहा हूं और मेरे ब्लॉग पर पोस्ट करने की सोच रहा था। यह बहुत उपयोगी है। –

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