当前位置:   article > 正文

uni-app 从底部向上弹出菜单_uniapp底部弹出框

uniapp底部弹出框

我在项目需求中需要实现从底部向上弹窗菜单效果功能

在uni-app给出原生组件showActionSheet发现设置标题, 在uni-app项目中正常显示, 但是在微信小程序中不显示了, 我这里还有一个问题就是标题太长, 而showActionSheet没有办法设置标题字体大小, 这就很尴尬了

接下来看看我已经实现的效果吧

这是我需要效果

官方没有给我们, 这里我们只能自定义了

项目根目录创建一个文件夹components主要是放一些我们组件

components下在创建一个文件夹show-action-sheet, 名字不重要, 随便定义, 在show-action-sheet该文件夹下创建一个vue文件

组件代码:

  1. <template>
  2. <view>
  3. <view class="tui-actionsheet-class tui-actionsheet" :class="[show?'tui-actionsheet-show':'']">
  4. <view class="tui-tips" :style="{fontSize:size+'rpx',color:color}" v-if="tips">
  5. {{tips}}
  6. </view>
  7. <view :class="[isCancel?'tui-operate-box':'']">
  8. <block v-for="(item,index) in itemList" :key="index">
  9. <view class="tui-actionsheet-btn tui-actionsheet-divider"
  10. :class="[(!isCancel && index==itemList.length-1)?'tui-btn-last':'']"
  11. hover-class="tui-actionsheet-hover" :hover-stay-time="150" :data-index="index"
  12. :style="{color:item.color || '#1a1a1a'}" @tap="handleClickItem">{{item.text}}</view>
  13. </block>
  14. </view>
  15. <view class="tui-actionsheet-btn tui-actionsheet-cancel" hover-class="tui-actionsheet-hover"
  16. :hover-stay-time="150" v-if="isCancel" @tap="handleClickCancel">取消</view>
  17. </view>
  18. <view class="tui-actionsheet-mask" :class="[show?'tui-mask-show':'']" @tap="handleClickMask"></view>
  19. </view>
  20. </template>
  21. <script>
  22. export default {
  23. name: "tuiActionsheet",
  24. props: {
  25. //点击遮罩 是否可关闭
  26. maskClosable: {
  27. type: Boolean,
  28. default: true
  29. },
  30. //显示操作菜单
  31. show: {
  32. type: Boolean,
  33. default: false
  34. },
  35. //菜单按钮数组,自定义文本颜色,红色参考色:#e53a37
  36. itemList: {
  37. type: Array,
  38. default: function() {
  39. return [{
  40. text: "确定",
  41. color: "#1a1a1a"
  42. }]
  43. }
  44. },
  45. //提示文字
  46. tips: {
  47. type: String,
  48. default: ""
  49. },
  50. //提示文字颜色
  51. color: {
  52. type: String,
  53. default: "#9a9a9a"
  54. },
  55. //提示文字大小 rpx
  56. size: {
  57. type: Number,
  58. default: 26
  59. },
  60. //是否需要取消按钮
  61. isCancel: {
  62. type: Boolean,
  63. default: true
  64. }
  65. },
  66. methods: {
  67. handleClickMask() {
  68. if (!this.maskClosable) return;
  69. this.handleClickCancel();
  70. },
  71. handleClickItem(e) {
  72. if (!this.show) return;
  73. const dataset = e.currentTarget.dataset;
  74. this.$emit('click', {
  75. index: dataset.index
  76. });
  77. },
  78. handleClickCancel() {
  79. this.$emit('chooseCancel');
  80. }
  81. }
  82. }
  83. </script>
  84. <style>
  85. .tui-actionsheet {
  86. width: 100%;
  87. position: fixed;
  88. left: 0;
  89. right: 0;
  90. bottom: 0;
  91. z-index: 9999;
  92. visibility: hidden;
  93. transform: translate3d(0, 100%, 0);
  94. transform-origin: center;
  95. transition: all 0.3s ease-in-out;
  96. background: #eaeaec;
  97. min-height: 100rpx;
  98. }
  99. .tui-actionsheet-show {
  100. transform: translate3d(0, 0, 0);
  101. visibility: visible;
  102. }
  103. .tui-tips {
  104. width: 100%;
  105. padding: 30rpx 60rpx;
  106. box-sizing: border-box;
  107. text-align: center;
  108. background: #fff;
  109. display: flex;
  110. align-items: center;
  111. justify-content: center;
  112. }
  113. .tui-operate-box {
  114. padding-bottom: 12rpx;
  115. }
  116. .tui-actionsheet-btn {
  117. width: 100%;
  118. height: 100rpx;
  119. background: #fff;
  120. display: flex;
  121. align-items: center;
  122. justify-content: center;
  123. text-align: center;
  124. font-size: 36rpx;
  125. position: relative;
  126. }
  127. .tui-btn-last {
  128. padding-bottom: env(safe-area-inset-bottom);
  129. }
  130. .tui-actionsheet-divider::before {
  131. content: '';
  132. width: 100%;
  133. border-top: 1rpx solid #d9d9d9;
  134. position: absolute;
  135. top: 0;
  136. left: 0;
  137. -webkit-transform: scaleY(0.5);
  138. transform: scaleY(0.5);
  139. }
  140. .tui-actionsheet-cancel {
  141. color: #1a1a1a;
  142. padding-bottom: env(safe-area-inset-bottom);
  143. }
  144. .tui-actionsheet-hover {
  145. background: #f7f7f9;
  146. }
  147. .tui-actionsheet-mask {
  148. position: fixed;
  149. top: 0;
  150. left: 0;
  151. right: 0;
  152. bottom: 0;
  153. background: rgba(0, 0, 0, 0.6);
  154. z-index: 9996;
  155. transition: all 0.3s ease-in-out;
  156. opacity: 0;
  157. visibility: hidden;
  158. }
  159. .tui-mask-show {
  160. opacity: 1;
  161. visibility: visible;
  162. }
  163. </style>

