当前位置:首页 > 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 方法:

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 防止内容溢出
  • 清除动画结束后留下的样式属性

js实现slidedown

标签: jsslidedown
分享给朋友:

相关文章

js实现

js实现

实现 JavaScript 功能的方法 在 JavaScript 中实现特定功能通常涉及多个步骤。以下是常见的实现方法: 基础语法和变量声明 使用 let 或 const 声明变量: let…

js实现轮播

js实现轮播

实现轮播图的基本思路 轮播图的核心逻辑是通过定时切换展示的图片或内容,通常结合左右滑动按钮和指示器(小圆点)增强交互性。以下是基于原生JavaScript的实现方法。 HTML结构 构建轮播图的H…

js实现继承

js实现继承

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

js实现选项卡

js实现选项卡

实现选项卡的基本思路 选项卡通常由一组标签和对应的内容面板组成。点击标签时,显示对应的内容面板,隐藏其他面板。实现这一效果需要结合HTML结构、CSS样式和JavaScript交互逻辑。 HTML…

js 实现vue

js 实现vue

Vue.js 的基本实现 在 JavaScript 中实现 Vue.js 的核心功能,可以通过数据绑定、响应式系统和虚拟 DOM 来实现。以下是实现 Vue.js 核心功能的简化版本。 数据响应式系…

js防抖和节流实现

js防抖和节流实现

防抖(Debounce)的实现 防抖的核心思想是在事件被触发后,延迟执行回调函数。如果在延迟时间内再次触发事件,则重新计时。适用于输入框搜索、窗口大小调整等场景。 function debounc…