CSS3制作炫酷带方向感应的鼠标滑过图片3D动画


Posted in HTML / CSS onMarch 16, 2016

这是一款使用CSS3和一点JS来制作的炫酷带方向感应的鼠标滑过图片3D动画特效。在特效中,当用户的鼠标滑过网格中的图片时,网格中的内容遮罩层会出现3D翻转动画,并且带有方向感应,能够从鼠标进入的方向开始翻转,效果非常的酷。

CSS3制作炫酷带方向感应的鼠标滑过图片3D动画

在线预览    源码下载

使用方法

HTML结构

该方向感应鼠标滑过动画的HTML结构采用无序列表的HTML结构来制作网格布局,每一个<li>元素是一个网格。每个网格中使用一个<svg>元素来进行占位,实际上它是一个图片的小图标。另外div.info是要进行3D翻转的遮罩层。

XML/HTML Code复制内容到剪贴板
  1. <div class='container'>  
  2.   <ul>  
  3.     <li>  
  4.       <a class='normal' href='#'>  
  5.         <svg viewBox='0 0 80 76' x='0px' y='0px'>  
  6.           <g>  
  7.             <path d='M 68.9708 24.8623 L 60.4554 2.3018 ...... 68.0625 Z'></path>  
  8.           </g>  
  9.         </svg>  
  10.       </a>  
  11.       <div class='info'>  
  12.         <h3>...</h3>  
  13.         <p>....</p>  
  14.       </div>  
  15.     </li>  
  16.     ......   
  17.   </ul>  
  18. </div>      
  19.   

CSS样式

整个网格布局使用无序列表来制作,所有的li元素都采用左浮动。

CSS Code复制内容到剪贴板
  1. ul {   
  2.   padding: 0;   
  3.   margin: 0 0 50px;   
  4. }   
  5. ul:after {   
  6.   content"";   
  7.   display: table;   
  8.   clearboth;   
  9. }   
  10.     
  11. li {   
  12.   positionrelative;   
  13.   floatleft;   
  14.   width200px;   
  15.   height200px;   
  16.   margin5px;   
  17.   padding: 0;   
  18.   list-stylenone;   
  19. }   
  20. li a {   
  21.   displayinline-block;   
  22.   vertical-aligntop;   
  23.   text-decorationnone;   
  24.   border-radius: 4px;   
  25. }      
  26.   

同时为了制作3D效果,为每一个li元素添加透视属性。

CSS Code复制内容到剪贴板
  1. li {   
  2.   -webkit-perspective: 400px;   
  3.           perspective: 400px;   
  4. }       

用于制作3D翻转的遮罩层div.info默认设置为100%的宽度和100%的高度,使用绝对定位,开始时位于左上角位置。然后使用rotate3d()函数将它沿X轴顺时针旋转90度,使其不可见。

CSS Code复制内容到剪贴板
  1. .info {   
  2.   -webkit-transform: rotate3d(1, 0, 0, 90deg);   
  3.           transform: rotate3d(1, 0, 0, 90deg);   
  4.   width: 100%;   
  5.   height: 100%;   
  6.   padding20px;   
  7.   positionabsolute;   
  8.   top: 0;   
  9.   left: 0;   
  10.   border-radius: 4px;   
  11.   pointer-events: none;   
  12.   background-color: rgba(26, 188, 156, 0.9);   
  13. }       
  14.   

最后在CSS样式中为鼠标从上下左右4个方向进入和离开时预设了class类,这些class是在鼠标进入网格时,使用JavaScript来检测鼠标的进入方向,然后为其添加相应的class类。

