当前位置:首页 > JavaScript

js实现slidedown

2026-02-01 05:06:05JavaScript

实现 SlideDown 效果

使用 JavaScript 实现 SlideDown 效果可以通过操作元素的 heighttransition 属性来完成。以下是几种常见的实现方式:

使用 CSS Transition 和 JavaScript

定义一个 CSS 类,包含过渡效果:

.slide-down {
  max-height: 0;
  overflow: hidden;
  transition: max-height 0.3s ease-out;
}

JavaScript 代码切换类并设置最终高度:

function slideDown(element) {
  element.style.maxHeight = '0';
  element.classList.add('slide-down');

  // 强制重绘
  element.offsetHeight;

  element.style.maxHeight = element.scrollHeight + 'px';

  // 过渡结束后移除类
  element.addEventListener('transitionend', function() {
    element.classList.remove('slide-down');
    element.style.maxHeight = '';
  }, { once: true });
}

使用 requestAnimationFrame 实现动画

更精细控制的版本:

function slideDown(element, duration = 300) {
  const startHeight = 0;
  const endHeight = element.scrollHeight;
  const startTime = performance.now();

  function animate(currentTime) {
    const elapsed = currentTime - startTime;
    const progress = Math.min(elapsed / duration, 1);

    element.style.height = (startHeight + (endHeight - startHeight) * progress) + 'px';

    if (progress < 1) {
      requestAnimationFrame(animate);
    } else {
      element.style.height = '';
    }
  }

  element.style.height = '0px';
  element.style.overflow = 'hidden';
  requestAnimationFrame(animate);
}

使用 jQuery 风格的实现

如果需要类似 jQuery 的 slideDown 方法:

js实现slidedown

function slideDown(element, options = {}) {
  const duration = options.duration || 400;
  const easing = options.easing || 'ease-out';

  element.style.transition = `height ${duration}ms ${easing}`;
  element.style.height = '0';
  element.style.overflow = 'hidden';

  // 触发重排
  element.offsetHeight;

  element.style.height = `${element.scrollHeight}px`;

  const onTransitionEnd = () => {
    element.style.transition = '';
    element.style.height = '';
    element.removeEventListener('transitionend', onTransitionEnd);
  };

  element.addEventListener('transitionend', onTransitionEnd);
}

注意事项

  • 确保目标元素初始状态为 display: none 时,需要先设置为 display: block 才能计算正确高度
  • 对于复杂内容,使用 max-heightheight 更可靠
  • 动画期间设置 overflow: hidden 防止内容溢出
  • 清除动画结束后留下的样式属性

标签: jsslidedown
分享给朋友:

相关文章

js实现二叉树

js实现二叉树

二叉树的基本概念 二叉树是一种树形数据结构,每个节点最多有两个子节点,分别称为左子节点和右子节点。二叉树的常见操作包括插入、删除、遍历等。 二叉树的节点定义 在JavaScript中,二叉树的节点可…

js类实现

js类实现

使用类实现 JavaScript 功能 在 JavaScript 中,类(Class)是一种语法糖,基于原型继承机制。通过 class 关键字可以更直观地定义对象模板。 基本类定义 class…

js实现自举

js实现自举

实现 JavaScript 自举的方法 JavaScript 自举(Bootstrap)通常指通过 JavaScript 动态加载自身或依赖的脚本,实现运行时环境的初始化或扩展。以下是几种常见实现方式…

js实现代码雨

js实现代码雨

实现代码雨效果 使用HTML5 Canvas和JavaScript可以轻松实现经典的代码雨效果。以下是完整的实现代码和说明: HTML结构 <!DOCTYPE html> <…

js实现 功能

js实现 功能

在 JavaScript 中实现功能通常涉及多个关键步骤,具体取决于功能需求。以下是常见功能的实现方法和示例: 基本功能实现 使用函数封装逻辑是最直接的方式。例如,实现一个计算两数之和的函数: f…

js 实现跳转

js 实现跳转

使用 window.location.href 进行跳转 通过修改 window.location.href 可以跳转到指定 URL,浏览器会加载新页面: window.location.hre…