当前位置:首页 > JavaScript

js实现淡入

2026-03-14 06:29:20JavaScript

js实现淡入淡出的方法

使用纯JavaScript实现淡入效果

通过修改元素的opacity属性,结合setIntervalrequestAnimationFrame实现逐渐显示的效果:

function fadeIn(element, duration) {
  let opacity = 0;
  const interval = 10;
  const delta = interval / duration;

  const timer = setInterval(function() {
    opacity += delta;
    element.style.opacity = opacity;

    if (opacity >= 1) {
      clearInterval(timer);
    }
  }, interval);
}

使用CSS过渡配合JavaScript

更高效的实现方式是利用CSS过渡特性,只需通过JavaScript触发类名变化:

.fade-in {
  opacity: 1;
  transition: opacity 0.5s ease-in;
}
function fadeIn(element) {
  element.style.opacity = 0;
  element.classList.add('fade-in');
  element.style.opacity = 1;
}

requestAnimationFrame实现

高性能动画推荐使用这个API,能保证与浏览器刷新率同步:

function fadeIn(element, duration) {
  let start = null;
  element.style.opacity = 0;

  function step(timestamp) {
    if (!start) start = timestamp;
    const progress = timestamp - start;
    const opacity = Math.min(progress / duration, 1);
    element.style.opacity = opacity;

    if (progress < duration) {
      window.requestAnimationFrame(step);
    }
  }
  window.requestAnimationFrame(step);
}

带回调函数的版本

可以在动画完成后执行回调函数:

function fadeIn(element, duration, callback) {
  let opacity = 0;
  const interval = 10;
  const delta = interval / duration;

  const timer = setInterval(function() {
    opacity += delta;
    element.style.opacity = opacity;

    if (opacity >= 1) {
      clearInterval(timer);
      if (callback) callback();
    }
  }, interval);
}

注意事项

js实现淡入

  • 确保目标元素初始状态为opacity: 0display: block(非none
  • 对于需要先隐藏再淡入的元素,应先设置display属性再开始淡入
  • 考虑添加will-change: opacity优化性能
  • 移动端注意硬件加速,可添加transform: translateZ(0)

标签: js
分享给朋友:

相关文章

css3结合js制作

css3结合js制作

CSS3 结合 JavaScript 制作动态效果 CSS3 和 JavaScript 结合可以实现丰富的动态效果,包括动画、交互和响应式设计。以下是几种常见的实现方式: CSS3 动画与 Java…

js实现图片放大缩小

js实现图片放大缩小

实现图片放大缩小的基础方法 使用CSS的transform: scale()属性可以快速实现图片的放大缩小效果。通过JavaScript动态修改该属性值: const img = document.…

js 实现链表

js 实现链表

链表的基本概念 链表是一种线性数据结构,由一系列节点组成,每个节点包含数据和指向下一个节点的指针。与数组不同,链表在内存中是非连续存储的,插入和删除操作效率较高。 链表的实现 在 JavaScrip…

js实现预览

js实现预览

文件上传预览实现 使用JavaScript实现文件上传预览功能,可以通过FileReader对象读取文件内容并显示预览。以下代码支持图片、文本和PDF文件的预览: // HTML部分需要包含…

js实现dh

js实现dh

JavaScript 实现 DH(Diffie-Hellman)密钥交换 Diffie-Hellman(DH)密钥交换是一种安全协议,允许双方在不安全的通信信道上建立一个共享密钥。以下是如何在 Jav…

js节流实现

js节流实现

节流的概念 节流(Throttle)是一种限制函数执行频率的技术,确保函数在一定时间间隔内只执行一次。常用于滚动事件、窗口调整等高频触发的场景。 基础实现方法 使用时间戳判断是否执行函数: fun…