【经验分享】如何实现自定义的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效果大家可互相讨论。

目录
相关文章
|
5月前
|
存储 小程序 JavaScript
【微信小程序】-- 自定义组件 -- 数据、方法和属性(三十三)
【微信小程序】-- 自定义组件 -- 数据、方法和属性(三十三)
|
3月前
|
小程序 JavaScript 前端开发
【微信小程序-原生开发】实用教程06-轮播图、分类页签 tab 、成员列表(含Tdesign升级,切换调试基础库,设置全局样式,配置组件按需注入,添加图片素材,wx:for,生命周期 onLoad)
【微信小程序-原生开发】实用教程06-轮播图、分类页签 tab 、成员列表(含Tdesign升级,切换调试基础库,设置全局样式,配置组件按需注入,添加图片素材,wx:for,生命周期 onLoad)
108 0
|
5月前
|
小程序 IDE 开发工具
【社区每周】修复开启样式隔离后, picker-view 组件部分属性不生效(11月第二期)
【社区每周】修复开启样式隔离后, picker-view 组件部分属性不生效(11月第二期)
43 10
|
5月前
|
小程序
【微信小程序】-- 自定义组件 - 数据监听器 - 案例 (三十五)
【微信小程序】-- 自定义组件 - 数据监听器 - 案例 (三十五)
|
JavaScript 前端开发
自己动手封装弹窗组件
自己动手封装弹窗组件
162 2
|
JSON 数据格式
通过一个具体的例子,深入了解 SAP UI5 控件数据双向绑定的工作原理和问题排查方法试读版
通过一个具体的例子,深入了解 SAP UI5 控件数据双向绑定的工作原理和问题排查方法试读版
|
前端开发
前端学习笔记202305学习笔记第二十三天-重构菜单组件2
前端学习笔记202305学习笔记第二十三天-重构菜单组件2
51 1
|
前端开发
前端学习笔记202305学习笔记第二十二天-新增修改弹框复用5
前端学习笔记202305学习笔记第二十二天-新增修改弹框复用5
56 0
|
前端开发
前端学习笔记202305学习笔记第二十二天-新增修改弹框复用1
前端学习笔记202305学习笔记第二十二天-新增修改弹框复用1
40 0
|
前端开发
前端学习笔记202305学习笔记第二十三天-重构菜单组件3
前端学习笔记202305学习笔记第二十三天-重构菜单组件3
51 0