图片/图形

jQuery+css3鼠标滑过网格相邻图片浮动效果

阿里云


这是一款效果十分炫酷的 jQuery 和 css3 鼠标滑过网格相邻图片浮动效果。插件中使用了 jQuery Proximity plugin。有很多种方法使用纯 css 来制作手风琴效果,其中使用最多的是使用:target 伪类来实现。使用:target 伪类的问题是我们不能够再次关闭内容区域或同时显示多个内容区域。但是通过使用 checkbox,我们可以控制内容区域的打开和关闭。如果只想在某一时刻只显示一个内容,可以使用 radio 按钮来实现。

HTML 结构

下面的例子 demo2 的 html 结构:

也想出现在这里?联系我们
创客主机
  1. <ul id="pe-thumbs" class="pe-thumbs">
  2.     <li>
  3.         <a href="#">
  4.             <img src="images/thumbs/1.jpg" />
  5.             <div class="pe-description">
  6.                 <h3>Time</h3>
  7.                 <p>Since time, and his predestinated end</p>
  8.             </div></a>
  9.     </li>
  10.     <li><!-- ... --></li>
  11. </ul>

JAVASCRIPT

该插件要做的事情是当鼠标滑过缩略图时计算出相邻区域的大小和位置。

  1.     // list of thumbs
  2. var $list       = $('#pe-thumbs'),
  3.     // list's width and offset left.
  4.     // this will be used to know the position of the description container
  5.     listW       = $list.width(),
  6.     listL       = $list.offset().left,
  7.     // the images
  8.     $elems      = $list.find('img'),
  9.     // the description containers
  10.     $descrp     = $list.find('div.pe-description'),
  11.     // maxScale : maximum scale value the image will have
  12.     // minOpacity / maxOpacity : minimum (set in the CSS) and maximum values for the image's opacity
  13.     settings    = {
  14.         maxScale    : 1.3,
  15.         maxOpacity  : 0.9,
  16.         minOpacity  : Number( $elems.css('opacity') )
  17.     },
  18.     init        = function() {  
  19.         // minScale will be set in the CSS
  20.         settings.minScale = _getScaleVal() || 1;
  21.         // preload the images (thumbs)
  22.         _loadImages( function() {           
  23.             _calcDescrp();
  24.             _initEvents();
  25.         });
  26.     },
  27.     // Get Value of CSS Scale through JavaScript:
  28.     // http://css-tricks.com/get-value-of-css-rotation-through-javascript/
  29.     _getScaleVal= function() {
  30.         var st = window.getComputedStyle($elems.get(0), null),
  31.             tr = st.getPropertyValue("-webkit-transform") ||
  32.                  st.getPropertyValue("-moz-transform") ||
  33.                  st.getPropertyValue("-ms-transform") ||
  34.                  st.getPropertyValue("-o-transform") ||
  35.                  st.getPropertyValue("transform") ||
  36.                  "fail...";
  37.         if( tr !== 'none' ) {    
  38.             var values = tr.split('(')[1].split(')')[0].split(','),
  39.                 a = values[0],
  40.                 b = values[1],
  41.                 c = values[2],
  42.                 d = values[3];
  43.             return Math.sqrt( a * a + b * b ); 
  44.         }
  45.     },
  46.     // calculates the style values for the description containers,
  47.     // based on the settings variable
  48.     _calcDescrp = function() { 
  49.         $descrp.each( function(i) {
  50.             var $el     = $(this),
  51.                 $img    = $el.prev(),
  52.                 img_w   = $img.width(),
  53.                 img_h   = $img.height(),
  54.                 img_n_w = settings.maxScale * img_w,
  55.                 img_n_h = settings.maxScale * img_h,
  56.                 space_t = ( img_n_h - img_h ) / 2,
  57.                 space_l = ( img_n_w - img_w ) / 2;   
  58.             $el.data( 'space_l', space_l ).css({
  59.                 height  : settings.maxScale * $el.height(),
  60.                 top     : -space_t,
  61.                 left    : img_n_w - space_l
  62.             });
  63.         });
  64.     },
  65.     _initEvents = function() {
  66.         $elems.on('proximity.Photo', { max: 80, throttle: 10, fireOutOfBounds : true }, function(event, proximity, distance) {   
  67.             var $el         = $(this),
  68.                 $li         = $el.closest('li'),
  69.                 $desc       = $el.next(),
  70.                 scaleVal    = proximity * ( settings.maxScale - settings.minScale ) + settings.minScale,
  71.                 scaleExp    = 'scale(' + scaleVal + ')';
  72.             // change the z-index of the element once 
  73.             // it reaches the maximum scale value
  74.             // also, show the description container
  75.             if( scaleVal === settings.maxScale ) {  
  76.                 $li.css( 'z-index', 1000 );  
  77.                 if( $desc.offset().left + $desc.width() > listL + listW ) {    
  78.                     $desc.css( 'left', -$desc.width() - $desc.data( 'space_l' ) );               
  79.                 }              
  80.                 $desc.fadeIn( 800 );               
  81.             }   
  82.             else {              
  83.                 $li.css( 'z-index', 1 );
  84.                 $desc.stop(true,true).hide();   
  85.             }             
  86.             $el.css({
  87.                 '-webkit-transform' : scaleExp,
  88.                 '-moz-transform'    : scaleExp,
  89.                 '-o-transform'      : scaleExp,
  90.                 '-ms-transform'     : scaleExp,
  91.                 'transform'         : scaleExp,
  92.                 'opacity'           : ( proximity * ( settings.maxOpacity - settings.minOpacity ) + settings.minOpacity )
  93.             });
  94.         });
  95.     },
  96.     _loadImages = function( callback ) {
  97.         var loaded  = 0,
  98.             total   = $elems.length;
  99.         $elems.each( function(i) {     
  100.             var $el = $(this);        
  101.             $('<img>').load( function() {               
  102.                 ++loaded;
  103.                 if( loaded === total )
  104.                     callback.call();  
  105.             }).attr( 'src', $el.attr('src') );
  106.         });
  107.     };
  108. return {
  109.     init    : init
  110. };

jQuery+css3 鼠标滑过网格相邻图片浮动效果

已有 359 人购买
查看演示升级 VIP立刻购买

演示地址 下载地址
收藏
(1)

发表回复

热销模板

Ashade - 作品展示摄影相册WordPress汉化主题
LensNews

本站承接 WordPress / PbootCMS / DedeCMS 等
系统建站、仿站、开发、定制等业务!