2026-10-23 16:57:39
JavaScript实现元素淡入淡出的核心是动态调整元素的opacity属性,结合定时器或浏览器优化机制实现平滑过渡。以下是4种常见实现技巧及优化方案:

通过定时器逐步增加透明度,实现从透明到完全显示的过渡。
function fadeIn(element, duration) { element.style.opacity = 0; element.style.display = 'block'; let opacity = 0; const interval = duration / 100; // 分割为100步 const intervalId = setInterval(() => { opacity += 0.01; element.style.opacity = opacity; if (opacity >= 1) clearInterval(intervalId); }, interval);}// 示例:500ms淡入const myElement = document.getElementById('myElement');fadeIn(myElement, 500);2. 使用setInterval实现淡出与淡入逻辑相反,逐步减少透明度直至隐藏元素。
function fadeOut(element, duration) { element.style.opacity = 1; let opacity = 1; const interval = duration / 100; const intervalId = setInterval(() => { opacity -= 0.01; element.style.opacity = opacity; if (opacity <= 0) { clearInterval(intervalId); element.style.display = 'none'; } }, interval);}// 示例:500ms淡出fadeOut(myElement, 500);二、高性能实现技巧3. 使用requestAnimationFrame实现淡入利用浏览器优化机制,根据刷新率动态调整透明度,性能更优。
function fadeInRAF(element, duration) { element.style.opacity = 0; element.style.display = 'block'; let startTime = null; function animate(currentTime) { if (!startTime) startTime = currentTime; const progress = currentTime - startTime; const opacity = Math.min(progress / duration, 1); element.style.opacity = opacity; if (progress < duration) { requestAnimationFrame(animate); } } requestAnimationFrame(animate);}// 示例:500ms淡入fadeInRAF(myElement, 500);4. 使用requestAnimationFrame实现淡出逻辑与淡入类似,但透明度计算方向相反。
function fadeOutRAF(element, duration) { element.style.opacity = 1; let startTime = null; function animate(currentTime) { if (!startTime) startTime = currentTime; const progress = currentTime - startTime; const opacity = Math.max(1 - progress / duration, 0); element.style.opacity = opacity; if (progress < duration) { requestAnimationFrame(animate); } else { element.style.display = 'none'; } } requestAnimationFrame(animate);}// 示例:500ms淡出fadeOutRAF(myElement, 500);三、优化方案1. 性能优化通过缓动函数(Easing Functions)实现非线性动画效果:

通过合理选择实现方式(如简单场景用setInterval,高性能需求用requestAnimationFrame)并结合优化策略,可显著提升动画流畅度。