CSS3制作炫酷帶方向感應(yīng)的鼠標(biāo)滑過圖片3D動畫

這是一款使用CSS3和一點JS來制作的炫酷帶方向感應(yīng)的鼠標(biāo)滑過圖片3D動畫特效。在特效中,當(dāng)用戶的鼠標(biāo)滑過網(wǎng)格中的圖片時,網(wǎng)格中的內(nèi)容遮罩層會出現(xiàn)3D翻轉(zhuǎn)動畫,并且?guī)в蟹较蚋袘?yīng),能夠從鼠標(biāo)進入的方向開始翻轉(zhuǎn),效果非常的酷。
使用方法
HTML結(jié)構(gòu)
該方向感應(yīng)鼠標(biāo)滑過動畫的HTML結(jié)構(gòu)采用無序列表的HTML結(jié)構(gòu)來制作網(wǎng)格布局,每一個<li>元素是一個網(wǎng)格。每個網(wǎng)格中使用一個<svg>元素來進行占位,實際上它是一個圖片的小圖標(biāo)。另外div.info是要進行3D翻轉(zhuǎn)的遮罩層。
- <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樣式
整個網(wǎng)格布局使用無序列表來制作,所有的li元素都采用左浮動。
- 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元素添加透視屬性。
- li {
- -webkit-perspective: 400px;
- perspective: 400px;
- }
用于制作3D翻轉(zhuǎn)的遮罩層div.info默認設(shè)置為100%的寬度和100%的高度,使用絕對定位,開始時位于左上角位置。然后使用rotate3d()函數(shù)將它沿X軸順時針旋轉(zhuǎn)90度,使其不可見。
- .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樣式中為鼠標(biāo)從上下左右4個方向進入和離開時預(yù)設(shè)了class類,這些class是在鼠標(biāo)進入網(wǎng)格時,使用JavaScript來檢測鼠標(biāo)的進入方向,然后為其添加相應(yīng)的class類。
- .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來獲取鼠標(biāo)進入網(wǎng)格的方向,為相應(yīng)的網(wǎng)格動畫添加相應(yīng)的class類。其中g(shù)etDirection()函數(shù)為獲取方向函數(shù)。
- 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元素,通過鼠標(biāo)進入的方向來添加相應(yīng)的class類。
- 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);
- });
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助。
原文:http://www.cnblogs.com/w2bc/p/5209690.html
相關(guān)文章
純CSS3實現(xiàn)鼠標(biāo)滑過按鈕動畫第二節(jié)
這篇文章主要介紹了純CSS3實現(xiàn)鼠標(biāo)滑過按鈕動畫第二節(jié),本文通過實例代碼給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2020-07-16CSS實現(xiàn)鼠標(biāo)滑過鼠標(biāo)點擊代碼寫法
本文給大家分享css代碼實現(xiàn)鼠標(biāo)滑過鼠標(biāo)點擊的寫法,非常不錯,具有參考借鑒價值,需要的朋友參考下吧2016-12-26純CSS3實現(xiàn)8組超炫酷鼠標(biāo)滑過圖片動畫
這篇文章主要為大家分享了8組超炫酷純CSS3鼠標(biāo)滑過圖片動畫效果,每一個動畫效果都很精彩,值得大家學(xué)習(xí)借鑒,感興趣的小伙伴們可以參考一下2016-03-16- 關(guān)于星星評分效果大家一定都不會陌生,當(dāng)鼠標(biāo)滑過的時候會使相應(yīng)的星星變得高亮,下面就介紹一下如何利用css實現(xiàn)鼠標(biāo)滑過五角星高亮效果,對此功能感興趣的朋友一起學(xué)習(xí)吧2016-01-20
純CSS實現(xiàn)鼠標(biāo)滑過顯示子菜單的二級菜單效果
這篇文章主要為大家介紹了純CSS實現(xiàn)鼠標(biāo)滑過顯示子菜單的二級菜單效果,通過簡單的css針對hover設(shè)置實現(xiàn)鼠標(biāo)滑過顯示二級菜單的功能,具有一定參考借鑒價值,需要的朋友可以參2015-09-14CSS實現(xiàn)鼠標(biāo)滑過文字彈出一段說明文字無JS代碼
鼠標(biāo)滑過文字彈出一段說明文字CSS實現(xiàn),無JS代碼,下面代碼直接拷貝了就可用2014-05-20- 彈出層想必大家都有見到過吧,在以前或許是使用js實現(xiàn)的,不過現(xiàn)在我們可以使用純css來實現(xiàn)了,下面有個不錯的示例,感興趣的朋友可以參考下2013-10-16
CSS控制當(dāng)鼠標(biāo)滑過時更換圖片的效果
鼠標(biāo)滑過時更換圖片的效果有很多方法可以實現(xiàn),在本文將為大家介紹喜愛如何通過css來實現(xiàn),感興趣的朋友,不要錯過2013-10-12css實現(xiàn)鼠標(biāo)滑過改變文字(中文變英文)
鼠標(biāo)滑過改變文字的效果想必很多朋友都有遇到過吧,本文為大家介紹下css是如何實現(xiàn)的,感興趣的朋友可以了解下2013-09-09使用css的filter寫鼠標(biāo)滑過效果的實現(xiàn)示例
這篇文章主要介紹了使用css的filter寫鼠標(biāo)滑過效果的實現(xiàn)示例,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編2020-08-13