2011-04-02 14 views
46

मुझे डिस्प्ले के साथ एक div मिला है: कोई नहीं; अब मैं इसे दोनों का उपयोग करना चाहता हूं: फीडइन और स्लाइडडाउन एक साथ।jQuery fadeIn() और slideDown() को एक साथ कैसे चलाएं?

$(this).slideDown({duration: 'slow', queue: false}); 
$(this).fadeIn({duration: 'slow', queue: false}); 

div का चयन ठीक से किया जाता है। लेकिन जब मैं प्रभाव को ट्रिगर करता हूं, तो यह सब स्लाइडडाउन होता है। और अगर मैं सिर्फ स्लाइडडाउन हटा देता हूं तो मैं फीडइन देख सकता हूं, इसलिए वाक्यविन्यास में कुछ भी गलत नहीं है। लेकिन यह एनिमेशन दोनों को क्यों ट्रिगर नहीं करता है? height:0px साथ

+0

मैं इस एक बिट के लिए बाहर काम करने की कोशिश कर रहा हूँ। मुझे 'सही' जवाब नहीं मिला है, लेकिन यह आपकी मदद कर सकता है: $ ('bla')। स्लाइडडाउन मूल रूप से स्रोत में इस पर मानचित्र करता है: $ ('bla')। एनिमेट ({ऊंचाई: 'शो', पैडिंग टॉप: 'शो', पैडिंगबॉटम: 'शो', मार्जिन टॉप: 'शो', मार्जिनबॉटम: 'शो'}। तो आप इसे डाल सकते हैं और एनिमेट एक स्लाइडडाउन की तरह ही काम करेगा। – Brandon

+0

@iWebaholic: कृपया सही anser –

+0

चुनें कृपया चुनें @ स्वीकार्य उत्तर के रूप में pbierre का जवाब। अच्छा समाधान – earl3s

उत्तर

4

प्रारंभ और opacity:0; filter: alpha(opacity = 0) तो कार्रवाई पर कार्य करें:

$(this).stop().animate({ 
    height: 200, 
    opacity: 1 
}, 350); 

बदलें ऊंचाई (मैं 200 के लिए सेट) और अवधि (मैं 350 के लिए सेट) जो कुछ भी आप चाहते हैं।

140

उपयोग fadeIn() के बजाय animate():

$(this) 
    .css('opacity', 0) 
    .slideDown('slow') 
    .animate(
    { opacity: 1 }, 
    { queue: false, duration: 'slow' } 
); 
+7

यह उत्तर सही के रूप में चुना जाना चाहिए! पूरी तरह से काम करता है। धन्यवाद! –

+1

हाँ ... यह सही जवाब है।हालांकि, मैं "धीमी" एनीमेशन पर "तेज़" पसंद करता हूं, क्योंकि यूआई प्रतिक्रिया में थोड़ी देर में देरी उपयोगकर्ताओं को परेशान कर सकती है। – PhilNicholas

+1

शायद एक स्पष्टीकरण के बारे में अधिक क्यों कि वे दोनों एक बार में क्यों नहीं चल सकते हैं? निश्चित नहीं है कि इसे अभी तक सही उत्तर के रूप में क्यों चुना नहीं गया है। –

5

यहाँ मेरी समाधान है, आप इसे एक jQuery प्लगइन के रूप में उपयोग कर सकते हैं।

(function($) { 
    'use strict'; 
    // Sort us out with the options parameters 
    var getAnimOpts = function (a, b, c) { 
      if (!a) { return {duration: 'normal'}; } 
      if (!!c) { return {duration: a, easing: b, complete: c}; } 
      if (!!b) { return {duration: a, complete: b}; } 
      if (typeof a === 'object') { return a; } 
      return { duration: a }; 
     }, 
     getUnqueuedOpts = function (opts) { 
      return { 
       queue: false, 
       duration: opts.duration, 
       easing: opts.easing 
      }; 
     }; 
    // Declare our new effects 
    $.fn.showDown = function (a, b, c) { 
     var slideOpts = getAnimOpts(a, b, c), fadeOpts = getUnqueuedOpts(slideOpts); 
     $(this).hide().css('opacity', 0).slideDown(slideOpts).animate({ opacity: 1 }, fadeOpts); 
    }; 
    $.fn.hideUp = function (a, b, c) { 
     var slideOpts = getAnimOpts(a, b, c), fadeOpts = getUnqueuedOpts(slideOpts); 
     $(this).show().css('opacity', 1).slideUp(slideOpts).animate({ opacity: 0 }, fadeOpts); 
    }; 
}(jQuery)); 

अब आप इसका उपयोग उसी तरह कर सकते हैं जैसे आप jQuery के .fadeIn (या fadeOut) प्रभाव का उपयोग करेंगे।

// Show 
$('.alert').showDown('slow'); 
// Hide 
$('.alert').hideUp('fast', function() { 
    // Animation complete: '.alert' is now hidden 
}); 

यह हमारे तत्व की ऊंचाई को लुप्तप्राय प्रभाव के साथ बदल देगा।

यह originally posted on my blog था।

+0

+1 बहुत अच्छा है। मैंने '.css ('अस्पष्टता', 0) 'और' .css (' अस्पष्टता ', 1) हटा दिया, क्योंकि जब मैं' छुपाएं 'चाहता था, तब भी ऑब्जेक्ट अभी भी दिखाया गया था' अस्पष्टता 'दिखाया जा रहा है, सीधे 1 तक इससे छिपाने की कोशिश करने से पहले। – RoLYroLLs

+1

मुझे लगता है कि विधि कार्यों को अनुमति देने के लिए दोनों कार्यों को $ (यह) ... वापस करनी चाहिए। – Paul

0
 $(document).ready(function() { 
    $("#test").bind("click", function() { 
      setTimeout(function() { 
      $('#slidedown').slideDown("slow"); 
     }, 500); 
     $("#content").fadeOut(500); 
     $(this).stop().animate({ "opacity": "1" }, "slow"); 
     }); 
    }); 

यह फीका आउट है, लेकिन मुझे लगता है कि यह आपके बाद क्या है। कृपया उदाहरण को भी देखें: http://jsfiddle.net/oddacon/M44md/

0

अब CSS3 संक्रमण का उपयोग करना संभव है। यह बहुत लचीला समाधान प्राप्त करने की अनुमति देता है।

एचटीएमएल

<div id="btn">Click me</div> 
<div id="hidden"></div> 

सीएसएस

#hidden { 
    display: none; opacity: 0; height: 100px; background: red; 
    transition: opacity 600ms ease-in-out 0s; 
} 
#hidden.opened { 
    opacity: 1; 
} 

