Book Image

jQuery 1.4 Animation Techniques: Beginners Guide

Book Image

jQuery 1.4 Animation Techniques: Beginners Guide

Overview of this book

Master animation in jQuery to produce slick and attractive interfaces that respond to your visitors' interactions jQuery is a cross-browser JavaScript library designed to simplify the client-side scripting of HTML, and is the most popular JavaScript library in use today. Using the features offered by jQuery, developers are able to create dynamic web pages. This book will act as a resource for you to create animation and advanced special effects in your web applications, by following the easy-to-understand steps mentioned in it.jQuery 1.4 Animation Techniques: Beginners Guide will allow you to master animation in jQuery to produce slick and attractive interfaces that respond to your visitors' interactions. You will learn everything you need to know about creating engaging and effective web page animations using jQuery. The book uses many examples and explains how to create animations using an easy, step-by-step, beginners guide approach. This book will provide you with... This book provides various examples that gradually build up the reader’s knowledge and practical experience in using the jQuery API to create stunning animations. The book starts off by explaining how animations make your user interface interactive and attractive. It explains the various methods used to make the element being animated appear or disappear. It provides a set of steps to create simple animations and show fading animations. You can later learn how to make complex animations by chaining different effects together as well as how to halt a currently running application. You will find out how to slide your animation elements and learn to create custom animations that can be complex and specialized. You will find out how to obtain and set up the jQuery UI— the official user interface library for jQuery. The book will tell you how to animate a page's background image, and will teach you how to make images scroll in a certain direction and at a certain speed depending on the movement of the mouse pointer
Table of Contents (19 chapters)
jQuery 1.4 Animation Techniques Beginner's Guide
Credits
Foreword
About the Author
About the Reviewers
www.PacktPub.com
Preface
Index

Time for action – creating an animated loader


In this example we'll create a simple animated loading indicator that we can start when a particular process is initiated, and stop once the process has completed.

  1. Open up the template file that we just looked at and add the following <button> to the <body> of the page (this should go before the <script> elements):

    <button id="go">Initiate the action</button>
  2. Next, in the empty function in the second <script> element at the bottom of the page, add the following code:

    var loader = $("<div></div>", {
        id: "loader"
      }).css("display", "none"),
      bar = $("<span></span>").css("opacity", 0.2),
      loadingInterval = null;
    
      for (var x = 0; x < 3; x++) {
      bar.clone().addClass("bar-" + x).appendTo(loader);
      }
    
      loader.insertAfter("#go");
    
      function runLoader() {
        var firstBar = loader.children(":first"),
        secondBar = loader.children().eq(1),
        thirdBar = loader.children(":last");
    
        firstBar.fadeTo("fast", 1, function(){
          firstBar.fadeTo("fast", 0.2, function() {
            secondBar.fadeTo("fast", 1, function() {
              secondBar.fadeTo("fast", 0.2, function() {
                thirdBar.fadeTo("fast", 1, function() {
                  thirdBar.fadeTo("fast", 0.2);
                });
              });
            });
          });
        });
      };
    
    $("#go").toggle(function() {
      loader.show();
      loadingInterval = setInterval(function() { runLoader(); }, 1200);
    }, function() {
      loader.hide();
      clearInterval(loadingInterval);
    });
  3. Save the file as loading.html in the main project folder (jquery-animation). Finally, we'll need to add a few basic styles to the example. Create a new file in your text editor and add to it the following code:

    #loader { margin:10px 0 0 36px; }
    #loader span {
      display:block; width:6px; float:left; margin-right:6px;
      border:1px solid #336633; position:relative;
      background-color:#ccffcc;
    }
    #loader .bar-0 { height:15px; bottom:-20px; }
    #loader .bar-1 { height:25px; bottom:-10px; }
    #loader .bar-2 { height:35px; margin-right:0; }
  4. Save this file in the css folder as loading.css.

What just happened?

The <button> hardcoded onto the page is used to show and hide the loading animation. This is done purely for the purpose of this example. In an actual implementation, we'd show the loading animation at the start of a load operation, when new content was being added to the page for example, and then hide it again once the operation was complete.

The first thing we do inside the outer function is set some variables. We create a new <div> element as a container for the loader, using an object literal as the second argument to the $() (jQuery()) method to give it an id of loader. We then set its style to display:none with jQuery's css() method so that it is not immediately visible.

We also create a new <span> element, which will be used as a template to create the three individual loading bars. We set its opacity to 0.2 (20% opaque), also using the css() method. jQuery normalizes this style for us so that it works correctly in Internet Explorer. The last variable, loadingInterval will be used to store the id of an interval so that we can clear the interval when we need to. We set this to null initially as the interval has not yet been set.

Once our variables have been defined and initialized, we then execute a short for loop, with just three iterations. Within this loop we clone the span element we created, give it a class name for styling purposes, and then append it to the container. Once the three loading bars have been added to the container, we insert the container after the <button>.

Next we define a function called runLoader. This is the function that will be repeatedly called by the interval. The function doesn't run until the button is clicked. Within this function we cache the selector for each of the three individual bars and then run a series of nested functions.

We first increase the first loading bar to full opacity using the fadeTo() jQuery animation method. This method takes a string indicating the speed of the animation as its first argument, the opacity that the element should be faded to as its second argument, and a callback function as the third argument. The callback function is executed as soon as the animation ends.

In the callback function, we then fade the first loading bar back to its original opacity of 0.2. We supply another callback function to this method call, and within this callback function we animate the second loading bar to full opacity, and then back to its original opacity. The process is repeated for the third loading bar.

Finally, we use the jQuery toggle() method to add two functions which will be executed alternately each time the <button> is clicked. In the first function, we show the loader and then set the interval that repeatedly calls the runLoader() function. In the second function, we hide the loader and clear the interval.

Pop quiz – basic animation with jQuery

  1. Thinking about what we discussed earlier regarding when and when not to use animations, when would be an appropriate time to use this animation?

    a. When there is a browser-intensive operation taking place

    b. When there is a delay between something being requested from the server and the request returning from the server, but where the processing required by the browser is minimal

    c. As an alternative to a Flash animation

    d. When animated GIF images are not supported

  2. What arguments are used with jQuery's fadeTo() method?

    a. An integer representing the ending opacity

    b. An object containing configuration options for the animation

    c. A string or integer representing the speed or duration of the animation as the first argument, the ending opacity of the target element, and optionally a callback function to be executed when the animation ends

    d. No arguments are required

Have a go hero – extending the loading animation

I mentioned that we could use the loading animation when making requests and waiting for a response. Try using it with jQuery's AJAX methods, showing the loader just before making the request, and hiding it again once the response has been processed. The JSONP example, which retrieves images of cats, on the jQuery website at http://api.jquery.com/jQuery.getJSON/) makes a great test case, although depending on the speed of your connection, the loader may not be visible for very long.