2010-06-21 17 views
36

के अंत में एनीमेशन को रोक नहीं सकता है, मैं मिनट में एक सीएसएस एनीमेशन बना रहा हूं, और इसमें मैं सामान ले रहा हूं और जब तक कि उपयोगकर्ता अपने माउस को दूर नहीं ले जाता तब तक यह अंत स्थिति में रहना चाहता है।एक चक्र

body { 
    background: url('osx.jpg'); 
    padding: 0; 
    margin: 0; 
    line-height: 60px; 
} 

@-webkit-keyframes item1 { 
    0% { bottom: -120px; left: 0px; } 
    10% { bottom: -40px; left: 10px; -webkit-transform: rotate(5deg); } 
    100% { bottom: -40px; left: 10px; -webkit-transform: rotate(5deg); } 
    } 

@-webkit-keyframes item2 { 
    0% { bottom: -120px; left: 0px; } 
    10% { bottom: 60px; left: 20px; -webkit-transform: rotate(7deg); } 
    100% { bottom: 60px; left: 20px; -webkit-transform: rotate(7deg); } 
} 

@-webkit-keyframes item3 { 
    0% { bottom: -120px; left: 0px; } 
    10% { bottom: 160px; left: 30px; -webkit-transform: rotate(9deg); } 
    100% { bottom: 160px; left: 30px; -webkit-transform: rotate(9deg); } 
} 

    div { 
    position: relative; 
    } 
#folder { 
    width: 120px; 
    margin: 0px auto; 
} 

#folder > div { 
    position: absolute; 
} 

#folder:hover > div:nth-of-type(1) { 
    -webkit-animation-name: item1; 
    -webkit-animation-duration: 10s; 
} 

#folder:hover > div:nth-of-type(2) { 
    -webkit-animation-name: item2; 
    -webkit-animation-duration: 10s; 
} 

#folder:hover > div:nth-of-type(3) { 
    -webkit-animation-name: item3; 
    -webkit-animation-duration: 10s; 
} 

जब भी एनीमेशन समाप्त होता है, तो यह केवल खुद को दोहराता है। मैं केवल एक बार ऐसा करना चाहता हूं और जब तक उपयोगकर्ता दूर नहीं जाता तब तक यह रहना चाहिए। मैंने कल्पना से रोके हुए सामान का उपयोग करने की कोशिश की लेकिन यह काम नहीं करता क्योंकि मैं इसकी अपेक्षा करता हूं। किसी भी मदद की सराहना की है। धन्यवाद। :)

उत्तर

85

निम्नलिखित टिप्पणी मेरे लिए काम किया। धन्यवाद माइकल

"आप एनीमेशन के अंत में एनीमेशन राज्य फ्रीज करने के भरण-मोड जोड़ने की जरूरत है।

-webkit-animation-fill-mode: forwards; 

forwards अंतिम फ्रेम के राज्य में एनीमेशन छोड़ देता है

backwards पत्ते शुरू में एनीमेशन

+1

यह काम किया! धन्यवाद! –

+0

मुझे पता है कि यह थोड़ा देर हो चुकी है, लेकिन वास्तव में सही तरीका एनीमेशन-प्ले-स्टेट है: https://developer.mozilla.org/en-US/docs/Web/CSS/animation-play-state – Marco

0

इस प्रयास करें:

-webkit-animation-duration: 10s, 10s; 

:)

+0

10 सेकंड से अधिक एनिमेट करेगा और 10 सेकंड से अधिक समय तक छोड़ा जाएगा। –

+0

आपके लिए काम किया? –

+0

अभी भी कुछ भी नहीं, मैंने एनीमेशन को वास्तव में लंबे समय तक (10,000 के दशक की तरह) बनाने का फैसला किया ताकि उपयोगकर्ताओं को उस समय के लिए उस पर होवर करने की संभावना न हो; डी – Johnny

1

css3 एनिमेशन एनीमेशन के अंत में डिफ़ॉल्ट शैली पर रीसेट। आप जावास्क्रिप्ट के साथ कुछ कोशिश कर सकते हैं:

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

document.getElementById('yourdiv').addEventListener(
    'webkitAnimationEnd', 
    function(){ 
     document.getElementById('yourdiv').style.backgroundPosition = '0px 0px'; 
     document.getElementById('yourdiv').style.webkitAnimationName = 'none'; 
    }, 
    false 
); 
+0

यह सच है, लेकिन मैं जो प्रयोग कर रहा था वह कोशिश करना था और बस सीएसएस के साथ करो। कोशिश करने के लिए धन्यवाद – Johnny

+5

एनीमेशन के अंत में एनीमेशन स्थिति को फ्रीज करने के लिए आपको भरने-मोड को जोड़ने की आवश्यकता है। "-वेबकिट-एनीमेशन-फिल-मोड: आगे" आपको एनीमेशन को बहुत लंबा नहीं बनाना चाहिए - जो आपके उपयोगकर्ताओं को सीपीयू करेगा - सीएसएस एनिमेशन बहुत सीपीयू गहन हैं। –

+0

@ माइकल दिलचस्प! इसके लिए धन्यवाद, मुझे नहीं पता था कि यह अस्तित्व में है। मैं इसे आजमाउंगा और निश्चित रूप से इसे अपनी अगली परियोजनाओं में उपयोग करूँगा। – Stef

2

यदि मैं सही तरीके से प्रश्न समझता हूं, तो ऐसा लगता है कि आपको पुनरावृत्ति को '1' पर सेट करने की आवश्यकता है।

-webkit-animation-iteration-count: 1; 
+0

वह था, धन्यवाद एक गुच्छा! –

8

शायद ज़रुरत पड़े अपने एनीमेशन अभी भी पहली फ्रेम करने के लिए रीसेट करता है, आदेश जिसमें आप सीएसएस की घोषणा के साथ सावधान रहना:

यह ठीक काम कर रहा है:

animation: yourAnimationName 1s; 
    animation-fill-mode: forwards; 

यह (पहली फ्रेम करने के लिए रीसेट) नहीं होगा:

animation-fill-mode: forwards; 
    animation: yourAnimationName 1s; 

ट्रिकी!

+0

धन्यवाद! ऐसा क्यों है? – mariachimike

+0

ऐसा इसलिए होता है क्योंकि 'एनीमेशन' सभी 'एनीमेशन- * गुणों और सेटिंग 'एनीमेशन' के लिए लघुरूप है, सभी 'एनीमेशन- * गुणों को ओवरराइट करेगा। यह व्यवहार अन्य शॉर्टेंड (जैसे 'पृष्ठभूमि' या 'सीमा') के समान है। यदि आप 'एनीमेशन' शॉर्टेंड का उपयोग करते हैं और भरने मोड को परिभाषित नहीं करते हैं, तो डिफ़ॉल्ट रूप से 'none' का उपयोग नहीं किया जाएगा। –

+0

ग्रेट प्वाइंट! मुझे कोई संकेत नहीं था कि यह मेरे साथ क्यों हो रहा था! –

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