本教程我们将使用CSS3 3D transforms和jQuery来制作一个神奇的3D折叠效果。

在我们的demo中,图片在鼠标滑过的时候被折叠,空出来的部分将显示图片的一些信息。我们将创建一个放置图片html结构,当鼠标滑过它时,使用jQuery来将折叠或弯曲效果的html代码插入到合适的DOM节点,再用CSS 3D transforms来制作各种不同的效果(折叠或弯曲)。

HTML结构:

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

566

124

每一张图片都放在一个class为view的div中,图片的说明信息放在其下class为view-back的div中。

我们将使用jQuery为每个viewdiv中的图片产生折叠效果(插入图片折叠效果的html结构),它的html结构像下面所示:

每一个“slice”都包含一部分图片作为它的背景,这将使我们能够很好的控制效果。此外,我们为了做出更逼真的效果添加了一个“overlay” span,用来制作一些背景渐变效果。

使用jQuery插入以上html的代码如下所示:

$.fn.hoverfold = function( args ) {

this.each( function() {

$( this ).children( '.view' ).each( function() {

var $item = $( this ),

img = $item.children( 'img' ).attr( 'src' ),

struct = '

';

struct +='

';

struct +='

';

struct +='

';

struct +='

';

struct +='

';

struct +='

';

struct +='

';

struct +='

';

struct +='

';

var $struct = $( struct );

$item.find( 'img' ).remove().end().append( $struct ).find( 'div.slice' ).css( 'background-image', 'url(' + img + ')' ).prepend( $( '' ) );

} );

});

};

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

CSS样式:

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

.view {

width: 316px;

height: 216px;

margin: 10px;

float: left;

position: relative;

border: 8px solid #fff;

box-shadow: 1px 1px 2px rgba(0,0,0,0.05);

background: #333;

perspective: 500px;

}

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

.view .slice{

width: 60px;

height: 100%;

z-index: 100;

transform-style: preserve-3d;

transform-origin: left center;

transition: transform 150ms ease-in-out;

}

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

.view div.view-back{

width: 50%;

height: 100%;

position: absolute;

right: 0;

background: #666;

z-index: 0;

}

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

.view-back span {

display: block;

float: right;

padding: 5px 20px 5px;

width: 100%;

text-align: right;

font-size: 16px;

color: rgba(255,255,255,0.6);

}

.view-back span:first-child {

padding-top: 20px;

}

.view-back a {

display: bock;

font-size: 18px;

color: rgba(255,255,255,0.4);

position: absolute;

right: 15px;

bottom: 15px;

border: 2px solid rgba(255,255,255,0.3);

border-radius: 50%;

width: 30px;

height: 30px;

line-height: 22px;

text-align: center;

font-weight: 700;

}

.view-back a:hover {

color: #fff;

border-color: #fff;

}

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

.view-back span[data-icon]:before {

content: attr(data-icon);

font-family: 'icons';

color: #aaa;

color: rgba(255,255,255,0.2);

text-shadow: 0 0 1px rgba(255,255,255,0.2);

padding-right: 5px;

}

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

.view .s2,

.view .s3,

.view .s4,

.view .s5 {

transform: translateX(60px);

}

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

.view .s1 {

background-position: 0px 0px;

}

.view .s2 {

background-position: -60px 0px;

}

.view .s3 {

background-position: -120px 0px;

}

.view .s4 {

background-position: -180px 0px;

}

.view .s5 {

background-position: -240px 0px;

}

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

.view .overlay {

width: 60px;

height: 100%;

opacity: 0;

position: absolute;

transition: opacity 150ms ease-in-out;

}

.view:hover .overlay {

opacity: 1;

}

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

.view img {

position: absolute;

z-index: 0;

transition: left 0.3s ease-in-out;

}

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

.view {

overflow: hidden;

}

.view:hover img {

left: -85px;

}

.view div.view-back {

background: #666;

}

折叠效果

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

.view {

perspective: 1050px;

}

.view div {

transition: all 0.3s ease-in-out;

}

第2、3、4、5个图片切片将进行3D移动和旋转,以达到折叠效果。

.view:hover .s2{

transform: translate3d(59px,0,0) rotate3d(0,1,0,-45deg);

}

.view:hover .s3,

.view:hover .s5{

transform: translate3d(59px,0,0) rotate3d(0,1,0,90deg);

}

.view:hover .s4{

transform: translate3d(59px,0,0) rotate3d(0,1,0,-90deg);

}

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

为使效果更真实自然,我们在遮罩层添加了一些背景渐变。

.view .s2 > .overlay {

background: linear-gradient(right, rgba(0,0,0,0.05) 0%,rgba(0,0,0,0) 100%);

}

.view .s3 > .overlay {

background: linear-gradient(left, rgba(255,255,255,0) 0%, rgba(255, 255, 255, 0.2) 100%);

}

.view .s4 > .overlay {

background: linear-gradient(right, rgba(0,0,0,0.6) 0%,rgba(0,0,0,0.2) 100%);

}

