【经验分享】如何实现自定义的actionSheet组件

简介: 【经验分享】如何实现自定义的actionSheet组件
目前支付宝小程序的安卓和IOS的UI样式有一些差异较大,然而设计却不依不饶的让你按照设计图来。使用官方的actionSheet会发现安卓在中间弹出,而IOS从底部往上弹出
为了应对这个差异我们手动撸一个actionSheet吧。

效果图如下。

首先在需要的地方引用该组件(因文章内规则限制,只能先截图了):

<button class="container" onTap="handleTogger">点我弹出actionSheet</button>
<action-sheet 
  visible="{{visible}}" 
  actions="{{actions}}" 
  show-cancel 
  onCancle="handleTogger" 
  onTogger="handleToggerItem" 
  mask-closable="{{true}}" 
/>


主页面JS,主要做actionsheet的显示与隐藏,以及点击单个选项后拿到下标做后续处理。

Page({
  data: {
    visible: false,
    actions: [{
      name: '生成图片',
      icon: 'https://qiniu-image.qtshe.com/201809104.png'
    },
    {
      name: '转发给朋友或生活圈',
      icon: 'https://qiniu-image.qtshe.com/201809105.png',
      openType: 'share'  //支持传入button的openType属性
    }]
  },
  handleTogger() {
    this.setData({
      visible: !this.data.visible
    })
  },
  handleToggerItem(e) {
    console.log('当前下标' + e.index)
    if (e.index === 0) {
       //第一个选项
    }
  },
});


至于自定义组件内操作如下:

通过外部传递进来的字段判断是否显示icon,是否显示取消按钮,是否点击蒙层关闭等效果:

<view class="qts-as-mask qts-class-mask {{ visible ? 'qts-as-mask-show' : '' }}" onTap="handleToggerMask" disable-scroll></view>
<view class="qts-class qts-as {{ visible ? 'qts-as-show' : '' }}" disable-scroll>
  <view class="qts-as-header qts-class-header">
    <slot name="header"></slot>
  </view>
  <view class="qts-as-actions">
    <view class="qts-as-action-item" a:for="{{actions}}" a:key="name">
      <button hover-class="none" onTap="handleToggerItem" data-index="{{index}}" open-type="{{item.openType}}" class="qts-as-btn-qts" >
          <image a:if="{{item.icon}}" src="{{item.icon}}" class="qts-btn-image" />
          <view class="qts-as-btn-text">{{item.name}}</view>
      </button>
    </view>
  </view>
  <view class="qts-as-cancel" a:if="{{showCancel}}">
    <button hover-class="none" class="qts-as-cancel-btn" onTap="handleToggerCancel">取消</button>
  </view>
</view>


最后附上代码片段:点击可直接查看效果。

https://minicode.alipay.com/share/4d1a75da-cb6b-40f1-897b-469c8eadf117

以上就是一个简单的actionSheet实现方案,有其他好用的UI效果大家可互相讨论。

目录
相关文章
|
编解码 算法 Java
构建高效的Android应用:内存优化策略详解
随着智能手机在日常生活和工作中的普及,用户对移动应用的性能要求越来越高。特别是对于Android开发者来说,理解并实践内存优化是提升应用程序性能的关键步骤。本文将深入探讨针对Android平台的内存管理机制,并提供一系列实用的内存优化技巧,以帮助开发者减少内存消耗,避免常见的内存泄漏问题,并确保应用的流畅运行。
|
存储 前端开发 JavaScript
ahooks 正式发布:值得拥抱的 React Hooks 工具库
ahook定位于一套基于 React Hooks 的工具库,核心围绕 React Hooks 的逻辑封装能力,降低代码复杂度和避免团队的重复建设为背景,共同建设和维护阿里经济体层面的 React Hooks 库。
24307 1
ahooks 正式发布:值得拥抱的 React Hooks 工具库
|
网络协议 Linux 应用服务中间件
kali的常用命令汇总Linux
kali的常用命令汇总linux
1545 7
|
小程序 Android开发 iOS开发
【经验分享】如何手撸一个switch组件。
【经验分享】如何手撸一个switch组件。
220 7
|
IDE 小程序 前端开发
【经验分享】支付宝社区高效的提问技巧
【经验分享】支付宝社区高效的提问技巧
388 4
|
开发工具 C++ git
利用VS Code提升开发效率的五大插件推荐
本文推荐了五款能显著提升开发效率的VS Code插件:ESLint用于代码质量和风格检查;Prettier自动格式化代码;GitLens增强Git功能;Live Server提供前端实时预览;Docker支持容器管理。
|
Web App开发 缓存 JavaScript
如何排查 Electron V8 引发的内存 OOM 问题(中)
如何排查 Electron V8 引发的内存 OOM 问题(中)
2264 0
|
安全 网络协议 Linux
如何在IDEA中使用固定公网地址SSH远程连接服务器开发环境(一)
该文介绍了如何通过IDEA设置远程连接Linux服务器的步骤,使用Cpolar内网穿透工具实现在没有公网IP的情况下进行远程开发。主要内容包括检查Linux SSH服务、本地连接测试、在Linux上安装Cpolar、创建远程连接的公网地址、公网远程连接测试以及固定连接公网地址。文章还提供了相关截图辅助说明,适用于IDEA2023.2.5版本。
|
资源调度 数据可视化 数据处理
R语言改进的DCC-MGARCH:动态条件相关系数模型、BP检验分析股市数据
R语言改进的DCC-MGARCH:动态条件相关系数模型、BP检验分析股市数据