ठीक है, मैं एक ठोस एक हेक्टेयर के साथ आने के बाद एक साधारण समाधान के साथ आया था।
सरल समाधान मैं पहली जगह में साथ आए हैं चाहिए को हटाने किसी भी अतिरिक्त जोड़ा कक्षाएं ajax
कॉल करने से पहले था, मुझे ajax
ब्लॉक के भीतर ऐसा करने पर बहुत ध्यान केंद्रित हुआ और निश्चित रूप से काम नहीं किया, लेकिन जब तक मैंने दूसरे समाधान के साथ खेलना शुरू नहीं किया, मैंने कभी कोशिश नहीं की। बल्कि इसके अंदर होने से
var alert_el = $('#top_notify').find('.alert');
... ajax
कॉल ऊपर,:
किसी भी तरह से, सरल समाधान बस इस कोड बढ़ रहा है।
तो यह तहत सीधे इस जोड़ने:
function myFunc() {
// Set file to prepare our data
var loadUrl = "https://crossorigin.me/http://codepen.io/gutterboy/pen/ObjExz.html";
var alert_el = $('#top_notify').find('.alert');
alert_el.removeClass('visible alert-success alert-info alert-danger alert-warning');
// Run request
getAjaxData(loadUrl, null, 'POST', 'html')
.done(function(response) {
// Update msg in alert box
alert_el.text(response);
alert_el.addClass('alert-success');
// Slide in alert box
alert_el.addClass('visible');
})
.fail(function() {
alert('Problem!!');
});
// End
}
CodePen:
alert_el.removeClass('visible alert-success alert-info alert-danger alert-warning');
पूर्ण समारोह कोड किया जा रहा है के साथ
http://codepen.io/gutterboy/pen/xRXbXy
अन्य समाधान मैं के साथ आया था, जबकि वास्तव में अब जरूरी नहीं है, मैंने सोचा कि मैं इसे किसी भी तरह से पोस्ट कर दूंगा क्योंकि यह मेरे लिए (या किसी और) में आसान है भविष्य।
यह के बाद एनीमेशन समाप्त हो गया है visible
वर्ग को दूर नहीं करता लेकिन visible
वर्ग (के रूप में वहाँ कोई रास्ता नहीं है कि मैं के बारे में पता जे एस सचेत करने के लिए इसके पूर्ण होने पर है) - जो मैं यदि का नाम बदल जाएगा आप इस विधि का उपयोग - कोई नई शैलियों को नहीं जोड़ते हैं, यह सिर्फ एनीमेशन चलाता है। ,
जावास्क्रिप्ट ऊपर समाधान के रूप में एक ही रहता है यह सीएसएस में सब है:
यहाँ है कैसे मैंने किया।
टीएलडीआर;
असल में रनटाइम के दौरान विभिन्न राज्यों को नियंत्रित करने के लिए मूल रूप से एकाधिक सीएसएस एनिमेशन का उपयोग करता है; नीचे कोड कोड।
.visible
कक्षा में परिवर्तन और @keyframes
के अतिरिक्त परिवर्तन।
.visible वर्ग:
&.visible {
animation: slideDown 0.8s 0s, keepThere 3s 0.8s, fadeAway 1s 3.8s;
}
आप देख सकते हैं कि हम मिल गया है किसी भी अतिरिक्त स्टाइल यहाँ से छुटकारा - यह जब एनीमेशन किया जाता है, यह अनिवार्य रूप से फिर सेट करता है वापस सामान्य, है जिसका अर्थ है हमें क्या चाहिऐ।
अब, चलो नीचे इस कोड को तोड़ने करते हैं:
हम 3 अलग एनिमेशन यहाँ चल रहे हैं और यह नोट करना वे एक के बाद एक नहीं चला महत्वपूर्ण है - जिसका अर्थ है कि वे जब तक एक यह जब तक समाप्त हो गया है प्रतीक्षा मत करो अगले एक को शुरू करता है, इसलिए हमें delay
सेटिंग्स क्यों शामिल करने की आवश्यकता है।
तो पहले हम slideDown
एनीमेशन के साथ शुरू:
slideDown 0.8s 0s
यदि आप सीएसएस में एनिमेशन के लिए नए हैं तो मूल रूप से क्या करता है 0s
की देरी सेट से पहले यह चल रहा है और एनीमेशन रन शुरू होता है
@keyframes slideDown {
0% {
transform: translateY(-100%);
}
100% {
transform: translateY(0%);
}
}
तो, बहुत सरल है, बस उसे नीचेसे स्लाइड transform
साथ: 0.8s
के लिए, और इस एनीमेशन हैसे 0%
और यह एनीमेशन 0.8s
लेता है जैसा कि हम इस एनीमेशन में हमारे कॉल में सेट करते हैं।
अब, मैं इस 3 सेकंड के लिए दिखाई रहने के लिए इससे पहले कि यह दूर नहीं हो पाती शुरू कर दिया था, लेकिन हम एक समस्या है; एक बार जब एनीमेशन समाप्त हो जाता है तो यह वापस मानक स्टाइल पर जाता है, जो हमारे मामले में इसका मतलब है क्योंकि यह transform: translateY(-100%)
पर वापस जाता है क्योंकि हमारे पास .visible
कक्षा में कोई अतिरिक्त शैलियों नहीं है, और हम तब तक कोई अतिरिक्त शैलियों नहीं डाल सकते हम रीसेट करने में सक्षम नहीं होंगे, यह वापस मूल स्थिति (शैली के अनुसार) पर होगा।
लेकिन हम क्या करते हैं? fadeAway
एनीमेशन किसी अन्य 3 सेकंड के लिए शुरू नहीं होता है और इस समय इसमें फीका दूर करने के लिए कुछ भी नहीं है (ठीक है, लेकिन आप इसे छुपाए हुए के रूप में नहीं देख सकते हैं)।
उस समाधान का समाधान एक और एनीमेशन जोड़ रहा था - जो तकनीकी रूप से कुछ भी वास्तव में एनिमेट नहीं करता है, यह fadeAway
एनीमेशन शुरू होने तक इसे तब तक दिखाई देता है।
है यही कारण है कि जहां हम तक कैसे पहुंचे:
keepThere 3s 0.8s
अब, हमारा fadeAway
एनीमेशन की सेटिंग याद कर रहे हैं: fadeAway 1s 3.8s
इसका मतलब यह है कि हम 3 सेकंड है कि इससे पहले कि इस एनीमेशन शुरू और इसलिए पहले जा रहा है हम इसके साथ किसी भी स्टाइल को नियंत्रित कर सकते हैं।
ताकि जहां इन पैरामीटर मान में आता है - हम 0.8s
को देरी सेट करें जिससे keepThere
एनीमेशन शुरू नहीं करता है जब तक slideDown
एक समाप्त हो गया है; फिर हम fadeAway
एनीमेशन शुरू होता है जब तक प्रतीक्षा समय के लिए मुकाबला करने के लिए 3s
के लिए अवधि निर्धारित है, और इस keepThere
एनीमेशन है:
@keyframes keepThere {
0%, 100% {
transform: translateY(0%);
}
}
के बाद से यह एक ही आरंभ और अंत स्टाइल हम 0%, 100%
में से एक चयनकर्ता में यह गठबंधन है और जैसा कि आप देख सकते हैं, यह वही करता है जो यह करता है, 3s
की निर्धारित अवधि के लिए तत्व को दृश्यमान रखता है जब तक हम fadeAway
एनीमेशन के साथ स्टाइल को नियंत्रित नहीं कर सकते।
मुझे लगता है कि तकनीकी रूप से आप अगर तुम क्या% 3 सेकंड के बराबर होती है पर गणित और इसलिए पता है जब तत्व दूर fading शुरू करना चाहती fadeAway
एनीमेशन में इस कार्यक्षमता जोड़ सकता। अब
fadeAway 1s 3.8s
के रूप में हम ऊपर चर्चा की, हम पहले से ही 0.8s
चलाने के लिए slideDown
एनीमेशन अनुमति देने के लिए ऑफसेट और कारण है कि हम delay
3.8s
को निर्धारित किया है पता है,:
अन्त में हम fadeAway
एनीमेशन है एक अतिरिक्त 3s
देरी है क्योंकि हम कितना समय तक तत्व को तब तक दिखाना चाहते हैं जब तक कि यह समाप्त हो जाता है और फिर निश्चित रूप से फीका 1s
पूरा करने के लिए लेता है।
इस के लिए एनीमेशन है:
@keyframes fadeAway {
0%, 100% {
transform: translateY(0%);
}
0% {
opacity: 1;
}
100% {
opacity: 0;
}
}
अब, keepThere
एनीमेशन पूरा कर लिया है के बाद से, हम तत्व दिखाई रखने के लिए इतना फीका कुछ दिखाई वास्तव में दूर नहीं हो पाती है सुनिश्चित करने के लिए है, इसलिए हम है शुरुआत से शुरू करने के लिए शैली के रूप में शैली transform: translateY(0%);
को शामिल करना सुनिश्चित करें; उसके बाद यह स्पष्ट है कि यह क्या कर रहा है मुझे लगता है। निश्चित रूप से फिरhttp://codepen.io/gutterboy/pen/QGqwBg
इसे फिर से चलाने के लिए वर्ग फिर से जोड़े जाने के लिए है सक्षम होने के लिए है और इसलिए है कि था:
यह सब एक साथ रखो और आपको मिलता है:
.top-notify {
position: fixed;
top: 0;
width: 100%;
z-index: 9999;
.content {
text-align: center;
background-color: transparent;
transform-style: preserve-3d;
}
.alert {
display: inline-block;
transform: translateY(-100%);
min-width: 250px;
max-width: 500px;
border-top-left-radius: 0;
border-top-right-radius: 0;
&.visible {
animation: slideDown 0.8s 0s, keepThere 3s 0.8s, fadeAway 1s 3.8s;
}
}
}
@keyframes slideDown {
0% {
transform: translateY(-100%);
}
100% {
transform: translateY(0%);
}
}
@keyframes keepThere {
0%, 100% {
transform: translateY(0%);
}
}
@keyframes fadeAway {
0%, 100% {
transform: translateY(0%);
}
0% {
opacity: 1;
}
100% {
opacity: 0;
}
}
CodePen प्रत्येक रन (एजेक्स कॉल से पहले) की शुरुआत में .visible
कक्षा को हटाने का उद्देश्य और फिर जब यह AJAX कॉल के दौरान फिर से जोड़ा जाता है तो चलाता है। लिंक है कि मुझे इस पथ का नेतृत्व नीचे साझा करने के लिए @Nathaniel फ्लिक करने के लिए
धन्यवाद ठीक है :)
के साथ शुरू हो, उम्मीद है कि किसी देखकर के रूप में मैं अब उस विकल्प का उपयोग करने के लिए जा रहा हूँ के लिए काम में आता हा!
क्या आपने सोचा कि शायद दूसरी अधिसूचना के लिए एक नया उदाहरण फायर कर रहा है और उन्हें स्क्रीन पर लंबवत रूप से ढेर कर रहा है? –
यह आलेख थोड़ा पुराना है, लेकिन फिर भी यहां लागू हो सकता है: https://css-tricks.com/pop-from-top-notification/ –
@NathanielFlick Well मैं सभी मामलों के लिए एक ही अधिसूचना बॉक्स का उपयोग करना पसंद करूंगा अतिरिक्त बनाने के बजाय; मुझे लगता है कि यह एक विकल्प है हालांकि। लिंक के लिए भी धन्यवाद। – Brett