2011-08-09 23 views
33

keyframes का उपयोग करके, डीओएम में जितनी जल्दी हो सके तत्व को एनिमेट करना संभव है।CSS3 - डीओएम हटाने पर संक्रमण

@-moz-keyframes fadeIn { 
    from {opacity:0;} 
    to {opacity:1;} 
} 

@-webkit-keyframes fadeIn { 
    from {opacity:0;} 
    to {opacity:1;} 
} 

@keyframes fadeIn { 
    from {opacity:0;} 
    to {opacity:1;} 
} 

#box { 
    -webkit-animation: fadeIn 500ms; 
    -moz-animation: fadeIn 500ms; 
    animation: fadeIn 500ms; 
} 

है वहाँ कुछ इसी तरह की सुविधा उपलब्ध एक एनीमेशन एक तत्व को लागू करने के लिए (सीएसएस, कोई जावास्क्रिप्ट के माध्यम से) सही से पहले यह डोम से निकाल दिया जाता: कुछ नमूने यहां सीएसएस है? नीचे एक जेएसफ़िल्ड है जिसे मैंने इस विचार के साथ खेलने के लिए बनाया है; यदि आप समाधान के बारे में जानते हैं तो इसे फोर्क करने के लिए स्वतंत्र महसूस करें।

jsFiddle - http://jsfiddle.net/skoshy/dLdFZ/

उत्तर

12

एक और सीएसएस fadeOut बुलाया एनीमेशन बनाएँ, का कहना है। फिर जब आप तत्व निकालना चाहते हैं, कि नई एनीमेशन के तत्व पर animation संपत्ति बदलने के लिए, और एक बार एनीमेशन किया जाता है animationend घटना का उपयोग तत्व की वास्तविक हटाने को गति प्रदान करने:

$('.hide').click(function() { 
    if (!$(this).hasClass('disabled')) { 
     $('#fill').css('-webkit-animation', 'fadeOut 500ms'); 
     $('#fill').bind('webkitAnimationEnd',function(){ 
      $('#fill').remove(); 
      $('.show, .hide').toggleClass('disabled'); 
     }); 
    } 
}); 

See also my updated version of your jsFiddle. यही काम करता है मेरे लिए सफारी में, कम से कम।

ठीक है, आपको उस .css() के बजाय कक्षा का उपयोग करना चाहिए।

मुझे नहीं लगता कि jQuery के पास अभी तक सीएसएस एनिमेशन के लिए कोई "वास्तविक" समर्थन है, इसलिए मुझे नहीं लगता कि आप webkitAnimationEnd से छुटकारा पा सकते हैं। फ़ायरफ़ॉक्स में इसे सिर्फ animationend कहा जाता है।

मुझे यकीन है कि बस सीएसएस में ऐसा करने का कोई तरीका नहीं है।

+0

यह सुंदर चतुर है, लेकिन अगर मैं एक जावास्क्रिप्ट मार्ग जा रहा हूँ मैं सिर्फ 'कह सकते हैं $ ('# । भरने ') fadeOut() '। जो मैं वास्तव में खोज रहा हूं वह एक सीएसएस केवल समाधान है - मुझे पता नहीं था कि जब तक मैंने कई फ़ोरम नहीं देखे, तब तक मुझे तत्व में लुप्त होना संभव था, इसलिए मुझे उम्मीद है कि किसी को भी तत्व को कैसे फीका जाए। – Steve

+6

लेकिन '.fadeOut()' एनीमेशन करने के लिए जावास्क्रिप्ट का उपयोग करता है।यह वास्तव में एनीमेशन के लिए सीएसएस का उपयोग करता है। यह सही समय पर ट्रिगर करने के लिए जावास्क्रिप्ट का उपयोग करता है। और चूंकि आप वास्तव में तत्व को सम्मिलित/निकालने के लिए जावास्क्रिप्ट का उपयोग कर रहे हैं, "केवल सीएसएस" मनमाने ढंग से है। सीएसएस में कुछ इसे हटाने से ठीक पहले ट्रिगर करने का कोई तरीका नहीं है। यदि आपने लिंक में "मुझे क्लिक करें" divs को बदल दिया है, तो आप fading out को ट्रिगर करने के लिए चयनकर्ता के रूप में '.hide: active + # fill' का उपयोग करने में सक्षम हो सकते हैं, लेकिन फिर भी आपको वास्तव में 'एनीमेशन' ईवेंट की आवश्यकता होगी जब यह फीका हो जाता है तो तत्व को हटा दें। – mercator

