jQuery: Transitioning AJAX Content into view with $.animate()
Published on Sep 8, 2011 by Jamie MunroAs a user of the Internet, I enjoy slick looking features that help make my experience look cool and seem fast or seamless. A nice trick to include this type of functionality is to perform a transition of new content using jQuery's $.animate() function.
Before starting, I must profess that I am not a designer, so don't expect this to be pretty – just functional! Once you have the basic functionality down, it can be prettied up quickly.
- You have some basic jQuery experience and understand the basics of an AJAX request
The purpose of this process is to have a container with the current content a user is viewing. Just to the right of this content should be another container (just a hint of it anyways) that the new content will be loaded into. Once the AJAX request completes, the content will be embedded into the right container. Once embedded, this container will be transitioned into view and the content will be swapped.
Here is an example demonstration of what I mean (I hope when I do a re-design of this site I remember to update this screenshot; otherwise, this is what the website used to look like).
Again, I'll leave the CSS with you, but the basic HTML goes as follows:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <title>Your title</title> </head> <body> <div id="container"> <div id="header"> <h1>Your title</h1> </div> <div id="content"> <div id="active-content"> Current content goes here. <a href="#" onclick="return slideMe()">Slide new content</a> </div> <div id="ajax-content"></div> </div> <div id="footer"> Copyright you </div> </div> </body> </html>
The basics to this HTML is that there is a container called content. This will be the outer container. Inside of here are two div tags. The first, active-content, is what will house the currently viewed content. The second div, ajax-content, should be empty – unless you wish to include some "sneak peek".
Next the, jQuery code needs to be included. This should be placed above the end body tag.
Firstly, it performs an AJAX call using jQuery's $.load() function that will automatically append the results of the AJAX call to the element specified, in this case, an element with an id of ajax-content. Once the AJAX request is completed, the fun begins.
The ajax-content div is converted to an absolute positioned div, so it can be animated from right-to-left. Because it is absolutely positioned, the right property is set to 20px – so that it stays in the same spot. Now it is time to run the $.animate() function. The animation is applied to the ajax-content div to animate the div to the left property of 0 in a linear fashion over a one second period (1,000 milliseconds).
Finally, when the animation is complete, I swap the ajax-content into the active-content. The ajax-content content is then reset to nothing and its position property is changed back to relative so it will return back to the right of the current content.
Here is a basic example of this process.
Once you add some design flare to this example, you can begin making your content look like it is pre-loaded an animate it in place through AJAX and jQuery's $.animate() function.