当前位置:首页 > JavaScript

js 实现抽屉

2026-03-02 07:34:33JavaScript

实现抽屉效果的 JavaScript 方法

使用 CSS 和 JavaScript 切换类

通过添加或移除 CSS 类来控制抽屉的显示与隐藏。CSS 定义抽屉的初始状态(如 transform: translateX(-100%)),JavaScript 切换类来改变状态。

.drawer {
  position: fixed;
  top: 0;
  left: 0;
  width: 300px;
  height: 100%;
  background: #fff;
  transform: translateX(-100%);
  transition: transform 0.3s ease;
}
.drawer.open {
  transform: translateX(0);
}
const drawer = document.querySelector('.drawer');
const toggleButton = document.querySelector('.toggle-button');

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

动态修改内联样式

直接通过 JavaScript 修改元素的 style 属性,适用于需要动态计算位置的场景。

const drawer = document.querySelector('.drawer');
const toggleButton = document.querySelector('.toggle-button');

toggleButton.addEventListener('click', () => {
  const isOpen = drawer.style.transform === 'translateX(0px)';
  drawer.style.transform = isOpen ? 'translateX(-100%)' : 'translateX(0)';
});

使用动画库(如 GSAP)

通过 GSAP 实现更复杂的动画效果,例如弹性动画或缓动曲线。

import { gsap } from 'gsap';

const drawer = document.querySelector('.drawer');
const toggleButton = document.querySelector('.toggle-button');

toggleButton.addEventListener('click', () => {
  const isOpen = drawer.style.transform === 'translateX(0px)';
  gsap.to(drawer, {
    x: isOpen ? -300 : 0,
    duration: 0.5,
    ease: 'power2.out'
  });
});

响应式抽屉实现

结合媒体查询和 JavaScript,在移动端和桌面端适配不同的抽屉行为。

@media (max-width: 768px) {
  .drawer {
    width: 80%;
  }
}
const drawer = document.querySelector('.drawer');
const toggleButton = document.querySelector('.toggle-button');

toggleButton.addEventListener('click', () => {
  if (window.innerWidth < 768) {
    drawer.classList.toggle('open');
  } else {
    // 桌面端其他逻辑
  }
});

无障碍优化

为抽屉添加 ARIA 属性和键盘事件支持,确保屏幕阅读器和键盘操作可用。

js 实现抽屉

const drawer = document.querySelector('.drawer');
const toggleButton = document.querySelector('.toggle-button');

toggleButton.addEventListener('click', () => {
  const isOpen = drawer.classList.toggle('open');
  toggleButton.setAttribute('aria-expanded', isOpen);
});

document.addEventListener('keydown', (e) => {
  if (e.key === 'Escape' && drawer.classList.contains('open')) {
    drawer.classList.remove('open');
    toggleButton.setAttribute('aria-expanded', 'false');
  }
});

注意事项

  • 性能优化:使用 transformopacity 属性触发 GPU 加速,避免重排。
  • 遮罩层:为抽屉添加半透明遮罩(overlay)以提升用户体验。
  • 状态管理:通过 data-* 属性或变量记录抽屉状态,避免频繁查询 DOM。

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

相关文章

js实现轮播

js实现轮播

实现基础轮播效果 使用HTML结构创建轮播容器和图片元素: <div class="carousel"> <div class="carousel-inner">…

vue实现js休眠

vue实现js休眠

Vue 中实现 JavaScript 休眠 在 Vue 中实现 JavaScript 休眠通常需要使用异步方式,以避免阻塞主线程。以下是几种常见方法: 使用 setTimeout 和 Promise…

js实现轮播

js实现轮播

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

原生js实现轮播图

原生js实现轮播图

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

js 实现vue

js 实现vue

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

js实现变形

js实现变形

使用 CSS 和 JavaScript 实现元素变形 在 JavaScript 中实现变形效果通常结合 CSS 的 transform 属性,通过动态修改该属性实现元素的旋转、缩放、倾斜或平移。 基…