当前位置:首页 > JavaScript

js实现actionsheet

2026-01-31 19:52:33JavaScript

实现 ActionSheet 的基本思路

使用纯 JavaScript 实现 ActionSheet 需要创建一个浮层,包含多个操作按钮和一个取消按钮。通过 CSS 控制动画效果和布局,JavaScript 处理点击事件和显示/隐藏逻辑。

HTML 结构示例

<div class="action-sheet">
  <div class="action-sheet-mask"></div>
  <div class="action-sheet-container">
    <div class="action-sheet-content">
      <div class="action-sheet-item">选项1</div>
      <div class="action-sheet-item">选项2</div>
      <div class="action-sheet-item">选项3</div>
    </div>
    <div class="action-sheet-cancel">取消</div>
  </div>
</div>

CSS 样式

.action-sheet {
  position: fixed;
  top: 0;
  left: 0;
  width: 100%;
  height: 100%;
  z-index: 1000;
  display: none;
}

.action-sheet-mask {
  position: absolute;
  top: 0;
  left: 0;
  width: 100%;
  height: 100%;
  background-color: rgba(0, 0, 0, 0.5);
}

.action-sheet-container {
  position: absolute;
  bottom: 0;
  left: 0;
  width: 100%;
  background-color: #f5f5f5;
  transform: translateY(100%);
  transition: transform 0.3s ease;
}

.action-sheet.show .action-sheet-container {
  transform: translateY(0);
}

.action-sheet-content {
  margin-bottom: 8px;
  border-radius: 10px 10px 0 0;
  background-color: #fff;
}

.action-sheet-item {
  padding: 15px;
  text-align: center;
  border-bottom: 1px solid #eee;
}

.action-sheet-item:last-child {
  border-bottom: none;
}

.action-sheet-cancel {
  padding: 15px;
  text-align: center;
  background-color: #fff;
  border-radius: 10px;
}

JavaScript 控制逻辑

// 显示 ActionSheet
function showActionSheet() {
  const actionSheet = document.querySelector('.action-sheet');
  actionSheet.classList.add('show');
}

// 隐藏 ActionSheet
function hideActionSheet() {
  const actionSheet = document.querySelector('.action-sheet');
  actionSheet.classList.remove('show');
}

// 绑定事件
document.addEventListener('DOMContentLoaded', function() {
  // 点击选项
  document.querySelectorAll('.action-sheet-item').forEach(item => {
    item.addEventListener('click', function() {
      console.log('选择了:', this.textContent);
      hideActionSheet();
    });
  });

  // 点击取消
  document.querySelector('.action-sheet-cancel').addEventListener('click', hideActionSheet);

  // 点击遮罩
  document.querySelector('.action-sheet-mask').addEventListener('click', hideActionSheet);
});

// 触发显示 ActionSheet 的按钮
document.getElementById('showActionSheetBtn').addEventListener('click', showActionSheet);

动态创建 ActionSheet

如果需要动态创建 ActionSheet,可以使用以下函数:

js实现actionsheet

function createActionSheet(items) {
  const actionSheet = document.createElement('div');
  actionSheet.className = 'action-sheet';

  const html = `
    <div class="action-sheet-mask"></div>
    <div class="action-sheet-container">
      <div class="action-sheet-content">
        ${items.map(item => `<div class="action-sheet-item">${item}</div>`).join('')}
      </div>
      <div class="action-sheet-cancel">取消</div>
    </div>
  `;

  actionSheet.innerHTML = html;
  document.body.appendChild(actionSheet);

  // 绑定事件
  actionSheet.querySelector('.action-sheet-mask').addEventListener('click', () => {
    actionSheet.remove();
  });

  actionSheet.querySelector('.action-sheet-cancel').addEventListener('click', () => {
    actionSheet.remove();
  });

  actionSheet.querySelectorAll('.action-sheet-item').forEach(item => {
    item.addEventListener('click', () => {
      console.log('选择了:', item.textContent);
      actionSheet.remove();
    });
  });

  // 显示
  setTimeout(() => {
    actionSheet.classList.add('show');
  }, 0);

  return actionSheet;
}

// 使用示例
createActionSheet(['选项1', '选项2', '选项3']);

注意事项

  1. 确保 CSS 中的定位属性正确设置,ActionSheet 需要覆盖整个屏幕
  2. 动画效果通过 CSS transition 实现,避免使用 JavaScript 动画
  3. 点击遮罩或取消按钮都应关闭 ActionSheet
  4. 动态创建的 ActionSheet 使用后应从 DOM 中移除,避免内存泄漏
  5. 移动端需要考虑触摸事件和滚动穿透问题

扩展功能

  1. 添加标题栏
  2. 支持图标+文字选项
  3. 添加危险操作选项(红色文字)
  4. 支持异步加载选项
  5. 添加回调函数处理选项选择

标签: jsactionsheet
分享给朋友:

相关文章

js实现类

js实现类

JavaScript 实现类的几种方式 JavaScript 是一种基于原型的语言,但在 ES6 之后引入了 class 语法糖,使得实现类更加直观。以下是几种常见的实现方式: 使用构造函数 传统的…

js实现延迟

js实现延迟

实现延迟的方法 在JavaScript中,实现延迟操作有多种方式,以下是几种常见的方法: 使用setTimeout函数 setTimeout是JavaScript中最常用的延迟执行方法。它接受一个回…

js实现百叶窗

js实现百叶窗

使用CSS和JavaScript实现百叶窗效果 通过CSS动画和JavaScript事件监听可以实现百叶窗效果。核心思路是将内容区域分割为多个条状元素,通过控制它们的展开/折叠状态来模拟百叶窗。 &…

js实现变形

js实现变形

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

js实现游标

js实现游标

使用JavaScript实现游标 在JavaScript中,可以通过操作DOM元素的cursor样式属性来实现自定义游标效果。以下是几种常见的实现方法: 修改默认鼠标指针样式 通过CSS的curso…

使用js实现

使用js实现

使用JavaScript实现 JavaScript可以通过Math.random()函数生成随机数,结合其他方法可以实现多种随机数生成需求。 // 生成0到1之间的随机小数 const random…