图片/图形

炫酷jQuery鼠标滑过图片3D折叠效果

阿里云


jquery.hoverfold 是一款效果十分酷炫的 jQuery 鼠标滑过图片 3d 折叠效果。当鼠标滑过图片或鼠标悬停时,图片像折纸一样 3d 折叠或 3d 弯曲。hoverfold 3d 折叠共有 5 种不同的效果。

HTML 结构

图片的 html 结构应该像下面一样:

也想出现在这里?联系我们
创客主机
  1. <div id="grid" class="main">
  2.     <div class="view">
  3.         <div class="view-back">
  4.             <span data-icon="A">566</span>
  5.             <span data-icon="B">124</span>
  6.             <a href="#"></a>
  7.         </div>
  8.         <img src="images/1.jpg" />
  9.     </div>
  10.     <div class="view">
  11.     <!-- ... -->
  12.     </div>
  13.     <!-- ... -->
  14. </div>

每一张图片都放在一个 class 为 view 的 div 中,图片的说明信息放在其下 class 为 view-back 的 div 中。我们将使用 jQuery 为每个 viewdiv 中的图片产生折叠效果(插入图片折叠效果的 html 结构),它的 html 结构像下面所示:

  1. <div class="view">
  2.     <div class="view-back">
  3.         <!-- ... -->
  4.     </div>    
  5.     <div class="slice s1" style="background-image: url(images/1.jpg); ">
  6.         <span class="overlay"></span>       
  7.         <div class="slice s2" style="background-image: url(images/1.jpg); ">
  8.             <span class="overlay"></span>           
  9.             <div class="slice s3" style="background-image: url(images/1.jpg); ">
  10.                 <span class="overlay"></span>                
  11.                 <div class="slice s4" style="background-image: url(images/1.jpg); ">
  12.                     <span class="overlay"></span>                    
  13.                     <div class="slice s5" style="background-image: url(images/1.jpg); ">
  14.                         <span class="overlay"></span>
  15.                     </div><!-- /s5 -->              
  16.                 </div><!-- /s4 -->                  
  17.             </div><!-- /s3 -->               
  18.         </div><!-- /s2 -->           
  19.     </div><!-- /s1 -->  
  20. </div><!-- /view -->

每一个“slice”都包含一部分图片作为它的背景,这将使我们能够很好的控制效果。此外,我们为了做出更逼真的效果添加了一个“overlay” span,用来制作一些背景渐变效果。使用 jQuery 插入以上 html 的代码如下所示:

  1. $.fn.hoverfold = function( args ) {
  2.     this.each( function() {   
  3.         $( this ).children( '.view' ).each( function() {      
  4.             var $item   = $( this ),
  5.                 img     = $item.children( 'img' ).attr( 'src' ),
  6.                 struct  = '<div class="slice s1">';
  7.                     struct  +='<div class="slice s2">';
  8.                         struct  +='<div class="slice s3">';
  9.                             struct  +='<div class="slice s4">';
  10.                                 struct  +='<div class="slice s5">';
  11.                                 struct  +='</div>';
  12.                             struct  +='</div>';
  13.                         struct  +='</div>';
  14.                     struct  +='</div>';
  15.                 struct  +='</div>';               
  16.             var $struct = $( struct );            
  17.             $item.find( 'img' ).remove().end().append( $struct ).find( 'div.slice' ).css( 'background-image', 'url(' + img + ')' ).prepend( $( '<span class="overlay" ></span>' ) );           
  18.         } );       
  19.     });
  20. };

现在我们可以做出很多种折叠或弯曲效果。先来看看第一个 demo 的效果。

CSS 样式:

首先为 view div 添加样式,最重要的一点是为它添加 perspective 透视属性。

  1. .view {
  2.     width: 316px;
  3.     height: 216px;
  4.     margin: 10px;
  5.     float: left;
  6.     position: relative;
  7.     border: 8px solid #fff;
  8.     box-shadow: 1px 1px 2px rgba(0,0,0,0.05);
  9.     background: #333;
  10.     perspective: 500px;
  11. }

所有的图片切片需要添加一些 3D 属性和过渡效果。

  1. .view .slice{
  2.     width: 60px;
  3.     height: 100%;
  4.     z-index: 100;
  5.     transform-style: preserve-3d;
  6.     transform-origin: left center;
  7.     transition: transform 150ms ease-in-out;
  8.  
  9. }

当鼠标滑过图片的时候,图片的说明信息被显示出来,图片信息的样式如下:

  1. .view div.view-back{
  2.     width: 50%;
  3.     height: 100%;
  4.     position: absolute;
  5.     right: 0;
  6.     background: #666;
  7.     z-index: 0;
  8. }

下面给 span 和锚元素添加样式:

  1. .view-back span {
  2.     display: block;
  3.     float: right;
  4.     padding: 5px 20px 5px;
  5.     width: 100%;
  6.     text-align: right;
  7.     font-size: 16px;
  8.     color: rgba(255,255,255,0.6);
  9. }
  10.  
  11. .view-back span:first-child {
  12.     padding-top: 20px;
  13. }
  14.  
  15. .view-back a {
  16.     display: bock;
  17.     font-size: 18px;
  18.     color: rgba(255,255,255,0.4);
  19.     position: absolute;
  20.     right: 15px;
  21.     bottom: 15px;
  22.     border: 2px solid rgba(255,255,255,0.3);
  23.     border-radius: 50%;
  24.     width: 30px;
  25.     height: 30px;
  26.     line-height: 22px;
  27.     text-align: center;
  28.     font-weight: 700;
  29. }
  30.  
  31. .view-back a:hover {
  32.     color: #fff;
  33.     border-color: #fff;
  34. }