.view .s5 > .overlay {

background: linear-gradient(left, rgba(0,0,0,0.8) 0%,rgba(0,0,0,0) 100%);

}

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

.view div.view-back{

background: linear-gradient(left, #0a0a0a 0%,#666666 100%);

}

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

本教程就到这里,希望对你有所帮助。

html鼠标滚动图片折叠,鼠标滑过图片3D折叠效果相关推荐

  1. 关于viewer.js插件js版鼠标滚动事件放大缩小改为图片移动

    主要是为了记录下需求中解决问题的思路,本人前端相当糟糕. 问题的产生是由于图片太长,页面一次性展示不全,业务人员提出修改前端图片显示中的鼠标滚动改为上下移动.由于项目中图片展示使用的是viewer,j ...

  2. 鼠标滚动事件,鼠标滚动一下,屏幕滑动一屏

    思路:1.判断鼠标向上还是向下滚动 2.执行鼠标事件 鼠标滚动事件注册事件资料:https://www.cnblogs.com/wsoft/articles/2856861.html <!DOC ...

  3. html div 可鼠标滚动,js实现鼠标拖拽div左右滑动

    本文实例为大家分享了js鼠标拖拽div左右滑动的具体代码,供大家参考,具体内容如下 Title body{ position: relative; margin:0; padding:0; width ...

  4. 鼠标滚动缩放图片效果

    前段时间本人在做项目时,做了一个鼠标滚动缩放图片效果,图片支持多个,多个图片循环缩放,花了点时间整理了下,把它贴出来,与大家分享下,在ie6.0,ie7.0,firefox都测试过,没有问题. < ...

  5. JavaFX鼠标滚动放大缩小图片

    一.鼠标滚动放大缩小图片 package cn.util;import java.io.File; import javafx.application.Application; import java ...

  6. jQuery hover事件鼠标滑过图片半透明标题文字滑动显示隐藏

    1.效果及功能说明 hover事件制作产品图片鼠标滑过图片半透明,标题文字从左到右滑动动画移动显示隐藏 2.实现原理 首先把效果都隐藏,然后定义一个伪类来触发所有的效果,接下来当触发伪类后会有一个遍历 ...

  7. 图片随鼠标滚动而任意浮动

    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> <HTML xmlns=" ...

  8. 鼠标滑过图片,图片抖动

    鼠标滑过图片,图片抖动 2021.9.22 1.html代码 <!DOCTYPE html> <html><head><meta charset=" ...

  9. JS鼠标滑过图片时切换图片

    http://www.aichengxu.com/article/Javascript/277_7.html 在很多网站上我们会发现当鼠标滑过一张图片后,这张图片切换为了另外的一张图片.这里豆芽说说这 ...

最新文章

  1. list对oracle结果集排序了_MySQL之排序分组优化
  2. 科大讯飞2019年创下历史最佳业绩,员工涨薪27%,营收来源妥妥「安徽之光」
  3. Servlet_快速入门
  4. MongoDB 之 幽灵操作避免
  5. [内核编程] 内核环境及其特殊性,驱动编程基础篇
  6. php+条件限定符,const 限定符
  7. 第五章:配置使用FastJson返回Json视图
  8. 作者:兰艳艳,女,中国科学院计算技术研究所副研究员、硕士生导师。
  9. 网站前端和后台性能优化的34条经验和方法
  10. TFIDF与BM25
  11. mysql是bsd协议吗_开源许可证 GPL、BSD、MIT、Mozilla、Apache 和 LGPL 的区别
  12. Java开发-使用Java语言实现刷微信跳一跳小游戏的分数
  13. 交通银行计算机专业招聘笔试题4套,交通银行校园招聘笔试经验分享(试题解析)...
  14. Encrypted traffic 加密流量分类任务进展综述
  15. C++: ISO C++ forbids converting a string constant to ‘char*’ [-Wwrite-strings]
  16. 上海BFC外滩金融中心潮流新店,aaddd揭秘全新生活美学
  17. js获取指定字符前/后的字符串简单实例
  18. Vue中使用tailwindcss
  19. Java基础题10:(单选题)以下代码的输出结果是() public class Test { public static void main(String[] args) { Stri
  20. 用python解小学奥数题

热门文章

  1. HTML+CSS+JS实现 ❤️动态散花背景❤️
  2. element手机验证格式_Laravel 自定义封装表单验证类
  3. 登陆 manager app显示不是私密链接_小米上线了一款靠指静脉识别开锁的私密箱,打造你的私人存储空间...
  4. java实参将数据传递给形参的两种形式
  5. 小米手环导出心率_这个功能有意思,小米11支持指纹检测心率,没有手环也不怕...
  6. 排序千万级数据_MySQL 对于千万级的大表要怎么优化?我写了6000字的深度解读...
  7. python算法详解豆瓣_豆瓣爬虫实践-python版
  8. python基础入门(4)之布尔值
  9. opcenum在计算机服务找不到,OPC DCOM 问题处理
  10. Python数模笔记-StatsModels 统计回归(3)模型数据的准备