微信小程序开发实战(16):交互组件

深碍√TFBOYSˉ_ 2023-03-03 11:12 84阅读 0赞
  1. 动作表单(ActionSheet)

iOS程序员一定对ActionSheet非常熟悉,这是Cocoa Touch很常用的UI组件。使用ActionSheet会从当前窗口底部往上弹出一个窗口,可以在该窗口放置任何组件,例如,如图1所示的一排按钮。

format_png

图1 ActionSheet的效果

图1是小程序ActionSheet的效果,与iOS ActionSheet的效果类似。在小程序中使用ActionSheet要使用标签,该标签中可以包含任意的组件,因此,可以在ActionSheet上放置任何小程序支持的UI元素。例如,下面的布局代码放置了4个普通按钮和一个“取消”按钮,效果就是图1所示的样式。

  1. <view style="margin:30px">
  2. <button type="default" bindtap="actionSheetTap">弹出action sheet</button>
  3. <action-sheet hidden="{
  4. {actionSheetHidden}}" bindchange="actionSheetChange">
  5. <block wx:for-items="{
  6. {actionSheetItems}}">
  7. <action-sheet-item bindtap="bindItem{
  8. {index+1}}">{
  9. {item}}</action-sheet-item>
  10. </block>
  11. <action-sheet-cancel>取消</action-sheet-cancel>
  12. </action-sheet>
  13. </view>

在这段代码中,使用动态生成了4个标签,这4个标签分别通过bindtap属性指定了4个用于响应item点击事件的函数(bindItem1、bindItem2、bindItem3和bindItem4)。在循环的外面使用标签添加了一个“取消”按钮,点击“取消”按钮,无需加任何JavaScript代码就会关闭ActionSheet。

通过标签的hidden属性可以控制ActionSheet的显示和隐藏,该属性值为true,表示隐藏ActionSheet,为false,表示显示ActionSheet。通过bindchange属性指定一个事件函数,当点击“取消”按钮或ActionSheet外部区域,会调用该函数,通常在该函数中隐藏ActionSheet。

下面是完整的JavaScript实现代码。

  1. var items = ['item1', 'item2', 'item3', 'item4']
  2. var pageObject = {
  3. data: {
  4. actionSheetHidden: true,
  5. actionSheetItems: items
  6. },
  7. // 用于显示和隐藏ActionSheet
  8. actionSheetTap: function (e) {
  9. this.setData({
  10. actionSheetHidden: !this.data.actionSheetHidden
  11. })
  12. },
  13. // 点击“取消”按钮或ActionSheet的外部区域,会调用该函数
  14. actionSheetChange: function (e) {
  15. console.log('actionSheetChange')
  16. this.setData({
  17. actionSheetHidden: !this.data.actionSheetHidden
  18. })
  19. },
  20. bindItem1: function (e) {
  21. console.log("单击了item1");
  22. this.setData({
  23. actionSheetHidden: !this.data.actionSheetHidden
  24. })
  25. },
  26. bindItem2: function (e) {
  27. console.log("单击了item2");
  28. this.setData({
  29. actionSheetHidden: !this.data.actionSheetHidden
  30. })
  31. },
  32. bindItem3: function (e) {
  33. console.log("单击了item3");
  34. this.setData({
  35. actionSheetHidden: !this.data.actionSheetHidden
  36. })
  37. },
  38. bindItem4: function (e) {
  39. console.log("单击了item4");
  40. this.setData({
  41. actionSheetHidden: !this.data.actionSheetHidden
  42. })
  43. }
  44. }
  45. Page(pageObject)

显示ActionSheet后,当点击“取消”按钮或ActionSheet外部区域,会在Console中输出如图2所示的日志信息。然后ActionSheet会隐藏(因为actionSheetHidden变量被设为true)。

format_png 1

图2 点击“取消”按钮输出的日志信息

标签中可以放置任何组件,例如,下面的布局代码除了前面的5个按钮外,还放置了一个标签。

  1. <view style="margin:30px">
  2. … …
  3. <image src="http://geekori.cn/img/weixin_code.png"
  4. style="height:300px;width:300px"/>
  5. </action-sheet>
  6. </view>

显示ActionSheet的效果如图3所示。

format_png 2

图3 带图像的ActionSheet

2 对话框

在小程序中,对话框需要使用标签。与Android、iOS不同的是,这些对话框需要实现摆放在布局文件中,默认是隐藏状态。例如,下面的布局代码放置了两个标签,并通过点击相应的按钮显示其中一个对话框。

  1. <view>
  2. <modal title="标题" confirm-text="确定" cancel-text="取消" hidden="{
  3. {modalHidden}}" bindconfirm="modalChange" bindcancel="modalChange">
  4. 这是对话框的内容。</modal>
  5. <modal hidden="{
  6. {modalHidden2}}" no-cancel bindconfirm="modalChange2"
  7. bindcancel="modalChange2">
  8. <view> 没有标题没有取消的对话框 </view>
  9. <view> 内容可以插入节点 </view>
  10. </modal>
  11. <view class="btn-area">
  12. <button type="default" bindtap="modalTap">点击弹出modal</button>
  13. <button type="default" bindtap="modalTap2">点击弹出modal2</button>
  14. </view>
  15. </view>

标签通过title属性指定标题,通过confire-text属性指定确定按钮的文本,通过cancel-text属性指定取消按钮的文本,通过hidden属性控制对话框的隐藏和显示,通过bindconfirm属性指定点击确定按钮要指定的函数,通过bindcancel属性指定点击取消按钮要执行的函数。如果指定了no-cancel属性,不会显示取消按钮。

现在分别点击第一个按钮和第二个按钮,会显示如图4和图5所示的对话框。

format_png 3

图4 带“确定”和“取消”按钮的对话框

format_png 4

图5 不带“取消”按钮的对话框

点击“确定”或“取消”按钮,会关闭对话框。实际上,这里指的关闭,就是隐藏标签,实现的代码如下:

  1. Page({
  2. data: {
  3. modalHidden: true,
  4. modalHidden2: true
  5. },
  6. modalTap: function(e) {
  7. this.setData({
  8. modalHidden: false
  9. })
  10. },
  11. modalChange: function(e) {
  12. this.setData({
  13. modalHidden: true
  14. })
  15. },
  16. modalTap2: function(e) {
  17. this.setData({
  18. modalHidden2: false
  19. })
  20. },
  21. modalChange2: function(e) {
  22. this.setData({
  23. modalHidden2: true
  24. })
  25. },
  26. })

发表评论

表情:
评论列表 (有 0 条评论,84人围观)

还没有评论,来说两句吧...

相关阅读

    相关 程序开发实战

    自从小程序对个人开发者开放以来,就一直想着做一个自己的小程序,再关联到自己的公众号。 小程序截图 ![这里写图片描述][20170613090925118]  ![这里