当前位置:首页 > 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 中实现特定功能通常涉及多个步骤。以下是常见的实现方法: 基础语法和变量声明 使用 let 或 const 声明变量: let co…

js实现tab选项卡切换

js实现tab选项卡切换

实现Tab选项卡切换的JavaScript方法 使用纯JavaScript实现Tab切换功能,可以通过监听点击事件动态切换内容显示状态。以下是两种常见实现方式: 基础DOM操作实现 // 获取所有…

js实现授权

js实现授权

授权流程设计 授权流程通常涉及前端与后端的交互,常见方案包括OAuth2.0、JWT等。以JWT为例的典型流程: 用户提交凭证(如用户名密码)到认证服务 服务端验证通过后生成包含用户信息的J…

js实现vue路由

js实现vue路由

Vue 路由的基本实现 在 Vue.js 中实现路由功能通常使用 Vue Router 库。Vue Router 是 Vue.js 官方的路由管理器,用于构建单页面应用(SPA)。 安装 Vue R…

js实现文字滚动

js实现文字滚动

实现文字滚动的几种方法 使用CSS动画实现滚动 通过CSS的@keyframes和transform属性可以实现平滑的文字滚动效果。 <style> .scroll-text { w…

js实现滚动

js实现滚动

实现滚动效果的方法 在JavaScript中实现滚动效果可以通过多种方式完成,以下是一些常见的方法: 使用window.scrollTo() window.scrollTo()方法可以将页面滚动到指…