用CSS變量實現鼠標懸停動效


先放兩張效果圖。

 

前兩天在微信公眾號JavaScript里看到一篇文章 --- 《利用CSS變量實現令人震驚的懸浮效果》,覺得好好看好好玩,就自己動手寫了一下。

  

頁面DOM。

1 <div class="button"><span>Hover me I'm awesome</span></div>

 

鼠標懸停動效,顧名思義,跟鼠標是有很大關系的。首先,我們得 知道鼠標的位置

1 document.querySelector('.button').onmousemove = (e) => {
2   const x = e.pageX - e.target.offsetLeft;
3   const y = e.pageY - e.target.offsetTop;
4   e.target.style.setProperty('--x', `${ x }px`);
5   e.target.style.setProperty('--y', `${ y }px`);
6 }

1、監聽元素的鼠標移動事件;

2、計算鼠標相對元素的位置;

3、將鼠標位置存入css變量中(--x,--y)。

 

利用css實現動效 

 1 .button{
 2     position: relative;
 3     appearance: none;
 4     background: #fe1251;
 5     padding: 1em 2em;
 6     border: none;
 7     color: white;
 8     font-size: 1.2em;
 9     cursor: pointer;
10     outline: none;
11     overflow: hidden;
12     border-radius: 100px;
13     transition: all .15s ease,transform .2s ease-in-out;
14   }
15   .button >span{
16     position: relative;
17     pointer-events: none;
18     /*文字禁止選中*/
19     -webkit-user-select: none;
20   }
21   .button::before {
22     --size: 0;
23     content: ' ';
24     position: absolute;
25     left: var(--x);
26     top: var(--y);
27     width: var(--size);
28     height: var(--size);
29     background: radial-gradient(circle closest-side, #402bf2, transparent);
30     transform: translate(-50%, -50%);
31     transition: width .2s ease, height .2s ease;
32   }
33   .button:hover::before {
34     --size: 400px;
35   }
36   .button:hover{
37     box-shadow: 0 5px 45px rgba(0,0,0,.4);
38     transform: scale(1.03);
39   }

 

好啦,圖一炫酷的動畫效果出現啦~~~

 

圖二是用 css3 transform 的3D效果實現的。主要css代碼是

transform: rotateX(var(--y)) rotateY(var(--x)) translateZ(var(--z));

需注意的是使用 translateZ 或其它css 3D效果,需要為3D元素的父容器設置perspective屬性,用來指定視距。

 

css3 3D transform變換  可以看看https://www.zhangxinxu.com/wordpress/2012/09/css3-3d-transform-perspective-animate-transition/

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM