यह प्रश्न d3-js Google समूह में one you posted के समान है। मैंने जो लिखा है उसे डुप्लिकेट किए बिना, मैं दोहरा दूंगा कि आप शायद d3.dispatch नहीं चाहते हैं; यह कस्टम इवेंट एब्स्ट्रैक्शन (जैसे ब्रश और व्यवहार) के लिए है। देशी घटनाओं का उपयोग करना आसान होगा।
आप अपनी कथा माउसओवर पर, तो टूटने चरणों में समस्या इसी बार का रंग बदलना चाहते हैं:
- कथा पर माउसओवर का पता लगाने।
- संबंधित बार का चयन करें।
- बार के भरने वाले रंग को बदलें।
सबसे पहले, पौराणिक तत्वों पर "माउसओवर" घटनाओं को सुनने के लिए selection.on का उपयोग करें। जब आपका माउस एक किंवदंती तत्व पर जाता है तो आपका श्रोता फ़ंक्शन कॉल किया जाएगा, और दो तर्कों के साथ कहा जाएगा: डेटा (d
) और अनुक्रमणिका (i
)। आप d3.select के माध्यम से संबंधित बार का चयन करने के लिए इस जानकारी का उपयोग कर सकते हैं। अंत में, नए रंग के साथ "भरें" शैली को बदलने के लिए selection.style का उपयोग करें।
यदि आप सुनिश्चित नहीं हैं कि किंवदंती माउसओवर पर संबंधित बार का चयन कैसे करें, तो आमतौर पर कई विकल्प होते हैं। सूचकांक द्वारा चयन करना सबसे सरल है, यह मानते हुए कि पौराणिक तत्वों की संख्या और रेक्ट तत्वों की संख्या समान है, और वे एक ही क्रम में हैं। उस मामले में, अगर एक स्थानीय चर rect
रेक्ट तत्व शामिल हैं, आप कह सकते हैं:
function mouseover(d, i) {
d3.select(rect[0][i]).style("fill", "red");
}
आप सूचकांक पर भरोसा नहीं करना चाहते हैं, तो एक और विकल्प मिलान समान डेटा के आधार पर बार के लिए स्कैन किया जा सके। यह selection.filter उपयोग करता है:
function mouseover(d, i) {
rect.filter(function(p) { return d === p; }).style("fill", "red");
}
फिर भी एक और विकल्प प्रत्येक एक अद्वितीय ID आयताकार, और फिर आईडी के आधार पर चुनते दे रहा है। उदाहरण के लिए, प्रारंभ पर, आप कह सकते हैं:
rect.attr("id", function(d, i) { return "rect-" + i; });
उसके बाद, आप माउसओवर पर आईडी द्वारा रेक्ट चुन सकते हैं:
function mouseover(d, i) {
d3.select("#rect-" + i).style("fill", "red");
}
ऊपर के उदाहरण काल्पनिक है के बाद से मैं सूचकांक का इस्तेमाल किया आईडी उत्पन्न करने के लिए विशेषता (इस मामले में, सूचकांक द्वारा चयन की पहली तकनीक का उपयोग करने के लिए यह सरल और तेज़ है)। एक और यथार्थवादी उदाहरण होगा यदि आपके डेटा का नाम संपत्ति हो; आप आईडी विशेषता उत्पन्न करने के लिए d.name
का उपयोग कर सकते हैं, और इसी प्रकार आईडी द्वारा चयन करें। यदि आप एक अद्वितीय आईडी उत्पन्न नहीं करना चाहते हैं तो आप अन्य विशेषताओं या वर्ग द्वारा भी चयन कर सकते हैं।
हाय माइक:
नीचे संदर्भ में कोड देखें। डी 3 एक महान तकनीक है और मैं इसे सीखने में अपना समय का आनंद ले रहा हूं। - फ्रैंक –
एफडब्ल्यूआईडब्ल्यू इस उदाहरण को केवल एक जोड़कर लागू किया जा सकता है: प्रश्न में एसवीजी तत्वों के लिए होवर सीएसएस नियम। –
@ हर्बकौडिल ए: होवर नियम इस मामले में बहुत सीमित है: यह उदाहरण दर्शाता है कि किसी के अलावा तत्वों को कैसे संशोधित किया जाए (उदा।, बार में किंवदंती)। ए: होवर नियम केवल तभी काम करता है जब आप जिन तत्वों को संशोधित करना चाहते हैं वे समान हैं (उदा।, किंवदंती)। [संबंधित तत्वों का चयन और संशोधन] पर मेरा अन्य उत्तर देखें [http://stackoverflow.com/questions/11206015/clicking-a-node-in-d3-from-a-button-outside-the-svg/11211391)। – mbostock