2012-10-30 30 views
10

मेरे पास एक (बल्कि सरल) प्रश्न है: D3.js द्वारा किए गए चयन पर बल "ड्रैग" कैसे करें। आइए मान लें कि मैंने तत्वों का एक सेट बनाया है और इसे "कॉल" कहा जाता है, जिससे इसे बल-निर्देशित लेआउट का ड्रैग-कॉलबैक दिया जाता है। ऐसा लगता है:D3.js: चयन से बल.ड्राग निकालें

d3.selectAll('rect').call(force.drag); 

अब बाद में कुछ नोड्स से उस व्यवहार को हटाना संभव होगा। मेरे दृष्टिकोण उनमें से

d3.select('rect#no-drag').on('click', null); 

कोई नहीं का उपयोग कर काम किया, जैसे कि 'क्लिक', 'खींचें' आदि के रूप में विभिन्न श्रोताओं, रीसेट शामिल थे। क्या कोई जानता है कि कॉलबैक को कैसे हटाया जाए?

उत्तर

19

आप करीब हैं। ड्रैग इवेंट mousedown ईवेंट द्वारा drag नामक नामस्थान के साथ शुरू किया गया है। देखें: https://github.com/mbostock/d3/blob/master/src/behavior/drag.js#L5

तो, यह दूर करने के लिए आप कर सकता है:

d3.select('rect#no-drag').on('mousedown.drag', null); 
+0

यह पूरी तरह से हल करता है, मैंने अभी कोशिश की है और यह काम करता है :) क्या डी 3.जेएस में डिफ़ॉल्ट रूप से नामित घटनाएं हैं? – user654123

+0

हां। इसके अलावा यदि आप अपना खुद का कार्यक्रम श्रोताओं को जोड़ते हैं तो यह उन्हें नाम देने के लिए समझ में आता है। वे एक ही घटना को सुनकर कई श्रोताओं का उपयोग करना संभव बनाते हैं। – nautat

+0

ठीक है, मैं पहले से ही jQuery प्लग-इन विकास से नामांकित घटनाओं से परिचित था। ऐसा लगता है कि D3.js आपको प्रत्येक योग्य ईवेंट के लिए केवल एक कॉलबैक पंजीकृत करने देता है, इस प्रकार उन्हें नामस्थान करने का अर्थ होता है। एक बार फिर धन्यवाद। – user654123

1

यह पंक्ति किसी भी तरह यह नहीं मोबाइल संगत (क्रोम/एंड्रॉयड)

d3.select('rect#no-drag').on('mousedown.drag', null); 
2

यह सवाल कैसे पूछ नहीं है ड्रैग तत्व पर ठीक दाग नियंत्रण है, लेकिन मैं यहां आया था कि परिस्थितियों के आधार पर ड्रैग चालू/बंद कैसे करें, और पूछने वाले ने यह भी पूछा कि टिप्पणियों में इसे हटाने के बाद वापस खींचें।

इस प्रकार, किसी को भी ड्रैग इवेंट की सशर्त रूप से अनुमति देने के लिए, drag.filter का उपयोग करने के लिए देख रहे हैं।

drag.filter एक कॉलबैक लेता है जिसे बुलियन लौटने की आवश्यकता होती है। यदि कॉलबैक सत्य लौटाता है, तो ड्रैग होता है, अन्यथा ड्रैग ट्रिगर नहीं होता है।

यह चयन से ड्रैग को हटाने और फिर इसे फिर से लागू करने की कोशिश करने से बहुत साफ है।

+0

आप देर हो चुकी हैं खेल के लिए लेकिन आपकी टिप्पणी बहुत सराहना की है, धन्यवाद! – user654123