打开某个活动页面,鼠标一动,屏幕上飘满了礼盒、彩带和气球,这种“礼物环绕特效”总能让人眼前一亮。不少朋友问,这效果是怎么做出来的?其实不难,只要懂点HTML和CSS,再加点JavaScript小技巧,自己也能搞一个。
原理很简单:动态生成+位置浮动
所谓的礼物环绕,本质就是让一些小图标(比如礼盒、星星)围绕着页面某个区域转圈,或者随着鼠标移动而漂浮。我们用DOM动态创建元素,再通过CSS控制动画轨迹,JS负责监听位置变化。
准备素材和结构
先准备好一个小礼物的图标,可以是PNG图,也可以用字体图标或SVG。然后在页面里留个容器,用来挂这些动态元素。
<div id="gift-container" style="position: fixed; top: 0; left: 0; pointer-events: none; z-index: 9999;"></div>
注意设置 pointer-events: none,不然飘着的礼物会挡住页面其他操作。
用JavaScript生成礼物并动起来
接下来写一段JS,监听页面鼠标移动,在光标附近不断生成礼物元素,并给它们加上飘动动画。
document.addEventListener('mousemove', function(e) {
const container = document.getElementById('gift-container');
const gift = document.createElement('div');
gift.innerHTML = '🎁';
gift.style.position = 'absolute';
gift.style.left = (e.clientX - 20) + 'px';
gift.style.top = (e.clientY - 20) + 'px';
gift.style.fontSize = Math.random() * 20 + 16 + 'px';
gift.style.opacity = Math.random() * 0.5 + 0.5;
gift.style.transform = `rotate(${Math.random() * 360}deg)`;
gift.style.transition = 'top 1s ease-out, opacity 1s';
container.appendChild(gift);
// 一秒后淡出并移除
setTimeout(() => {
gift.style.opacity = '0';
gift.style.top = (e.clientY - 100) + 'px';
}, 50);
// 清理DOM避免堆积
setTimeout(() => {
container.removeChild(gift);
}, 1100);
});
这段代码每当你移动鼠标,就会在光标附近“吐”出一个🎁表情,然后让它缓缓上浮、变透明,最后消失。视觉上就像礼物从你滑过的地方冒出来一样。
自定义更炫的效果
如果你不想用emoji,可以换成SVG或图片:
gift.innerHTML = '<img src="gift-icon.svg" width="24">';
还可以加点旋转、缩放动画,用CSS定义:
.gift-float {
animation: floatRotate 1s ease-out forwards;
}
@keyframes floatRotate {
0% { transform: rotate(0deg) scale(1); }
100% { transform: rotate(-20deg) scale(1.2); }
}
把这个类名加到生成的元素上,礼物飞出去的时候会更有动感。
这种特效适合用在节日活动页、抽奖页面或者个人作品集首页,轻量又吸睛。别滥用就行,不然满屏乱飘反而影响体验。