+0

@ एसके .: संक्षेप में, नहीं। सीएसएस तत्वों को जोड़ने और हटाने जैसे डीओएम हेरफेर से संबंधित नहीं है। फेडइन चाल काम करता है क्योंकि एनीमेशन तब होता है जब तत्व पहले दिखाई देता है क्योंकि यह पहला क्षण है जब यह हो सकता है। किसी तत्व को फेडऑट को जानने के लिए, उसे यह जानना होगा कि इसे हटाया जा रहा है, और यह जावास्क्रिप्ट के साथ ही संभव है। और जैसा कि मर्केटर ने कहा, चूंकि आप पहले से ही तत्व को हटाने के लिए जावास्क्रिप्ट का उपयोग कर रहे हैं, इसलिए "सीएसएस-केवल" आवश्यकता मनमानी है। – joequincy

6

मैं जावास्क्रिप्ट के लिए एक घटक लाइब्रेरी पर काम कर रहा हूं और मैं स्वयं इस समस्या में भाग गया। मुझे समस्या पर जावास्क्रिप्ट का एक टन फेंकने में सक्षम होने का लाभ है, लेकिन चूंकि आप पहले से ही थोड़ा सा उपयोग कर रहे हैं, तो एक शानदार तरीके से अपमानजनक समाधान के लिए निम्न पर विचार करें:

किसी भी घटक/डोम नोड को हटाने पर, जोड़ें 'हटाने' नामक एक वर्ग।

फिर सीएसएस में आप अपने एनीमेशन उस वर्ग का उपयोग कर परिभाषित कर सकते हैं:

.someElement.removing { 
    -webkit-animation: fadeOut 500ms; 
    -moz-animation: fadeOut 500ms; 
    animation: fadeOut 500ms; 
} 

और जावास्क्रिप्ट में वापस आ गया है, तो आप 'शब्द को हटा' वर्ग को जोड़ने के बाद, आप 'एनीमेशन के लिए जांच करने के लिए सक्षम होना चाहिए 'सीएसएस संपत्ति, और यदि यह मौजूद है, तो आप जानते हैं कि आप' एनीमेशन एंड 'पर हुक कर सकते हैं और यदि ऐसा नहीं होता है, तो तुरंत तत्व को हटा दें। मुझे कुछ समय पहले परीक्षण करना याद है, इसे काम करना चाहिए; मैं देखूंगा कि क्या मैं उदाहरण कोड खोद सकता हूं।

अद्यतन: मैं इस तकनीक को ऊपर खोदा और jQuery के लिए एक बहुत अच्छा प्लगइन है कि आप डोम तत्वों को हटाया जा रहा है के लिए CSS3 के एनिमेशन का उपयोग करने की अनुमति देता है लेखन शुरू कर दिया है। कोई अतिरिक्त जावास्क्रिप्ट आवश्यक नहीं: http://www.github.com/arthur5005/jquery.motionnotion

यह बहुत ही प्रयोगात्मक है, अपने जोखिम पर उपयोग करें, लेकिन कुछ मदद और प्रतिक्रिया पसंद करेंगे। :)

+0

बहुत रोचक। जब आप 'एपेंड() 'और' प्रीपेन्ड() 'जैसे अन्य कार्यों के लिए समर्थन जोड़ते हैं, तो मैं इसका उपयोग करना शुरू कर दूंगा। यह https://github.com/ai/transition-events से तुलना कैसे करता है? –

+1

अरे स्टीव, यह ज्यादातर अन्य लोगों के लिए है, मैंने प्लगइन को ऐपेंड() और प्रीपेन्ड() का समर्थन करने के लिए अपडेट किया है। :) –

-4
fadein और fadeout आप सीएसएस बदलाव नहीं सीएसएस एनिमेशन का उपयोग करना चाहिए की तरह कुछ के लिए आदर्श

..

+4

एनीमेशन डीओएम सम्मिलन पर काम करता है, संक्रमण नहीं करता है –

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