这是一款使用CSS3和一点JS来制作的炫酷带方向感应的鼠标滑过图片3D动画特效。在特效中,当用户的鼠标滑过网格中的图片时,网格中的内容遮罩层会出现3D翻转动画,并且带有方向感应,能够从鼠标进入的方向开始翻转,效果非常的酷。
在线预览 源码下载
使用方法
HTML结构
该方向感应鼠标滑过动画的HTML结构采用无序列表的HTML结构来制作网格布局,每一个<li>元素是一个网格。每个网格中使用一个<svg>元素来进行占位,实际上它是一个图片的小图标。另外div.info是要进行3D翻转的遮罩层。
XML/HTML Code复制内容到剪贴板- <div class='container'>
- <ul>
- <li>
- <a class='normal' href='#'>
- <svg viewBox='0 0 80 76' x='0px' y='0px'>
- <g>
- <path d='M 68.9708 24.8623 L 60.4554 2.3018 ...... 68.0625 Z'></path>
- </g>
- </svg>
- </a>
- <div class='info'>
- <h3>...</h3>
- <p>....</p>
- </div>
- </li>
- ......
- </ul>
- </div>
CSS样式
整个网格布局使用无序列表来制作,所有的li元素都采用左浮动。
CSS Code复制内容到剪贴板- ul {
- padding: 0;
- margin: 0 0 50px;
- }
- ul:after {
- content: "";
- display: table;
- clear: both;
- }
- li {
- position: relative;
- float: left;
- width: 200px;
- height: 200px;
- margin: 5px;
- padding: 0;
- list-style: none;
- }
- li a {
- display: inline-block;
- vertical-align: top;
- text-decoration: none;
- border-radius: 4px;
- }
同时为了制作3D效果,为每一个li元素添加透视属性。
CSS Code复制内容到剪贴板- li {
- -webkit-perspective: 400px;
- perspective: 400px;
- }
用于制作3D翻转的遮罩层div.info默认设置为100%的宽度和100%的高度,使用绝对定位,开始时位于左上角位置。然后使用rotate3d()函数将它沿X轴顺时针旋转90度,使其不可见。
CSS Code复制内容到剪贴板- .info {
- -webkit-transform: rotate3d(1, 0, 0, 90deg);
- transform: rotate3d(1, 0, 0, 90deg);
- width: 100%;
- height: 100%;
- padding: 20px;
- position: absolute;
- top: 0;
- left: 0;
- border-radius: 4px;
- pointer-events: none;
- background-color: rgba(26, 188, 156, 0.9);
- }
最后在CSS样式中为鼠标从上下左右4个方向进入和离开时预设了class类,这些class是在鼠标进入网格时,使用JavaScript来检测鼠标的进入方向,然后为其添加相应的class类。
CSS Code复制内容到剪贴板- .in-top .info {
- -webkit-transform-origin: 50% 0%;
- transform-origin: 50% 0%;
- -webkit-animation: in-top 300ms ease 0ms 1 forwards;
- animation: in-top 300ms ease 0ms 1 forwards;
- }
- .in-rightright .info {
- -webkit-transform-origin: 100% 0%;
- transform-origin: 100% 0%;
- -webkit-animation: in-rightright 300ms ease 0ms 1 forwards;
- animation: in-rightright 300ms ease 0ms 1 forwards;
- }
- .in-bottombottom .info {
- -webkit-transform-origin: 50% 100%;
- transform-origin: 50% 100%;
- -webkit-animation: in-bottombottom 300ms ease 0ms 1 forwards;
- animation: in-bottombottom 300ms ease 0ms 1 forwards;
- }
- .in-left .info {
- -webkit-transform-origin: 0% 0%;
- transform-origin: 0% 0%;
- -webkit-animation: in-left 300ms ease 0ms 1 forwards;
- animation: in-left 300ms ease 0ms 1 forwards;
- }
- .out-top .info {
- -webkit-transform-origin: 50% 0%;
- transform-origin: 50% 0%;
- -webkit-animation: out-top 300ms ease 0ms 1 forwards;
- animation: out-top 300ms ease 0ms 1 forwards;
- }
- .out-rightright .info {
- -webkit-transform-origin: 100% 50%;
- transform-origin: 100% 50%;
- -webkit-animation: out-rightright 300ms ease 0ms 1 forwards;
- animation: out-rightright 300ms ease 0ms 1 forwards;
- }
- .out-bottombottom .info {
- -webkit-transform-origin: 50% 100%;
- transform-origin: 50% 100%;
- -webkit-animation: out-bottombottom 300ms ease 0ms 1 forwards;
- animation: out-bottombottom 300ms ease 0ms 1 forwards;
- }
- .out-left .info {
- -webkit-transform-origin: 0% 0%;
- transform-origin: 0% 0%;
- -webkit-animation: out-left 300ms ease 0ms 1 forwards;
- animation: out-left 300ms ease 0ms 1 forwards;
- }
JavaScript
该特效中使用JavaScript来获取鼠标进入网格的方向,为相应的网格动画添加相应的class类。其中getDirection()函数为获取方向函数。
JavaScript Code复制内容到剪贴板- var getDirection = function (ev, obj) {
- var w = obj.offsetWidth,
- h = obj.offsetHeight,
- x = ev.pageX - obj.offsetLeft - w / 2 * (w > h ? h / w : 1),
- y = ev.pageY - obj.offsetTop - h / 2 * (h > w ? w / h : 1),
- d = Math.round(Math.atan2(y, x) / 1.57079633 + 5) % 4;
- return d;
- };
然后通过遍历所有的li元素,通过鼠标进入的方向来添加相应的class类。
JavaScript Code复制内容到剪贴板- var nodes = document.querySelectorAll('li'),
- _nodes = [].slice.call(nodes, 0);
- var addClass = function (ev, obj, state) {
- var direction = getDirection(ev, obj), class_suffix = '';
- obj.className = '';
- switch (direction) {
- case 0:
- class_suffix = '-top';
- break;
- case 1:
- class_suffix = '-right';
- break;
- case 2:
- class_suffix = '-bottom';
- break;
- case 3:
- class_suffix = '-left';
- break;
- }
- obj.classList.add(state + class_suffix);
- };
- _nodes.forEach(function (el) {
- el.addEventListener('mouseover', function (ev) {
- addClass(ev, this, 'in');
- }, false);
- el.addEventListener('mouseout', function (ev) {
- addClass(ev, this, 'out');
- }, false);
- });
以上就是本文的全部内容,希望对大家的学习有所帮助。
原文:http://www.cnblogs.com/w2bc/p/5209690.html
免责声明:本站资源来自互联网收集,仅供用于学习和交流,请遵循相关法律法规,本站一切资源不代表本站立场,如有侵权、后门、不妥请联系本站删除!
《魔兽世界》大逃杀!60人新游玩模式《强袭风暴》3月21日上线
暴雪近日发布了《魔兽世界》10.2.6 更新内容,新游玩模式《强袭风暴》即将于3月21 日在亚服上线,届时玩家将前往阿拉希高地展开一场 60 人大逃杀对战。
艾泽拉斯的冒险者已经征服了艾泽拉斯的大地及遥远的彼岸。他们在对抗世界上最致命的敌人时展现出过人的手腕,并且成功阻止终结宇宙等级的威胁。当他们在为即将于《魔兽世界》资料片《地心之战》中来袭的萨拉塔斯势力做战斗准备时,他们还需要在熟悉的阿拉希高地面对一个全新的敌人──那就是彼此。在《巨龙崛起》10.2.6 更新的《强袭风暴》中,玩家将会进入一个全新的海盗主题大逃杀式限时活动,其中包含极高的风险和史诗级的奖励。
《强袭风暴》不是普通的战场,作为一个独立于主游戏之外的活动,玩家可以用大逃杀的风格来体验《魔兽世界》,不分职业、不分装备(除了你在赛局中捡到的),光是技巧和战略的强弱之分就能决定出谁才是能坚持到最后的赢家。本次活动将会开放单人和双人模式,玩家在加入海盗主题的预赛大厅区域前,可以从强袭风暴角色画面新增好友。游玩游戏将可以累计名望轨迹,《巨龙崛起》和《魔兽世界:巫妖王之怒 经典版》的玩家都可以获得奖励。
更新日志
- 玩家分享《黑神话:悟空》大怨种:想痛快玩游戏花了快400块
- 作者回应《黑神话》墙绘被毁:当地相关部门支持重绘
- 李泉.1995-上海梦【魔岩】【WAV+CUE】
- 何雨雯.1994-给你的歌【天王唱片】【WAV+CUE】
- 群星.1994-神摇第一章·极乐扬州路【D.I.Y】【WAV+CUE】
- 《车烧友 发烧情歌天碟3CD》[WAV/分轨][1.9GB]
- 《薛之谦 情歌不变招牌 霸气情歌2CD》[WAV/分轨][1.2GB]
- 《刘若英 滚石SACD精选》[ISO][1GB]
- 仙境传说新启航牧师怎么加点 牧师属性技能加点推荐
- 仙境传说新启航舞娘怎么加点 舞娘属性技能加点推荐
- 魔兽世界祖尔格拉布在哪 魔兽世界祖尔格拉布位置介绍
- 群星《名列前茅五大顶级发烧男声》2CD[DTS-WAV]
- 群星《经典再现·国语女声》2CD[DTS-WAV]
- 群星《十大民歌天后》2CD[DTS-WAV分轨]
- 《黑神话:悟空》浮屠牢是最糟糕的部分:但也是做得最好的