当前位置:首页 > JavaScript

js实现抽屉

2026-03-14 02:22:36JavaScript

实现抽屉效果的方法

使用JavaScript实现抽屉效果可以通过CSS过渡或动画结合事件监听完成。以下是两种常见实现方式:

使用CSS过渡和类切换

HTML结构:

<button id="toggleBtn">切换抽屉</button>
<div class="drawer">
  <div class="drawer-content">抽屉内容</div>
</div>

CSS样式:

.drawer {
  height: 0;
  overflow: hidden;
  transition: height 0.3s ease;
}
.drawer.open {
  height: 200px;
}

JavaScript代码:

const toggleBtn = document.getElementById('toggleBtn');
const drawer = document.querySelector('.drawer');

toggleBtn.addEventListener('click', () => {
  drawer.classList.toggle('open');
});

使用动态高度计算

当抽屉内容高度不确定时:

const toggleBtn = document.getElementById('toggleBtn');
const drawer = document.querySelector('.drawer');
const content = document.querySelector('.drawer-content');

toggleBtn.addEventListener('click', () => {
  if (drawer.style.height === '0px' || !drawer.style.height) {
    drawer.style.height = `${content.scrollHeight}px`;
  } else {
    drawer.style.height = '0';
  }
});

添加动画效果

使用CSS动画实现更流畅的效果:

@keyframes slideDown {
  from { height: 0; }
  to { height: var(--drawer-height); }
}
@keyframes slideUp {
  from { height: var(--drawer-height); }
  to { height: 0; }
}
.drawer.animate-down {
  animation: slideDown 0.3s forwards;
}
.drawer.animate-up {
  animation: slideUp 0.3s forwards;
}

JavaScript部分:

js实现抽屉

toggleBtn.addEventListener('click', () => {
  const contentHeight = content.scrollHeight;

  if (drawer.classList.contains('animate-down')) {
    drawer.style.setProperty('--drawer-height', `${contentHeight}px`);
    drawer.classList.remove('animate-down');
    drawer.classList.add('animate-up');
  } else {
    drawer.style.setProperty('--drawer-height', `${contentHeight}px`);
    drawer.classList.remove('animate-up');
    drawer.classList.add('animate-down');
  }
});

注意事项

  • 确保为抽屉容器设置overflow: hidden属性
  • 移动端考虑添加touch事件支持
  • 性能优化:使用transform替代height动画可获得更好性能
  • 无障碍访问:为按钮添加aria-expanded属性并管理焦点

以上方法可根据具体需求进行调整和组合使用。

标签: 抽屉js
分享给朋友:

相关文章

js实现

js实现

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

js 实现继承

js 实现继承

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

js实现换肤

js实现换肤

使用CSS变量实现换肤 通过CSS变量可以轻松实现主题切换功能。CSS变量在根元素中定义,通过JavaScript动态修改这些变量值。 :root { --primary-color: #349…

vue实现侧边抽屉

vue实现侧边抽屉

使用Vue实现侧边抽屉 Vue可以通过多种方式实现侧边抽屉效果,以下是几种常见方法: 基于Vue原生实现 <template> <div> <button…

链表实现js

链表实现js

链表的基本概念 链表是一种线性数据结构,由一系列节点组成,每个节点包含数据和一个指向下一个节点的指针(单向链表)或两个指针(双向链表)。与数组不同,链表在内存中非连续存储,插入和删除操作更高效,但随机…

js节流实现

js节流实现

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