CSS Code复制内容到剪贴板
  1. .in-top .info {   
  2.   -webkit-transform-origin: 50% 0%;   
  3.           transform-origin: 50% 0%;   
  4.   -webkit-animation: in-top 300ms ease 0ms 1 forwards;   
  5.           animation: in-top 300ms ease 0ms 1 forwards;   
  6. }   
  7.     
  8. .in-rightright .info {   
  9.   -webkit-transform-origin: 100% 0%;   
  10.           transform-origin: 100% 0%;   
  11.   -webkit-animation: in-rightright 300ms ease 0ms 1 forwards;   
  12.           animation: in-rightright 300ms ease 0ms 1 forwards;   
  13. }   
  14.     
  15. .in-bottombottom .info {   
  16.   -webkit-transform-origin: 50% 100%;   
  17.           transform-origin: 50% 100%;   
  18.   -webkit-animation: in-bottombottom 300ms ease 0ms 1 forwards;   
  19.           animation: in-bottombottom 300ms ease 0ms 1 forwards;   
  20. }   
  21.     
  22. .in-left .info {   
  23.   -webkit-transform-origin: 0% 0%;   
  24.           transform-origin: 0% 0%;   
  25.   -webkit-animation: in-left 300ms ease 0ms 1 forwards;   
  26.           animation: in-left 300ms ease 0ms 1 forwards;   
  27. }   
  28.     
  29. .out-top .info {   
  30.   -webkit-transform-origin: 50% 0%;   
  31.           transform-origin: 50% 0%;   
  32.   -webkit-animation: out-top 300ms ease 0ms 1 forwards;   
  33.           animation: out-top 300ms ease 0ms 1 forwards;   
  34. }   
  35.     
  36. .out-rightright .info {   
  37.   -webkit-transform-origin: 100% 50%;   
  38.           transform-origin: 100% 50%;   
  39.   -webkit-animation: out-rightright 300ms ease 0ms 1 forwards;   
  40.           animation: out-rightright 300ms ease 0ms 1 forwards;   
  41. }   
  42.     
  43. .out-bottombottom .info {   
  44.   -webkit-transform-origin: 50% 100%;   
  45.           transform-origin: 50% 100%;   
  46.   -webkit-animation: out-bottombottom 300ms ease 0ms 1 forwards;   
  47.           animation: out-bottombottom 300ms ease 0ms 1 forwards;   
  48. }   
  49.     
  50. .out-left .info {   
  51.   -webkit-transform-origin: 0% 0%;   
  52.           transform-origin: 0% 0%;   
  53.   -webkit-animation: out-left 300ms ease 0ms 1 forwards;   
  54.           animation: out-left 300ms ease 0ms 1 forwards;   
  55. }       
  56.   

 JavaScript

该特效中使用JavaScript来获取鼠标进入网格的方向,为相应的网格动画添加相应的class类。其中getDirection()函数为获取方向函数。

JavaScript Code复制内容到剪贴板
  1. var getDirection = function (ev, obj) {   
  2.     var w = obj.offsetWidth,    
  3.         h = obj.offsetHeight,    
  4.         x = ev.pageX - obj.offsetLeft - w / 2 * (w > h ? h / w : 1),    
  5.         y = ev.pageY - obj.offsetTop - h / 2 * (h > w ? w / h : 1),    
  6.         d = Math.round(Math.atan2(y, x) / 1.57079633 + 5) % 4;   
  7.     return d;   
  8. };       
  9.   

然后通过遍历所有的li元素,通过鼠标进入的方向来添加相应的class类。

JavaScript Code复制内容到剪贴板
  1. var nodes = document.querySelectorAll('li'),   
  2.     _nodes = [].slice.call(nodes, 0);   
  3. var addClass = function (ev, obj, state) {   
  4.     var direction = getDirection(ev, obj), class_suffix = '';   
  5.     obj.className = '';   
  6.     switch (direction) {   
  7.     case 0:   
  8.         class_suffix = '-top';   
  9.         break;   
  10.     case 1:   
  11.         class_suffix = '-right';   
  12.         break;   
  13.     case 2:   
  14.         class_suffix = '-bottom';   
  15.         break;   
  16.     case 3:   
  17.         class_suffix = '-left';   
  18.         break;   
  19.     }   
  20.     obj.classList.add(state + class_suffix);   
  21. };   
  22. _nodes.forEach(function (el) {   
  23.     el.addEventListener('mouseover'function (ev) {   
  24.         addClass(ev, this'in');   
  25.     }, false);   
  26.     el.addEventListener('mouseout'function (ev) {   
  27.         addClass(ev, this'out');   
  28.     }, false);   
  29. });      

以上就是本文的全部内容,希望对大家的学习有所帮助。

原文:http://www.cnblogs.com/w2bc/p/5209690.html

