2013-01-18 21 views
9

मेरे पास बल लेआउट के आधार पर ग्राफ है। जब तक ग्राफ नोड्स को नहीं रखता तब तक मैं 'लोडिंग' ओवरले रखना चाहता हूं। ग्राफ को पूरा करने के लिए मैं किस घटना/संपत्ति का उपयोग कर सकता हूं?नोड्स रखने के बल बल लेआउट कैसे पता चला है?

मैं एपीआई की जाँच की, कुछ भी नहीं मिला ..

उत्तर

6

जब लेआउट अभिसरण, force.alpha() 0 पर सेट हो जाएगा एक टाइमर नहीं भी अक्सर सेट है कि के लिए मतदान पर (!) और आपको पता चलेगा कि आप कब कर रहे हैं।

इस उदाहरण को लेआउट स्टॉप होने तक प्रत्येक interval मिलीसेकंड को फिर से प्रयास करना चाहिए। वेरिएबल timer वर्तमान टाइमर रखता है, जिसे आप रीसेट कर सकते हैं यदि आप लेआउट को और पूरा करने के लिए इंतजार नहीं करना चाहते हैं।

var timer = null; 
function onCompletion(force, callback, interval) { 
    interval = interval || 300; 

    function retryIfRunning() { 
     if (force.alpha() != 0) 
      timer = setTimeout(checkAndRetry, interval); 
     else { 
      timer = null; 
      callback(); 
     } 
    } 

    retryIfRunning(); 
} 
2

यह संभव के रूप में एक सुविधा में बनाया के रूप में यह तुम क्या करने पर विचार रखने नोड्स के साथ किया जा रहा है के रूप में पर निर्भर करता है नहीं है। आपके द्वारा किए गए ग्राफ के आकार और सटीकता के आधार पर nn के साथ tick फ़ंक्शन n बार कॉल करके जिस तरह से किया जाता है।

# force.tick(): बल लेआउट सिमुलेशन एक चरण चलाता है।

मैं आपको प्रोत्साहित करते हैं force.tick() प्रलेखन पढ़ने के लिए यदि आप और अधिक जानना चाहता हूँ: https://github.com/mbostock/d3/wiki/Force-Layout#wiki-tick

13

the documentation से, end घटना है, यानी जब force.alpha === 0 जब लेआउट किया जाता है भेजा जाता है।

force 
    .nodes(yourNodes) 
    .links(yourLinks) 
    .on('tick', function() { 
    // layout is in progress 
    }) 
    .on('end', function() { 
    // layout is done 
    callback(); 
    }); 
+1

इस तरह कम तो स्वीकार कर लिया समाधान है:

तो तुम जब यह साथ किया जाता है पता कर सकते हैं! @ टीओ शायद accetion स्विच? – kwoxer