开发者

how to excecute Jquery functions in a linear fashion? (sequentially)

开发者 https://www.devze.com 2023-01-22 16:45 出处:网络
I am not sure how to describe this. I have a couple of divs on a page, something like: <div id=\"Content\">

I am not sure how to describe this. I have a couple of divs on a page, something like:

<div id="Content">
    <div id="SubContent" class="LoremIpsum">
        some lorem ipsum text here
    </div>

    <div id="SubContent" class="Shakespeare" style="display:none">
        Macbeth story here
    </div>
</div>

<a href="Javascript:Void(0);" onClick="ChangeStory">Change</a>

So now, When I click on that "Change" link, I want the LoremIpsum div to slide up, and AFTER it finishes sliding up, I want Shakespeare div to slide down.

Currently, I have:

function ChangeStory(){
    $('.LoremIpsum').slideUp(); 
$('.Shakespeare').slideDown();
}

Instead of the events happening one after the other, they are happening simultaneously. I tried to insert some timing delay but did not quite work out well. Any ide开发者_开发问答as on how to run them one after the other?

many thanks!


You can use the .slideUp() callback (all animations have them), like this:

function ChangeStory(){
  $('.LoremIpsum').slideUp(function() {
    $('.Shakespeare').slideDown();
  }); 
}

You can test it here. Or, just add a .delay() with the duration of the other animation, though this would only be preferred in certain situations:

function ChangeStory(){
  $('.LoremIpsum').slideUp();
  $('.Shakespeare').delay(400).slideDown();
}

Try that version here.


Also look at binding your handler unobtrusively, for example change your link to this:

<a href="#" class="ChangeStory">Change</a>

And your JavaScript to this:

$(function() {
  $("a.ChangeStory").click(function (e){
    $('.LoremIpsum').slideUp(function() {
      $('.Shakespeare').slideDown();
    }); 
    e.preventDefault(); //prevent scrolling to top
  });
});

You can test it out here.

0

精彩评论

暂无评论...
验证码 换一张
取 消

关注公众号