waitbar

by maxim75

HTML

<html>
<head>
  <meta charset="utf-8" />
  <title></title>
  <!--<link href="mstyle.css" rel="stylesheet" type="text/css" />-->
<link href="http://twitter.github.com/bootstrap/assets/css/bootstrap.css" rel="stylesheet" type="text/css" />
<link href="http://twitter.github.com/bootstrap/assets/css/bootstrap-responsive.css" rel="stylesheet" type="text/css" />

  <style>

  </style>
</head>
<body>
    
  <script src="http://code.jquery.com/jquery-1.8.0.js"></script>
  <script src="http://cdnjs.cloudflare.com/ajax/libs/underscore.js/1.3.3/underscore-min.js"></script>
  <script src="http://cdnjs.cloudflare.com/ajax/libs/backbone.js/0.9.2/backbone-min.js"></script>
  <script src="http://ajax.aspnetcdn.com/ajax/jquery.ui/1.8.22/jquery-ui.js"></script>
  <script src="http://twitter.github.com/bootstrap/assets/js/bootstrap.js"></script>
  <script src="https://raw.github.com/joestelmach/laconic/master/laconic.js"></script>
  <script type="text/javascript" src="http://cdnjs.cloudflare.com/ajax/libs/backbone.modelbinder/0.1.3/Backbone.ModelBinder-min.js"></script>
 
  
  <button id="go">Go</button>
  
  <div id="waitBar" class="progress progress-striped span2">
      <div class="bar" style="width: 100%;"></div>
  </div>
  

</body>
</html>

CSS

#waitBar
    {
        height: 10px;
         width: 200px;            
        opacity:0;
        -webkit-transition: width 0s ease;
        -webkit-transition: opacity .5s ease-in-out;
        -moz-transition: opacity .5s ease-in-out;
        -o-transition: opacity .5s ease-in-out;
        transition: opacity .5s ease-in-out;
    }
    
    #waitBar .bar{
        -webkit-transition: width 0.2s ease;
        -moz-transition: width 0.2s ease;
        -o-transition: width 0.2s ease;
        transition: width 0.2s ease;
    }
    
    #waitBar.show
    {
        display: block;
        -webkit-transition: width 0s ease;
        opacity:1;
    }

JavaScript

(function($){
        $.fn.waitBar = function(timeout) {
            var el =  $(this);
            var bar = $(this).find(".bar");
            if(el.data("intervalid"))
            {
                window.clearInterval(el.data("intervalid"));
            }
            
            var start = new Date().getTime();
            bar.css("width", "100%");
            var intervalId = window.setInterval(function() {
                var now = new Date().getTime();
                var left = timeout - (now - start);
                bar.css("width", Math.floor(left/timeout*100)+ "%");
                if(left < 0)
                {
                    window.clearInterval(intervalId);
                    el.removeClass("show").data("intervalid", null);    
                }
            }, 100);
            el.addClass("show").data("intervalid", intervalId);
            
        };
    })(jQuery);
    
    $("#go").click(function() {
        $("#waitBar").waitBar(1000);
    });