这是1款应用CSS3和1点JS来制做的酷炫带方位感应的电脑鼠标滑过照片三d动漫殊效。在殊效中,当客户的电脑鼠标滑过网格中的照片时,网格中的內容遮罩层会出現三d旋转动漫,而且带有方位感应,可以从电脑鼠标进到的方位刚开始旋转,实际效果十分的酷。
线上预览 源代码免费下载
应用方式
HTML构造
该方位感应电脑鼠标滑过动漫的HTML构造选用无编码序列表的HTML构造来制做网格合理布局,每个<li>元素是1个网格。每一个网格中应用1个<svg>元向来开展占位,具体上它是1个照片的小标志。此外div.info是要开展三d旋转的遮罩层。
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;
- }
-
另外以便制做三d实际效果,为每个li元素加上透視特性。
CSS Code拷贝內容到剪贴板
- li {
- -webkit-perspective: 400px;
- perspective: 400px;
- }
用于制做三d旋转的遮罩层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