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

目录
打赏
0
6
6
0
197
分享
相关文章
鸿蒙应用开发从入门到入行 - 篇6:数据监听器、滚动、侧滑功能
在本篇文章里,您将掌握监听器、滚动、侧滑等相关内容,助力你开发出更具交互的案例。
69 9
鸿蒙应用开发从入门到入行 - 篇6:数据监听器、滚动、侧滑功能
【亮剑】在React中如何通过点击事件控制组件显示与隐藏,包括基础概念和高级应用
【4月更文挑战第30天】本文介绍了在React中如何通过点击事件控制组件显示与隐藏,包括基础概念和高级应用。使用`useState`钩子和Context API可实现状态驱动的条件渲染,通过CSS类控制组件样式,或利用React Portals在DOM不同位置渲染。性能优化应注意避免不必要的渲染、合理使用Keys、优化事件处理器、使用Memoization及清理资源。测试和验证确保逻辑正确性,以构建动态用户界面并提升应用性能。
723 0
【微信小程序】-- 自定义组件 - 数据监听器 - 案例 (三十五)
【微信小程序】-- 自定义组件 - 数据监听器 - 案例 (三十五)
前端学习笔记202305学习笔记第二十三天-重构菜单组件2
前端学习笔记202305学习笔记第二十三天-重构菜单组件2
78 1
前端学习笔记202305学习笔记第二十三天-重构菜单组件1
前端学习笔记202305学习笔记第二十三天-重构菜单组件1
73 0
前端学习笔记202305学习笔记第二十三天-重构菜单组件3
前端学习笔记202305学习笔记第二十三天-重构菜单组件3
87 0
走进小程序【四】小程序自定义Component如何使用,手把手封装一个底部Tabbar栏
走进小程序【四】小程序自定义Component如何使用,手把手封装一个底部Tabbar栏
219 0
Weex如何实现对话框 #45
Weex如何实现对话框 #45
126 0