span 前面的图标我们使用 Fontello 来制作。前面我们为每个 span 都添加了 data-icon 属性,现在可以用它和:before 伪元素来显示图标。

  1. .view-back span[data-icon]:before {
  2.     content: attr(data-icon);
  3.     font-family: 'icons';
  4.     color: #aaa;
  5.     color: rgba(255,255,255,0.2);
  6.     text-shadow: 0 0 1px rgba(255,255,255,0.2);
  7.     padding-right: 5px;
  8. }

除了第一个以外的所有其它图片切片都要移动到右边。

  1. .view .s2, 
  2. .view .s3, 
  3. .view .s4, 
  4. .view .s5 {
  5.     transform: translateX(60px);
  6. }

为每一个图片切片设置 background-position 属性。

  1. .view .s1 {
  2.     background-position: 0px 0px;
  3. }
  4. .view .s2 {
  5.     background-position: -60px 0px;
  6. }
  7. .view .s3 {
  8.     background-position: -120px 0px;
  9. }
  10. .view .s4 {
  11.     background-position: -180px 0px;
  12. }
  13. .view .s5 {
  14.     background-position: -240px 0px;
  15. }

overlay 覆盖层的透明度开始时为 0,当鼠标滑过时,将其透明度过渡到 1。

  1. .view .overlay {
  2.     width: 60px;
  3.     height: 100%;
  4.     opacity: 0;
  5.     position: absolute;
  6.     transition: opacity 150ms ease-in-out;
  7. }
  8.  
  9. .view:hover .overlay {
  10.     opacity: 1;
  11. }

给图片添加一些样式,它需要绝对定位。为了兼容不支持 3D transforms 的浏览器,我们添加了一个过渡效果。

  1. .view img {
  2.     position: absolute;
  3.     z-index: 0;
  4.     transition: left 0.3s ease-in-out;
  5. }

如果某个浏览器不支持这些 3d 效果,我们简单的从 fallback.css 回调一些样式。使之平滑回退。效果是当鼠标滑过时,图片从右向左滑动。

  1. .view {
  2.     overflow: hidden;
  3. }
  4. .view:hover img {
  5.     left: -85px;
  6. }
  7. .view div.view-back {
  8.     background: #666;
  9. }

折叠效果

现在我们来创建折叠效果。要做出这种效果,我们需要调整 viewdiv 的 perspective 透视度和它的过渡效果。

  1. .view {
  2.     perspective: 1050px;
  3. }
  4. .view div {
  5.     transition: all 0.3s ease-in-out;
  6. }
  7.  
  8. 2345个图片切片将进行3D移动和旋转,以达到折叠效果。
  9. .view:hover .s2{
  10.     transform: translate3d(59px,0,0) rotate3d(0,1,0,-45deg);
  11. }
  12. .view:hover .s3, 
  13. .view:hover .s5{
  14.     transform: translate3d(59px,0,0) rotate3d(0,1,0,90deg);
  15. }
  16. .view:hover .s4{
  17.     transform: translate3d(59px,0,0) rotate3d(0,1,0,-90deg);
  18. }

每一个图片切片都向左移动。移动的长度应该是它们各自的宽度,但是我们想要使它们之间有一些间隙,所以移动了 59px。第二个图片切片被旋转了-45 度,使它表面朝向左边。第三个切片的旋转角度稍微大些,使它看起来折叠的较平缓,第二和第四个切片表面朝右,旋转正 90 度。请注意,我们使用的是一个嵌套结构,当我们旋转了父元素,它的子元素将一起旋转。为使效果更真实自然,我们在遮罩层添加了一些背景渐变。

  1. .view .s2 > .overlay {
  2.     background: linear-gradient(right, rgba(0,0,0,0.05) 0%,rgba(0,0,0,0) 100%);
  3. }
  4.  
  5. .view .s3 > .overlay {
  6.     background: linear-gradient(left, rgba(255,255,255,0) 0%, rgba(255, 255, 255, 0.2) 100%);
  7. }
  8.  
  9. .view .s4 > .overlay {
  10.     background: linear-gradient(right, rgba(0,0,0,0.6) 0%,rgba(0,0,0,0.2) 100%);
  11. }
  12.  
  13. .view .s5 > .overlay {
  14.     background: linear-gradient(left, rgba(0,0,0,0.8) 0%,rgba(0,0,0,0) 100%);
  15. }

当鼠标滑过图片后,图片信息展现出来,我们也需要为它添加一些背景渐变。

  1. .view div.view-back{
  2.     background: linear-gradient(left, #0a0a0a 0%,#666666 100%);
  3. }

折叠效果到这里就完成了。你可以查看下载文件中的其它效果是如何制作的,大概原理都相同。

炫酷 jQuery 鼠标滑过图片 3D 折叠效果

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

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

发表回复

热销模板

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

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