2015-09-19 18 views
5

में दो ऑब्जेक्ट्स के बीच एनीमेशन जोड़ें मेरे पास एक बहुत ही बुनियादी अनुप्रयोग है जो आप आकार बनाते हैं और उन्हें लाइन से कनेक्ट करते हैं। ऐसा करने के लिए आप निम्नलिखित करेंगे।फैब्रिक जेएस

Example 

1. Click new animation 
2. add rectangle 
3. add child 
4. add circle 

आप आकृतियों को चारों ओर खींच सकते हैं, खींच सकते हैं और आकार बदल सकते हैं। मैं सोच रहा था कि दो ऑब्जेक्ट्स के बीच एनीमेशन जोड़ना संभव है या नहीं। तो उदाहरण के लिए एक छोटी गोल सर्कल बॉल दो वस्तुओं के बीच रेखा पर एनिमेट करेगा। मैंने कपड़े जेएस में एनीमेशन पेज पर डेमो की जांच की है लेकिन यह सुनिश्चित नहीं है कि ऑब्जेक्ट बी से करना संभव है या नहीं।

यहां FIDDLE है।

उत्तर

5

मुझे नहीं पता कि क्या आप कपड़े में निर्मित एनीमेशन फ़ंक्शन का उपयोग कर सकते हैं क्योंकि आप कहते हैं कि ये ऑब्जेक्ट्स स्वयं के चारों ओर घूम रहे हैं। लेकिन आप काफी आसानी से मैन्युअल रूप से गणित के एक बिट का उपयोग कर कुछ इस तरह बना सकते हैं:

enter image description here

आप इस समारोह के लिए 0 और 1. सही सूत्र के बीच एक लहर दोलन की तरह यह इलाज कर ऐसा कर सकता है:

enter image description here

  • जब "कोण" 0, या 2π आयाम 0 है की एक बहु है, इसलिए गेंद object1 के केंद्र में है
  • जब "आंग le "π का गुणज है, आयाम 1 है और गेंद object2 के केंद्र
  • जब आयाम 0.5 है पर है, गेंद दो वस्तुओं

तुम बस कोण के आधार पर वृद्धि कर सकते हैं के बीच में है समय, जो भी अवधि, या अवधि आप चाहते हैं।

var animateBallBetweenObjects = function (obj1, obj2) { 

    // Add the "ball" 

    var circle = new fabric.Circle({ 
     radius: 10, 
     fill: 'blue', 
     left: obj1.getCenterPoint().x, 
     top: obj1.getCenterPoint().y, 
     originX: 'center', 
     originY: 'middle', 
     selectable: false 
    }); 

    canvas.add(circle); 

    var period = 1000; 
    var amplitude = 0; 
    var angle = 0; 
    var prevTime = Date.now(); 

    var loop = function() { 

     // Calculate the new amplitude 

     var now = Date.now(); 
     var elapsed = now - prevTime; 
     prevTime = now; 
     angle += Math.PI * (elapsed/(period * 0.5)); 
     amplitude = 0.5 * (Math.sin(angle - (0.5 * Math.PI)) + 1); 

     // Set the new position 

     var obj1Center = obj1.getCenterPoint(); 
     var obj2Center = obj2.getCenterPoint(); 

     circle.setLeft(obj1Center.x + (amplitude * (obj2Center.x - obj1Center.x))); 
     circle.setTop(obj1Center.y + (amplitude * (obj2Center.y - obj1Center.y))); 
     canvas.renderAll(); 

     requestAnimationFrame(loop); 
    } 

    // Animate as fast as possible 

    requestAnimationFrame(loop); 
}; 

FIDDLE इसके साथ यहां।

+0

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

+0

जो आपने पोस्ट किया था वह बहुत करीब है जो मैं ढूंढ रहा था। मैं इसके साथ थोड़ा सा खेलने के लिए जा रहा हूं और सुनिश्चित करता हूं कि मैं – user1010101

+0

@ user1010101 मुझे यकीन नहीं है कि मैं आपका प्रश्न समझता हूं। क्या आप पूछ रहे हैं कि क्या आप एक समय में इनमें से एक से अधिक एनिमेशन प्राप्त कर सकते हैं? जवाब हां है, आप जितना चाहें उतने हो सकते हैं: https://mattharrison.s3.amazonaws.com/stackoverflow/animation.gif –

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