2012-06-26 5 views
11

मैं div को 200px क्षैतिज रूप से जावास्क्रिप्ट में ले जाने की कोशिश कर रहा हूं।जावास्क्रिप्ट एनीमेशन

नीचे दिया गया कोड इसे पिक्सल पर कूदता है, लेकिन क्या यह jQuery का उपयोग किये बिना एनिमेटेड दिखने का कोई तरीका है?

function() { 
    var div = document.getElementById('challengeOneImageJavascript'); 
    div.style.left = "200px"; 
} 
+1

इस पर एक नज़र डालें http://api.jquery.com/animate/ – Huangism

+0

@ हूंगिज्म वह पूछता है कि बिना jquery के इसे कैसे किया जाए। – Ibu

+3

उन्होंने कहा "बिना jQuery के" – SomeKittens

उत्तर

40

यहाँ एक बुनियादी एनीमेशन सेटअप है:

function animate(elem,style,unit,from,to,time) { 
    if(!elem) return; 
    var start = new Date().getTime(), 
     timer = setInterval(function() { 
      var step = Math.min(1,(new Date().getTime()-start)/time); 
      elem.style[style] = (from+step*(to-from))+unit; 
      if(step == 1) clearInterval(timer); 
     },25); 
    elem.style[style] = from+unit; 
} 

का उपयोग करें:

animate(
    document.getElementById('challengeOneImageJavascript'), 
    "left","px",0,200,1000 
); 

यह उदाहरण दिया तत्व चेतन 1 सेकंड से समय के साथ 200px को 0px से रैखिक स्लाइड करने के लिए होगा (1000 एमएस)।

+0

बहुत सारी सुविधाओं के साथ बहुत गहन कार्यान्वयन ... जैसे –

+1

कमाल काम करता है! धन्यवाद – CUDA

+0

यदि इस उत्तर ने आपकी समस्या का समाधान किया है, तो कृपया वोट स्कोर के नीचे दाईं ओर बड़े चेक मार्क पर क्लिक करके स्वीकृत के रूप में चिह्नित करने पर विचार करें;) –

8

आप आसानी से CSS3-Transition के माध्यम से ऐसा कर सकते हैं:

#challengeOneImageJavascript { 
    -webkit-transition: left .2s; 
     -moz-transition: left .2s; 
     -o-transition: left .2s; 
      transition: left .2s; 
} 

हालांकि, यह IE9 द्वारा समर्थित नहीं है और पहले ब्राउज़र संस्करणों।

+0

के साथ काम करना चाहिए ऐसे ब्राउज़र में जो ऐसे सीएसएस का समर्थन करता है यह – machineghost

+0

है कृपया निर्दिष्ट करें कि यह css3 केवल – Ibu

+0

हाँ है - यह उत्तर, बहुत से वोट देने के बावजूद, भविष्य के लिए एक है, और केवल नवीनतम ब्राउज़र –

1
जावास्क्रिप्ट के साथ

, आप setInterval समारोह का उपयोग करना होगा या इस लिए कि यह कैसे jQuery में किया जा सकता है:

$('#challengeOneImageJavascript').animate({left: '=-5'}); 

जला हुआ मूल्य (5) को अपनी आवश्यकताओं के साथ-साथ दिशा के अनुसार =- या =+

के माध्यम से

वेनिला जावास्क्रिप्ट के साथ :

var interval; 
var animate = function(id, direction, value, end, speed){ 
    var div = document.getElementById(id); 
    interval = setInterval(function() { 
     if (+(div.style) === end) { 
      clearInterval(interval); 
      return false; 
     } 
     div.style[direction] += value; // or -= as per your needs 
    }, speed); 
} 

और आप इसे पसंद का उपयोग कर सकते हैं:

animate('challengeOneImageJavascript', 'left', 5, 500, 200); 

एनीमेशन किसी भी समय रोकने के लिए, आप क्या करेंगे:

clearInterval(interval); 

नोट:यह सिर्फ एक बहुत त्वरित तरीका यह है कि आप एक देने के लिए क्या करने के लिए विचार।

+0

और बिना jquery ..? –

+0

मुझे डर है कि ओपी एक जावास्क्रिप्ट गैर jquery समाधान चाहता है। – Alexandre

+0

@Alexandre: कोड – Blaster

1

आपको एक जावास्क्रिप्ट टाइमआउट फ़ंक्शन का उपयोग करना होगा, और एक समय में सीएसएस मान को थोड़ा बदलना होगा। सबसे आसान तरीका प्रत्येक सीमा तक पहुंचने तक एक सेट राशि द्वारा बढ़ाना होगा, जो आपको एक रैखिक एनीमेशन देगा, जो jQuery के डिफ़ॉल्ट swing एनीमेशन की तुलना में घबराहट और शौकिया दिखता है जो एक एस-वक्र की तरह एक बेजियर वक्र का पालन करता है ।

