在做个人博客或者社区类网站时,总想加点小细节让页面更生动。比如用户点击“点赞”后,不是干巴巴地数字+1,而是来个炫酷的火焰动画,视觉反馈立马拉满。
为什么选火焰特效?
比起普通的缩放或变色,火焰特效更有冲击力。尤其适合游戏资讯、动漫评论这类偏年轻化的站点。试想,你发了一篇神评,别人一点赞,火苗“呼”地一下窜出来,是不是感觉内容都燃起来了?
实现思路很简单
用 CSS 动画配合 JavaScript 控制状态就行。先写一个点赞按钮的基本结构:
<button class="like-btn" id="likeBtn">
<span class="icon">👍</span>
<span class="count">0</span>
<span class="flame" aria-hidden="true">🔥</span>
</button>
接着给火焰加个默认隐藏的动画样式:
.like-btn {
position: relative;
padding: 10px 15px;
font-size: 16px;
border: none;
background: #f0f0f0;
border-radius: 8px;
cursor: pointer;
}
.flame {
position: absolute;
top: -10px;
left: 50%;
transform: translateX(-50%);
opacity: 0;
font-size: 24px;
animation: flame-animation 0.6s ease-out forwards;
pointer-events: none;
}
.flame.active {
opacity: 1;
}
@keyframes flame-animation {
0% {
transform: translateX(-50%) translateY(0);
opacity: 0;
}
50% {
opacity: 1;
}
100% {
transform: translateX(-50%) translateY(-20px);
opacity: 0;
}
}
绑定点击事件触发特效
用几行 JS 控制动画播放:
document.getElementById('likeBtn').addEventListener('click', function() {
const countElem = this.querySelector('.count');
const flame = this.querySelector('.flame');
// 数字+1
countElem.textContent = parseInt(countElem.textContent) + 1;
// 清除已有动画
flame.classList.remove('active');
void flame.offsetWidth; // 强制重绘
// 触发动画
flame.classList.add('active');
});
这样每次点击,火苗就会从按钮顶部“喷发”一下然后消失,效果自然又不扰民。
可以再加点细节
如果觉得单个火苗太单调,可以用多个 <span class="flame"> 叠加不同延迟的动画,模拟火焰迸发的感觉。也可以换图标,比如星星、火花、音符,适配不同主题。
这种小特效不会增加多少性能负担,但能让用户感受到“这个网站有人味儿”。上线后你会发现,有些人会故意连点几下,就为了多看几遍火焰——这说明他们愿意和你的页面互动了。