您好,登錄后才能下訂單哦!
本篇內容介紹了“CSS3制作帶方向感應的鼠標滑過圖片3D動畫”的有關知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領大家學習一下如何處理這些情況吧!希望大家仔細閱讀,能夠學有所成!
這是一款使用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'>
<h4>...</h4>
<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);
});
“CSS3制作帶方向感應的鼠標滑過圖片3D動畫”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識可以關注億速云網站,小編將為大家輸出更多高質量的實用文章!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。