接下来我们来父级组件中引用就行了

  1. <template>
  2. <view>
  3. <view @tap="chooseMenu"></view>
  4. <show-action-sheet :tips="showActionSheet.tips" :itemList="showActionSheet.itemList" :show="showActionSheet.show" :maskClosable="showActionSheet.maskClosable" :isCancel="showActionSheet.isCancel" @chooseCancel="chooseCancel"></show-action-sheet>
  5. </view>
  6. </template>
  7. <script>
  8. import showActionSheet from '@/components/show-action-sheet/index.vue'
  9. export default {
  10. components: {
  11. ljShowActionSheet
  12. },
  13. data() {
  14. return {
  15. showActionSheet: {
  16. show: false,
  17. maskClosable: true,
  18. tips: "请选择申请节点身份,不同的节点消耗福卡不同",
  19. itemList: [{
  20. text: "红包节点",
  21. color: "#333"
  22. },
  23. {
  24. text: "广告节点",
  25. color: "#333"
  26. },
  27. ],
  28. color: "#9a9a9a",
  29. size: 26,
  30. isCancel: true
  31. }
  32. }
  33. },
  34. methods: {
  35. // 点击弹窗
  36. chooseMenu() {
  37. this.showActionSheet.show = true;
  38. },
  39. // 弹窗关闭
  40. chooseCancel() {
  41. this.showActionSheet.show = false;
  42. }
  43. }
  44. }
  45. </script>

以上就是所有代码了

如果对你有用,关注一下博主的小程序,登录一下给予支持,以后有什么开源好用的源码都会上传到小程序

 

组件源码下载地址: show-action-sheet.zip-互联网文档类资源-CSDN下载

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/盐析白兔/article/detail/117006?site
推荐阅读
相关标签
  

闽ICP备14008679号