jQuery

$('#btn').click(function() { 
    var div = $('#hidden'); 
    if (! div.is(':animated')) { 
     div.slideToggle(600).toggleClass('opened'); 
    } 
}); 
1

अधिक आधुनिक समाधान जब आप एनिमेशन संयोजित करना चाहते हैं 'show' और 'hide' के मूल्यों का उपयोग करने के लिए है:

$('.show').on('click', function() { 
 
    $('.example').animate({ 
 
    opacity: 'show', 
 
    height: 'show', 
 
    marginTop: 'show', 
 
    marginBottom: 'show', 
 
    paddingTop: 'show', 
 
    paddingBottom: 'show' 
 
    }) 
 
}) 
 
$('.hide').on('click', function() { 
 
    $('.example').animate({ 
 
    opacity: 'hide', 
 
    height: 'hide', 
 
    marginTop: 'hide', 
 
    marginBottom: 'hide', 
 
    paddingTop: 'hide', 
 
    paddingBottom: 'hide' 
 
    }) 
 
})
.example { 
 
    background-color: blue; 
 
    height: 200px; 
 
    width: 200px; 
 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<p> 
 
    <button type="button" class="show">Show</button> 
 
    <button type="button" class="hide">Hide</button> 
 
</p> 
 
<div class="example"></div>

+0

बिल्कुल वही जो मुझे चाहिए, धन्यवाद! मैंने इसे चिकनी बनाने के लिए घुंघराले ब्रैकेट के अंत में 'धीमा "जोड़ा है। – iorgu

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