पर कई माउसओवर ईवेंट लागू करें मेरे पास नेटवर्क आरेख (बल-निर्देशित ग्राफ), एक स्कैटरप्लॉट और एक तालिका है जो सभी इंटरकनेक्टेड हैं (jsFiddle देखें)। मेरे पास माउसकॉवर घटनाओं के लिए जिस तरह से मैं चाहता हूं, उस पर काम कर रहे इंटरकनेक्शन हैं। मैं अपने कोड को संशोधित करना चाहता हूं ताकि जब मैं नेटवर्क आरेख में नोड को माउसवर करता हूं, न केवल मूसड-ओवर नोड हाइलाइट किया जाता है (और स्कैटरप्लॉट और टेबल में इसके कनेक्शन), लेकिन इसके तत्काल पड़ोसी नोड्स को भी हाइलाइट किया जाता है (साथ ही साथ स्कैटरप्लॉट और टेबल में उनके कनेक्शन के रूप में)।पड़ोसी (कनेक्टेड) नोड्स
मैं मदद के लिए Highlight selected node, its links, and its children in a D3 force directed graph में जानकारी को देखा। कहीं भी (बिल्कुल सही नहीं है) मुझे एक फ़ंक्शन का एक उदाहरण मिला जो कनेक्टेड नोड्स को परिभाषित करने में मदद करता है, isConnected()
।
function isConnected(a, b) {
return linkedByIndex[a.index + "," + b.index] || linkedByIndex[b.index + "," + a.index] || a.index == b.index;
}
मैं शायद एक if()
बयान के साथ मेरी माउसओवर घटनाओं में इस समारोह को शामिल करने,, ताकि मैं "पर प्रकाश डाला" है कि मैं चाहता हूँ सभी कर सकते हैं करना चाहते हैं। लेकिन, मैं डी 3 और जेएस के लिए नया हूं और मुझे यकीन नहीं है कि इसे कैसे सेट अप करें।
नीचे कोड का स्निपेट (jsFiddle से) कि मैं संशोधित करने के लिए चाहते हैं। मैं अन्य उदाहरणों के लिए किसी भी सुझाव या पॉइंटर्स की सराहना करता हूं।
var node = svg.selectAll(".node")
.data(graph.nodes)
.enter().append("g")
.attr("class", function(d) { return "node " + d.name + " " + d.location; })
.call(force.drag)
.on("mouseover", function(d) {
// I would like to insert an if statement to do all of these things to the connected nodes
// if(isConnected(d, o)) {
d3.select(this).select("circle").style("stroke-width", 6);
d3.select(this).select("circle").style("stroke", "orange");
d3.select(this).select("text").style("font", "20px sans-serif");
d3.selectAll("rect." + d.location).style("stroke-width", 6);
d3.selectAll("rect." + d.location).style("stroke", "orange");
d3.selectAll("text." + d.location).style("font", "20px sans-serif");
d3.selectAll("tr." + d.name).style("background-color", "orange");
//}
})
.on("mouseout", function(d) {
// if(isConnected(d, o)) {
d3.select(this).select("circle").style("stroke-width", 1.5);
d3.select(this).select("circle").style("stroke", "gray");
d3.select(this).select("text").style("font", "12px sans-serif");
d3.selectAll("rect." + d.location).style("stroke-width", 1.5);
d3.selectAll("rect." + d.location).style("stroke", "gray");
d3.selectAll("text." + d.location).style("font", "12px sans-serif");
d3.selectAll("tr." + d.name).style("background-color", "white");
//}
});
यह सहायक है, लेकिन यह केवल नेटवर्क आरेख पर हाइलाइट करने वाले पड़ोसी को लागू करता है। मैं टेबल और मानचित्र में संबंधित बिट्स को हाइलाइट करना चाहता हूं। तो, उदाहरण के लिए, जब मैं ग्रुप ए को माउसवर करता हूं, तो मैं जिम, सैली और टॉम को नेटवर्क आरेख में सर्किल हाइलाइट करना चाहता हूं (आपका कोड इस पर संबोधित करता है), (2) तालिका में पंक्तियों को हाइलाइट किया गया, और (3) हाइलाइट किया गया मानचित्र में आयताकार। क्या आप भाग 2 और 3 के साथ मेरी मदद कर सकते हैं? –
यह आपके आयतों की तरह दिखता है और शायद आपकी तालिका डेटा को उसी तरह से संबद्ध नहीं करती है जैसे डी 3। लेकिन ऐसा कोई कारण नहीं है कि आप वैसे भी डी 3 चयन का उपयोग नहीं कर सकते हैं। यह चाल अन्य वस्तुओं को हाइलाइट करने के लिए वास्तव में नोड्स या सही विशेषताओं की सूची प्राप्त करने के लिए पड़ोसी नोड इंडेक्स की सरणी का उपयोग करना होगा। तो आप एक ही तर्क लागू करने में सक्षम होना चाहिए। – Superboggly
क्या आप मुझे यह संकेत दे सकते हैं कि यह कैसे करें? मैं \t की कोशिश की \t \t \t 'd3.selectAll (" रेक्ट। "+ D.location) .filter (समारोह (नोड) { वापसी nodeNeighbors.indexOf (node.index)> -1; }) .style (" स्ट्रोक "," सियान "); लेकिन, जाहिर है, यह काम नहीं किया। –