当前位置:首页 > 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实现日历的核心是动态生成日期表格,并处理月份切换逻辑。需要计算当前月的天数、起始星期几,并动态渲染到页面上。 获取当前日期信息 通过Date对象获取当前年…

js 实现继承

js 实现继承

原型链继承 通过让子类的原型对象指向父类的实例来实现继承。子类实例可以访问父类原型上的属性和方法。 function Parent() { this.name = 'parent'; } Par…

js 进度条的实现

js 进度条的实现

使用 HTML 和 CSS 创建基础进度条 HTML 结构可以简单使用一个 div 元素作为容器,内部嵌套另一个 div 表示进度: <div class="progress-containe…

原生js实现轮播图

原生js实现轮播图

基本结构搭建 HTML部分需要包含轮播图容器、图片列表及导航按钮。结构示例如下: <div class="slider-container"> <div class="slid…

js实现自举

js实现自举

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

js实现交换

js实现交换

交换变量的方法 在JavaScript中,交换两个变量的值有多种方法。以下是常见的几种实现方式: 使用临时变量 通过引入一个临时变量来存储其中一个变量的值,实现交换: let a = 1; le…