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

目录
相关文章
|
6月前
|
移动开发 前端开发 小程序
前端组件库——NutUI知识点大全(一)
教程来源 https://oieaw.cn/sheyingjiqiao.html NutUI是京东开源的轻量级移动端Vue组件库,源自真实业务场景,经亿级用户考验。支持Vue2/3、React及Taro多端(H5/微信/京东/支付宝等小程序),80+高质量组件,遵循京东APP 10.0视觉规范,支持按需引入、动态主题、暗黑模式与国际化。
|
12月前
|
JSON API 数据安全/隐私保护
蘑菇街 item_search 接口对接全攻略:从入门到精通
蘑菇街item_search接口是获取时尚商品数据的核心工具,支持关键词、分类、价格等多维度筛选,适用于选品、竞品分析与趋势监控。因官方API限制严格,本文详解其动态接口对接、加密参数生成、反爬应对及Python实现方案,助力开发者构建稳定高效的数据采集系统。
|
人工智能 搜索推荐 JavaScript
【Geo专家于磊】深度解析:Geo优化中的Schema标签,如何让你的内容在AI时代脱颖而出?
微笑老师详解Geo优化中Schema标签的写法,揭示如何通过结构化数据提升AI时代下的内容可见性。从选择类型、填写关键属性到JSON-LD格式应用与测试验证,全面掌握Geo优化核心技巧,助力本地商家在搜索结果中脱颖而出。(238字)
1270 4
|
自然语言处理 JavaScript Java
CodeFuseEval : 代码类大模型多任务评估基准
CodeFuseEval是结合CodeFuse大模型多任务场景,在开源的HumanEval-x、MBPP、DS1000评测基准基础上,开发的面向大模型代码垂类领域的企业级多类型编程任务评估基准。可用于评估大模型在代码补全、自然语言生成代码、测试用例生成、跨语言代码翻译、中文指令生成代码、代码注解释、Bug检测/修复、代码优化等不同任务的能力表现。
2195 1
|
小程序 开发者
Taro@3.x+Vue@3.x+TS开发微信小程序,使用自定义tabBar
本文介绍了如何在Taro项目中实现自定义tabBar。首先,在`app.config.ts`中设置`custom: true`并配置`tabBar`。
1675 1
Taro@3.x+Vue@3.x+TS开发微信小程序,使用自定义tabBar
|
API 容器
Flutter UI组件库(JUI)
Flutter UI组件库(JUI)
3738 17
|
达摩院 供应链 Cloud Native
低代码这么火,它的人才认证你考了吗?
2021年超级🔥 的证书!限时免费认证中……
9902 0
低代码这么火,它的人才认证你考了吗?
|
开发工具 C++ git
利用VS Code提升开发效率的五大插件推荐
本文推荐了五款能显著提升开发效率的VS Code插件:ESLint用于代码质量和风格检查;Prettier自动格式化代码;GitLens增强Git功能;Live Server提供前端实时预览;Docker支持容器管理。
|
安全 数据建模 测试技术
只有ip没有域名怎么申请SSL
在没有域名只有IP地址的情况下,仍可申请SSL证书。需确保拥有固定公网IP地址和服务器管理权限,选择支持IP SSL证书的CA(如JoySSL),完成注册、购买、验证、安装和测试等步骤,实现HTTPS加密访问。注意证书有效期、兼容性和安全性。