इस साल की शुरुआत में, वेब ऐनिमेशन स्पेसिफ़िकेशन के तहत, Chrome 36 में element.animate मेथड लॉन्च किया गया था. इससे, बेहतर और नेटिव ऐनिमेशन लिखने में मदद मिलती है. साथ ही, डेवलपर को अपने ऐनिमेशन और ट्रांज़िशन को सबसे सही तरीके से बनाने का विकल्प मिलता है.
यहां बताया गया है कि स्क्रीन पर क्लाउड का ऐनिमेशन कैसे बनाया जा सकता है. साथ ही, ऐनिमेशन खत्म होने पर कॉलबैक भी किया जा सकता है:
var player = cloud.animate([
{transform: 'translateX(' + start + 'px)'},
{transform: 'translateX(' + end + 'px)'}
], 5000);
player.onfinish = function() {
console.info('Cloud moved across the screen!');
startRaining(cloud);
};
यह तरीका बेहद आसान है. ऐनिमेशन या ट्रांज़िशन बनाते समय, इसे अपने टूलबॉक्स में शामिल करना ज़रूरी है. हालांकि, Chrome 39 में element.animate
से दिखाए गए AnimationPlayer
ऑब्जेक्ट में, प्लेबैक कंट्रोल की सुविधाएं जोड़ी गई हैं. पहले, ऐनिमेशन बनाने के बाद, सिर्फ़ cancel()
को कॉल किया जा सकता था या 'पूरा हुआ' इवेंट को सुना जा सकता था.
प्लेबैक में ये बदलाव करने से, वेब ऐनिमेशन की सुविधाओं के इस्तेमाल के नए तरीके मिलते हैं.जैसे, ऐनिमेशन को ट्रांज़िशन के लिए इस्तेमाल करने के बजाय, सामान्य तौर पर इस्तेमाल किए जाने वाले टूल के तौर पर इस्तेमाल करना. जैसे, 'तय' या पहले से तय किए गए ऐनिमेशन.
वीडियो को रोकना, पीछे ले जाना या चलाने की रफ़्तार बदलना
आइए, ऊपर दिए गए उदाहरण को अपडेट करके शुरू करते हैं, ताकि क्लाउड पर क्लिक करने पर ऐनिमेशन रोका जा सके:
cloud.addEventListener('mousedown', function() {
player.pause();
});
playbackRate
प्रॉपर्टी में भी बदलाव किया जा सकता है:
function changeWindSpeed() {
player.playbackRate *= (Math.random() * 2.0);
}
reverse()
का तरीका भी इस्तेमाल किया जा सकता है. यह आम तौर पर मौजूदा playbackRate
को उलटने (-1 से गुणा करने) के बराबर होता है. हालांकि, कुछ खास मामलों में ऐसा नहीं होता:
अगर
reverse()
तरीके से किए गए बदलाव की वजह से, चल रहे एनिमेशन का असर खत्म हो जाता है, तोcurrentTime
भी उलट जाता है - उदाहरण के लिए, अगर कोई नया एनिमेशन उलटा चलाया जाता है, तो पूरा एनिमेशन पीछे की ओर चलेगाअगर प्लेयर को रोका गया है, तो ऐनिमेशन चलने लगेगा.
प्लेयर को स्क्रब करना
अब AnimationPlayer
, ऐनिमेशन चलने के दौरान अपने currentTime
में बदलाव कर सकता है. आम तौर पर, यह वैल्यू समय के साथ बढ़ती है. अगर playbackRate
नेगेटिव है, तो यह वैल्यू कम हो सकती है. इससे, ऐनिमेशन की पोज़िशन को बाहर से कंट्रोल किया जा सकता है. ऐसा, शायद उपयोगकर्ता के इंटरैक्शन से किया जा सकता है. इसे आम तौर पर स्क्रब करना कहा जाता है.
उदाहरण के लिए, अगर आपके एचटीएमएल पेज पर आसमान दिखाया गया है और आपको फ़िलहाल चल रहे बादल की जगह बदलने के लिए, 'खींचें और छोड़ें' जेस्चर का इस्तेमाल करना है, तो दस्तावेज़ में कुछ हैंडलर जोड़े जा सकते हैं:
var startEvent, startEventTime;
document.addEventListener('touchstart', function(event) {
startEvent = event;
startEventTime = players.currentTime;
player.pause();
});
document.addEventListener('touchmove', function(event) {
if (!startEvent) return;
var delta = startEvent.touches[0].screenX -
event.changedTouches[0].screenX;
player.currentTime = startEventTime + delta;
});
दस्तावेज़ पर खींचते और छोड़ते समय, currentTime
बदल जाएगा, ताकि आपके मूल इवेंट से दूरी दिख सके. जेस्चर खत्म होने पर, ऐनिमेशन फिर से चलाने के लिए:
document.addEventListener('touchend', function(event) {
startEvent = null;
player.play();
});
इसे, पेज से माउस हटाने के बाद, पेज पर वापस जाने के व्यवहार के साथ भी जोड़ा जा सकता है. यह इस बात पर निर्भर करता है कि माउस को पेज से कहां हटाया गया था (कॉम्बिनेटेड डेमो).
उपयोगकर्ता के इंटरैक्शन के जवाब में AnimationPlayer
को स्क्रब करने के बजाय, इसकी currentTime
का इस्तेमाल प्रोग्रेस या स्टेटस दिखाने के लिए भी किया जा सकता है. उदाहरण के लिए, डाउनलोड का स्टेटस दिखाने के लिए.
यहां AnimationPlayer
की सुविधा से, वैल्यू सेट की जा सकती है. साथ ही, नेटिव तरीके से लागू होने की प्रोग्रेस को विज़ुअलाइज़ किया जा सकता है. डाउनलोड के मामले में, ऐनिमेशन की अवधि को डाउनलोड किए गए कुल साइज़ पर सेट किया जा सकता है. साथ ही, currentTime
को फ़िलहाल डाउनलोड किए गए साइज़ (डेमो) पर सेट किया जा सकता है.
यूज़र इंटरफ़ेस (यूआई) ट्रांज़िशन और जेस्चर
मोबाइल प्लैटफ़ॉर्म पर, सामान्य जेस्चर का इस्तेमाल लंबे समय से किया जा रहा है. जैसे, खींचने, स्लाइड करने, फ़्लिंग करने वगैरह. इन जेस्चर में एक सामान्य थीम होती है: खींचकर छोड़ा जा सकने वाला यूज़र इंटरफ़ेस (यूआई) कॉम्पोनेंट, जैसे कि सूची व्यू का "पुल टू रीफ़्रेश" या स्क्रीन की बाईं ओर से खींचा गया साइडबार.
वेब ऐनिमेशन की मदद से, डेस्कटॉप या मोबाइल पर वेब पर भी इसी तरह का इफ़ेक्ट आसानी से बनाया जा सकता है. उदाहरण के लिए, currentTime
को कंट्रोल करने वाला कोई जेस्चर पूरा होने पर:
var steps = [ /* animation steps */ ];
var duration = 1000;
var player = target.animate(steps, duration);
player.pause();
configureStartMoveListeners(player);
var setpoints = [0, 500, 1000];
document.addEventListener('touchend', function(event) {
var srcTime = player.currentTime;
var dstTime = findNearest(setpoints, srcTime);
var driftDuration = dstTime - srcTime;
if (!driftDuration) {
runCallback(dstTime);
return;
}
var driftPlayer = target.animate(steps, {
duration: duration,
iterationStart: Math.min(srcTime, dstTime) / duration,
iterations: Math.abs(driftDuration) / duration,
playbackRate: Math.sign(driftDuration)
});
driftPlayer.onfinish = function() { runCallback(dstTime); };
player.currentTime = dstTime;
});
इससे एक और ऐनिमेशन बनता है, जो 'ड्रिफ़्ट' करता है. यह उस जगह से लेकर, हमारे जाने-पहचाने अच्छे टारगेट तक चलता है जहां जेस्चर पूरा हुआ था.
ऐसा इसलिए होता है, क्योंकि ऐनिमेशन को बनाने के क्रम के आधार पर उनकी प्राथमिकता तय होती है: इस मामले में, driftPlayer
को प्लेयर से पहले दिखाया जाएगा. driftPlayer
पूरा होने के बाद, वह और उसके असर हट जाएंगे. हालांकि, इसका आखिरी समय, प्लेयर के currentTime से मेल खाएगा, ताकि आपका यूज़र इंटरफ़ेस (यूआई) एक जैसा रहे.
आखिर में, अगर आपको बिल्ली के बच्चे पसंद हैं, तो एक डेमो वेब ऐप्लिकेशन है, जो इन जेस्चर को दिखाता है. यह मोबाइल-फ़्रेंडली है और पुराने वर्शन के साथ काम करने के लिए, पॉलीफ़िल का इस्तेमाल करता है. इसलिए, इसे अपने मोबाइल डिवाइस पर लोड करके देखें!
आगे बढ़ें और element.animate
element.animate
तरीका फ़िलहाल बहुत अच्छा है. भले ही, इसका इस्तेमाल आसान ऐनिमेशन के लिए किया जा रहा हो या फिर इससे मिलने वाले AnimationPlayer
का इस्तेमाल अन्य तरीकों से किया जा रहा हो.
ये दोनों सुविधाएं, कम साइज़ वाले पॉलीफ़िल की मदद से, दूसरे आधुनिक ब्राउज़र में भी पूरी तरह से काम करती हैं. यह पॉलीफ़िल, सुविधा की पहचान भी करता है. इसलिए, जैसे-जैसे ब्राउज़र वेंडर इस स्पेसिफ़िकेशन को लागू करेंगे, समय के साथ यह सुविधा ज़्यादा तेज़ और बेहतर होती जाएगी.
वेब ऐनिमेशन स्पेसिफ़िकेशन को भी लगातार बेहतर बनाया जाएगा. अगर आपको आने वाली सुविधाओं को आज़माना है, तो वे अब ज़्यादा जानकारी वाले पॉलीफ़िल: web-animations-next में भी उपलब्ध हैं.