Untested कोड रैखिक एनीमेशन

var lefty = 0; 
var animate = function(){ 
    lefty += 20; 
    var div = document.getElementById('challengeOneImageJavascript'); 
    div.style.left = lefty +"px"; 
    if(lefty < 200) 
     setTimeout(animate(),100); 
} 

animate() 

N.B. करना चाहिए कोड के उस ब्लॉक को बनाने के लिए बहुत सारे सुधार हैं, लेकिन आपको यह जाना चाहिए ...

+0

मुझे यह JQuery के साथ काम करने के लिए मिला (जो स्पष्ट रूप से एक बेहतर विकल्प है) लेकिन मैं जावास्क्रिप्ट सीखने की कोशिश कर रहा हूं और सबसे अच्छा तरीका है कि मुझे पता है कि कठिन तरीके से काम करने की कोशिश करने और चीजों को कैसे प्राप्त करना है – CUDA

2

मैंने शोध का एक टन किया, और अंततः मैंने यह सीखा कि यह वास्तव में कैसे किया जाए।

मुझे अपने प्रोग्राम को विंडो में रखना पसंद है। ऑनलोड फ़ंक्शन, इस तरह से यह पृष्ठ लोड होने तक कोड चला नहीं जाता है।

एनीमेशन करने के लिए, एक फ़ंक्शन बनाएं (मैं इसे ड्रॉ फ़ंक्शन कहूंगा) और इसे आरक्षित शब्दों को छोड़कर जो कुछ भी आप चाहते हैं उसे कॉल करें, फिर ड्रॉ फ़ंक्शन के बहुत अंत में अनुरोध एनीमेशन फ़्रेम फ़ंक्शन को कॉल करें और इसे दें फ़ंक्शन का नाम अगली फ्रेम कहलाएगा।

अनुरोध से पहलेएनीमेशन फ़्रेम फ़ंक्शन का उपयोग किया जा सकता है इसे घोषित किया जाना चाहिए।

नीचे कोड देखें:

window.onload = function() { 
 
    function draw() { // declare animation function 
 
    context.fillStyle = "white"; 
 
    context.fillRect(0, 0, 400, 400); 
 
    requestAnimationFrame(draw); // make another frame 
 
    } 
 
    var requestAnimationFrame = // declare the 
 
    window.requestAnimationFrame || // requestAnimationFrame 
 
    window.mozRequestAnimationFrame || // function 
 
    window.webkitRequestAnimationFrame || 
 
    window.msRequestAnimationFrame; 
 
    draw(); // call draw function 
 
}

नोट: लाइन है कि कॉल ड्रॉ समारोह चलेंगे, तो आप सब कुछ डाल करने के लिए की जरूरत है आप चलाना चाहते हैं इससे पहले के बाद कुछ भी नहीं है रेखा जो ड्रॉ फ़ंक्शन को कॉल करती है।

0

सीएसएस के माध्यम से सरल तरीका।

https://jsfiddle.net/pablodarde/5hc6x3r4/

translate3d GPU पर चल हार्डवेयर त्वरण का उपयोग करता है। http://blog.teamtreehouse.com/increase-your-sites-performance-with-hardware-accelerated-css

एचटीएमएल

<div class="movingBox"></div> 

सीएसएस

.movingBox { 
    width: 100px; 
    height: 40px; 
    background: #999; 
    transform: translate3d(0,0,0); 
    transition: all 0.5s; 
} 

.moving { 
    transform: translate3d(200px,0,0); 
    background: #f00; 
} 

जावास्क्रिप्ट

const box = document.getElementsByClassName('movingBox')[0]; 

setTimeout(() => { 
    box.className += ' moving'; 
}, 1000); 
0

CustomAnimation एचटीएमएल तत्वों को एनिमेट करने के लिए एक छोटी सी मुक्ति है जो शुद्ध जेएस में लिखी गई है। आप इस libary का उपयोग कर सकते हैं।

+0

कृपया और बताएं। – aghilpro

+0

आप [कस्टमएनीमेशन] में उपलब्ध नमूने देख सकते हैं (https://github.com/SamantaChinmoy/CustomAnimation) repo। उदाहरण के लिए एक तत्व को एनिमेट करने के लिए, आपको निम्नलिखित पैटर्न में एनिमेट विधि को कॉल करना होगा। एनिमेट (elementObj, styleObj, अवधि); –

+0

हालांकि यह लिंक प्रश्न का उत्तर दे सकता है, लेकिन यहां उत्तर के आवश्यक हिस्सों को शामिल करना बेहतर है और संदर्भ के लिए लिंक प्रदान करना बेहतर है। लिंक किए गए पृष्ठ में परिवर्तन होने पर लिंक-केवल उत्तर अमान्य हो सकते हैं। – aghilpro

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