HTML / CSS 相关文章推荐
CSS3 优势以及网页设计师如何使用CSS3技术
Jul 29 HTML / CSS
IE矩阵Matrix滤镜旋转与缩放及如何结合transform
Nov 29 HTML / CSS
css3实现3D色子翻转特效
Dec 23 HTML / CSS
6种非常炫酷的CSS3按钮边框动画特效
Mar 16 HTML / CSS
CSS3径向渐变之大鱼吃小鱼之孤单的大鱼
Apr 26 HTML / CSS
css3+伪元素实现鼠标移入时下划线向两边展开的效果
Apr 25 HTML / CSS
10分钟理解CSS3 Grid布局
Dec 20 HTML / CSS
CSS3 边框效果
Nov 04 HTML / CSS
html5 Canvas画图教程(2)—画直线与设置线条的样式如颜色/端点/交汇点
Jan 09 HTML / CSS
HTML5在a标签内放置块级元素示例代码
Aug 23 HTML / CSS
canvas进阶之如何画出平滑的曲线
Oct 15 HTML / CSS
基于HTML5+tracking.js实现刷脸支付功能
Apr 16 HTML / CSS
纯CSS3实现8组超炫酷鼠标滑过图片动画
Mar 16 #HTML / CSS
纯CSS3打造属于自己的“小黄人”
Mar 14 #HTML / CSS
利用css3-animation实现逐帧动画效果
Mar 10 #HTML / CSS
CSS3对背景图片的裁剪及尺寸和位置的设定方法
Mar 07 #HTML / CSS
用CSS3的box-reflect设置文字倒影效果的方法讲解
Mar 07 #HTML / CSS
CSS3哪些新特性值得称赞
Mar 02 #HTML / CSS
基于DOM+CSS3实现OrgChart组织结构图插件
Mar 02 #HTML / CSS
You might like
php 移除数组重复元素的一点说明
2008/11/27 PHP
PHP nl2br函数 将换行字符转成 &amp;lt;br&amp;gt;
2009/08/21 PHP
一些php项目中比较通用的php自建函数的详解
2013/06/06 PHP
CI框架中site_url()和base_url()的区别
2015/01/07 PHP
php中namespace use用法实例分析
2016/01/22 PHP
PHP-FPM运行状态的实时查看及监控详解
2016/11/18 PHP
PHP异常处理定义与使用方法分析
2017/07/25 PHP
阿里云Win2016安装Apache和PHP环境图文教程
2018/03/11 PHP
CSS+JS构建的图片查看器
2006/07/22 Javascript
google地图的路线实现代码
2009/08/20 Javascript
10个基于Jquery的幻灯片插件教程
2010/10/29 Javascript
JS的get和set使用示例
2014/02/20 Javascript
jQueryMobile之Helloworld与页面切换的方法
2015/02/04 Javascript
JavaScript取得键盘按下方向键是哪个的方法
2015/08/04 Javascript
javascript实现在网页中运行本地程序的方法
2016/02/03 Javascript
jquery Deferred 快速解决异步回调的问题
2016/04/05 Javascript
Function.prototype.apply()与Function.prototype.call()小结
2016/04/27 Javascript
如何用js实现鼠标向上滚动时浮动导航
2016/07/18 Javascript
AngularJS基础 ng-non-bindable 指令详细介绍
2016/08/02 Javascript
js style.display=block显示布局错乱问题的解决方法
2016/09/21 Javascript
jquery设置css样式的多种方法(总结)
2017/02/21 Javascript
手把手教你使用vue-cli脚手架(图文解析)
2017/11/08 Javascript
JS非行间样式获取函数的实例代码
2018/06/05 Javascript
Vue+axios实现统一接口管理的方法
2018/07/23 Javascript
Python中urllib+urllib2+cookielib模块编写爬虫实战
2016/01/20 Python
12个Python程序员面试必备问题与答案(小结)
2019/06/24 Python
python连接打印机实现打印文档、图片、pdf文件等功能
2020/02/07 Python
浅谈在django中使用redirect重定向数据传输的问题
2020/03/13 Python
Django多层嵌套ManyToMany字段ORM操作详解
2020/05/19 Python
Python3获取cookie常用三种方案
2020/10/05 Python
Myprotein法国官网:欧洲第一运动营养品牌
2019/03/26 全球购物
Ajax实现页面无刷新留言效果
2021/03/24 Javascript
市场营销专业应届生自荐信
2014/06/19 职场文书
导游词之新疆-喀纳斯
2019/10/10 职场文书
Python爬虫中urllib3与urllib的区别是什么
2021/07/21 Python
MySQL创建定时任务
2022/01/22 MySQL