Wednesday, November 11, 2009

AJAXified jQuery Flip Plugin

I was talking to a friend a couple of weeks ago and he was looking for some plugin that would visually flip over a section of the screen (like flipping an index card). He had a master/detail layout and wanted to be able to click on a link from the master, the content would flip, and then the detail content would be displayed on the flipped side.

I recommended the Flip! jQuery Plugin since it was the closet thing I was aware that would do this effect without WPF, Flash, or Silverlight. Since the plugin supports several custom events (onBefore, onAnimation, onEnd) I figured that on the onBefore event an AJAX call could be initiated and the callback content can be inserted onto the reverse side of the master.

Here is a sample application that I put together last night. The app requests your twitter username, flips, retrieves the latest tweet using JSONP from Twitter for that username, and then displays it on the flip side.

AJAXified jQuery Flip! Plugin

I have hosted it on JsBin so that you can view the code, run the code, and edit the code to your heart’s content ;) I have also listed the code here below.

<!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" xml:lang="en" lang="en"> 
<head> 
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js"></script> 
<script src="http://lab.smashup.it/flip/js/jquery-ui-1.7.2.custom.min.js"></script> 
<script src="http://lab.smashup.it/flip/js/jquery.flip.min.js"></script> 
<script type='text/javascript' src='http://getfirebug.com/releases/lite/1.2/firebug-lite-compressed.js'></script> 
<script type="text/javascript"> 
firebug.env.debug = false;   // open minimized 
firebug.env.detectFirebug = true; // do not initialize if Firebug is active 
</script> 
<title>AJAXified jQuery Flip! Plugin</title> 
<meta http-equiv="Content-type" content="text/html; charset=utf-8" /> 
<style type="text/css" media="screen"> 
.flipBox { 
  width: 500px; 
  height: 200px; 
  background-color: #F6EECA; 
  font-family: Helvetica; 
  color: #000000; 
  text-align: left; 
  padding: 15px; 
}  
</style> 
<script type="text/javascript"> 
$(function() { 
   $('#flip').live('click', function() { 
      console.log('flip click'); 
      $("#front").flip({ 
         direction: 'tb', 
         content: $('#back'), 
         color: '#C8E3DC', 
         onBefore: function(){ 
            console.log('before starting the animation'); 
            var twitterUsername = $('#twitterUsername').val(); 
            var url = 'http://twitter.com/status/user_timeline/' + twitterUsername + '.json?count=1&callback=?'; 
            $.getJSON(url, function(data) { 
               console.log('data: %o', data); 
               var twitterList = '<ul>'; 
               $.each(data, function(i, item) { 
                  console.log(item.text); 
                  twitterList += '<li>' + item.text + '</li>'; 
               }); 
               twitterList += '</ul>'; 
               $('#backAjax').html(twitterList); 
               $('#backTitle').text("Here is " + twitterUsername + "'s Lastest Tweet..."); 
            });             
         }, 
         onAnimation: function(){ 
            console.log('in the middle of the animation'); 
         }, 
         onEnd: function(){ 
            console.log('when the animation has already ended'); 
            $('.revert').live('click', function() { 
              $('#front').revertFlip(); 
            });             
         } 
      }); 
   }); 
}); 
</script> 
</head> 
<body> 
   <div id="front" class="flipBox"> 
      <span id="frontStatic">Enter Twitter Username</span> 
      <input id='twitterUsername' type='text'/> 
      <button id="flip">Submit</button> 
   </div> 
   <div id="back" class="flipBox" style="display: none"> 
      <span id="backTitle">Here is Your Latest Tweet...</span> 
      <span id="backAjax">Back AJAX</span> 
      <button class="revert">Return</button> 
   </div> 
   <a href="http://jsbin.com/ifoga/edit" target="_blank">View Source Code &amp; Edit</a> 
</body> 
</html>

I hope you found this plugin interesting. I had a fun time putting it together ;)

 cooltext439925164 cooltext439925034

No comments:

Post a Comment