当前位置:首页 > 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
分享给朋友:

相关文章

vue实现侧边抽屉

vue实现侧边抽屉

实现侧边抽屉的基本方法 在Vue中实现侧边抽屉效果,可以通过以下几种方式完成。侧边抽屉通常用于导航菜单、设置面板或其他需要从屏幕边缘滑出的内容。 使用Vue原生组件 通过Vue的条件渲染和CSS过…

js实现图片轮播

js实现图片轮播

实现基础图片轮播 使用HTML、CSS和JavaScript创建一个简单的图片轮播。HTML部分定义轮播容器和图片,CSS设置样式和动画效果,JavaScript处理轮播逻辑。 <div cl…

js实现拷贝

js实现拷贝

实现文本拷贝 使用 document.execCommand 方法(已废弃但兼容性较好): function copyText(text) { const textarea = document…

js实现定位

js实现定位

使用Geolocation API获取当前位置 在JavaScript中,可以通过浏览器内置的Geolocation API获取用户的地理位置信息。该API需要用户授权才能访问位置数据。 if (n…

js实现刷新

js实现刷新

刷新当前页面 使用 location.reload() 方法可以强制刷新当前页面。该方法接受一个布尔参数,默认为 false,表示从缓存中加载页面;设为 true 时强制从服务器重新加载。 // 从…

vue js实现登录

vue js实现登录

Vue.js 登录功能实现 依赖安装 确保项目已安装 Vue.js 和必要的依赖库(如 Vue Router、Axios)。通过以下命令安装: npm install vue-router axio…