7

I have an event listener that calls two animation actions. Unfortunately their starts are staggered by a small amount (e.g. the first in the function starts first).

Does anyone know a way to properly sync them up?

Here's my code:

$("#nav ul li a").hover( function(){ $(lastBlock).children("div").animate({width: "0px"}, { queue:false, duration:400, easing:"swing" }); $(this).children("div").animate({width: maxWidth+"px"}, { queue:false, duration:400, easing:"swing"}); lastBlock = this; } ); 

Because the first animation runs slightly before the second, it causes the overall width to become momentarily unequal, which looks a bit funky.

2 Answers 2

6

There was a recent disussion about this exact topic on the jQuery dev list. They created a few test cases you might wanna look at. Specially the Johns test.

Here's the discussion topic btw.

Sign up to request clarification or add additional context in comments.

1 Comment

By way of a follow up: It's showing a lot of promise, but currently has a couple of problems.
2

The trick is to have a single interval/callback in which all elements are updated. You can find an example in my post here:

Can I implement a callback with each animation step in jQuery?

What you end up is basically:

var el1 = $("#element1"); var el2 = $("#element2"); var animation = new AnimationTimeline( { easing: "swing" , onstep: function( stepValue, animprops ) { // This is called for every animation frame. Set the elements: el1.css( { left: ..., top: ... } ); el2.css( { left: ..., top: ... } ); } }); // And start it. animation.start(); 

Comments

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.