JQuery图片切换 Win8 Metro风格Banner

<!DOCTYPE HTML>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>图片切换 - 合肥网站建设www.an56.net</title>
<script src="//ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
<style type="text/css">
.bg_area { padding-top:30px; padding-bottom:30px }
.hs_container { position:relative; width:902px; height:471px; overflow:hidden; clear:both; border:2px solid #fff; cursor:pointer; -moz-box-shadow:1px 1px 3px #222; -webkit-box-shadow:1px 1px 3px #222; box-shadow:1px 1px 3px #222; margin:0 auto; }
.hs_container .hs_area { position:absolute; overflow:hidden; }
.hs_area img { width:calc(100% - 2px); *width:100%; width:100%\0/; min-height:100%; position:absolute; top:0px; left:0px; display:none; }
.hs_area img.hs_visible { display:block; z-index:50; }
.hs_area1, .hs_area4 { border-right:2px solid #fff; }
.hs_area4, .hs_area5 { border-top:2px solid #fff; }
.hs_area3 { border-top:2px solid #fff; }
.hs_area1 { width:50%; height:66.666%; top:0px; left:0px; }
.hs_area2 { width:50%; height:33.333%; top:0px; right:0; }
.hs_area3 { width:50%; height:33.333%; max-height:calc(33.33% - 2px); top:33.333%; right:0; }
.hs_area4 { width:25%; height:33.333%; top:66.666%; left:0px; }
.hs_area5 { width:75%; height:33.333%; top:66.666%; right:0; }
.hs_area2 img,.hs_area3 img,.hs_area5 img { width:100%; }
</style>
</head>

<body>

<!-- FINE HEADER -->
<div class="container bg_area">
  <div id="hs_container" class="hs_container">
    <div class="hs_area hs_area1">
      <img class="hs_visible" src="/images/bn-1.jpg" alt=""/>
      <img src="/images/bn-2.jpg" alt=""/>
      <img src="/images/bn-3.jpg" alt=""/>
    </div>
    <div class="hs_area hs_area2">
      <img class="hs_visible" src="/images/bn-4.jpg" alt=""/>
      <img src="/images/bn-5.jpg" alt=""/>
      <img src="/images/bn-6.jpg" alt=""/>
    </div>
    <div class="hs_area hs_area3">
      <img class="hs_visible" src="/images/bn-1.jpg" alt=""/>
      <img src="/images/bn-2.jpg" alt=""/>
      <img src="/images/bn-3.jpg" alt=""/>
    </div>
    <div class="hs_area hs_area4">
      <img class="hs_visible" src="/images/bn-4.jpg" alt=""/>
      <img src="/images/bn-5.jpg" alt=""/>
      <img src="/images/bn-6.jpg" alt=""/>
    </div>
    <div class="hs_area hs_area5">
      <img class="hs_visible" src="/images/bn-1.jpg" alt=""/>
      <img src="/images/bn-2.jpg" alt=""/>
      <img src="/images/bn-3.jpg" alt=""/>
    </div>
  </div>
<script type="text/javascript">
$(function()
{
  //custom animations to use
  //in the transitions
  var animations = ['right', 'left', 'top', 'bottom', 'rightFade', 'leftFade', 'topFade', 'bottomFade'];
  var total_anim = animations.length;
  //just change this to one of your choice
  var easeType = 'swing';
  //the speed of each transition
  var animSpeed = 450;
  //caching
  var $hs_container = $('#hs_container');
  var $hs_areas = $hs_container.find('.hs_area');

  //first preload all img
  $hs_img = $hs_container.find('img');
  var total_img = $hs_img.length;
  var cnt = 0;
  $hs_img.each(function () {
    var $this = $(this);
    $('<img/>').load(function () {
      ++cnt;
      if (cnt == total_img) {
        $hs_areas.each(function () {
          var $area = $(this);
          //when the mouse enters the area we animate the current
          //image (random animation from array animations),
          //so that the next one gets visible.
          //"over" is a flag indicating if we can animate 
          //an area or not (we don't want 2 animations 
          //at the same time for each area)
          $area.data('over', true).bind('mouseenter', function () {
    if ($area.data('over')) {
      $area.data('over', false);
      //how many img in this area?
      var total = $area.children().length;
      //visible image
      var $current = $area.find('img:visible');
      //index of visible image
      var idx_current = $current.index();
      //the next image that's going to be displayed.
      //either the next one, or the first one if the current is the last
      var $next = (idx_current == total - 1) ? $area.children(':first') : $current.next();
      //show next one (not yet visible)
      $next.show();
      //get a random animation
      var anim = animations[Math.floor(Math.random() * total_anim)];
      switch (anim) {
        //current slides out from the right  
        case 'right':
          $current.animate({
            'left': $current.width() + 'px'
          },
              animSpeed,
              easeType,
              function () {
        $current.hide().css({
          'z-index': '1',
          'left': '0px'
        });
        $next.css('z-index', '50');
        $area.data('over', true);
              });
          break;
        //current slides out from the left  
        case 'left':
          $current.animate({
            'left': -$current.width() + 'px'
          },
              animSpeed,
              easeType,
              function () {
        $current.hide().css({
          'z-index': '1',
          'left': '0px'
        });
        $next.css('z-index', '50');
        $area.data('over', true);
              });
          break;
        //current slides out from the top    
        case 'top':
          $current.animate({
            'top': -$current.height() + 'px'
          },
              animSpeed,
              easeType,
              function () {
        $current.hide().css({
          'z-index': '1',
          'top': '0px'
        });
        $next.css('z-index', '50');
        $area.data('over', true);
              });
          break;
        //current slides out from the bottom    
        case 'bottom':
          $current.animate({
            'top': $current.height() + 'px'
          },
              animSpeed,
              easeType,
              function () {
        $current.hide().css({
          'z-index': '1',
          'top': '0px'
        });
        $next.css('z-index', '50');
        $area.data('over', true);
              });
          break;
        //current slides out from the right  and fades out  
        case 'rightFade':
          $current.animate({
            'left': $current.width() + 'px',
            'opacity': '0'
          },
              animSpeed,
              easeType,
              function () {
        $current.hide().css({
          'z-index': '1',
          'left': '0px',
          'opacity': '1'
        });
        $next.css('z-index', '50');
        $area.data('over', true);
              });
          break;
        //current slides out from the left and fades out    
        case 'leftFade':
          $current.animate({
            'left': -$current.width() + 'px', 'opacity': '0'
          },
              animSpeed,
              easeType,
              function () {
        $current.hide().css({
          'z-index': '1',
          'left': '0px',
          'opacity': '1'
        });
        $next.css('z-index', '50');
        $area.data('over', true);
              });
          break;
        //current slides out from the top and fades out    
        case 'topFade':
          $current.animate({
            'top': -$current.height() + 'px',
            'opacity': '0'
          },
              animSpeed,
              easeType,
              function () {
        $current.hide().css({
          'z-index': '1',
          'top': '0px',
          'opacity': '1'
        });
        $next.css('z-index', '50');
        $area.data('over', true);
              });
          break;
        //current slides out from the bottom and fades out    
        case 'bottomFade':
          $current.animate({
            'top': $current.height() + 'px',
            'opacity': '0'
          },
              animSpeed,
              easeType,
              function () {
        $current.hide().css({
          'z-index': '1',
          'top': '0px',
          'opacity': '1'
        });
        $next.css('z-index', '50');
        $area.data('over', true);
              });
          break;
        default:
          $current.animate({
            'left': -$current.width() + 'px'
          },
              animSpeed,
              easeType,
              function () {
        $current.hide().css({
          'z-index': '1',
          'left': '0px'
        });
        $next.css('z-index', '50');
        $area.data('over', true);
              });
          break;
      }
    }
          });
        });

        //when clicking the hs_container all areas get slided
        //(just for fun...you would probably want to enter the site
        //or something similar)
        $hs_container.bind('click', function () {
          $hs_areas.trigger('mouseenter');
        });
      }
    }).attr('src', $this.attr('src'));
  });
});
</script> 
</div>
</body>
</html>

 

posted @ 2013-03-24 13:40  Al-one  阅读(1769)  评论(0编辑  收藏  举报