【uniapp】小程序自定义一个通用的返回按钮组件

左边箭头,右边文字可以自定义,但是不要太长,太长可以自己改 .back的width值,改宽一点。

用这个组件的时候首先要在pages.json里把导航栏变成自定义的:


  
  
  1. ,{
  2. "path" : "pages/test/test",
  3. "style" :
  4. {
  5. "navigationBarTitleText": "",
  6. "enablePullDownRefresh": false
  7. }
  8. }
  9. ,{
  10. "path" : "pages/shop/shop",
  11. "style" :
  12. {
  13. "navigationBarTitleText": "",
  14. "enablePullDownRefresh": false,
  15. //这个-->自定义导航栏
  16. "navigationStyle": "custom"
  17. }

组件:backPages.vue


  
  
  1. <template>
  2. <view class="big_out">
  3. <!-- 左上角返回按钮 -->
  4. <!-- 这里为什么要加4px,是因为这个左箭头<的高度为16rpx需要下降一半,就是8rpx=4px,可以自己试一下,我这里没有问题 -->
  5. <view class="back" :style="'margin-top:'+ (titletop+4)+'px'" @click="back_page">
  6. <view class="back_img">
  7. </view>
  8. <view class="back_text">
  9. <slot>
  10. {{backtext}}
  11. </slot>
  12. </view>
  13. </view>
  14. </view>
  15. </template>
  16. <script>
  17. export default {
  18. name: "backPages",
  19. props: {
  20. backtext: String,
  21. },
  22. data( ) {
  23. return {
  24. titleheight: 0,
  25. titletop: 0
  26. };
  27. },
  28. //这里原来使用的onLoad一直有bug(不重新进入页面就会错位),
  29. // 后来使用onShow 更改于2022/09/30 以后再修改
  30. onShow( ) {
  31. //加载时调用 getHeight
  32. this. getHeight();
  33. },
  34. methods: {
  35. //利用胶囊按钮定位宽高
  36. getHeight( ) {
  37. let res = uni. getMenuButtonBoundingClientRect();
  38. this. titletop = res. top;
  39. this. titleheight = res. height
  40. },
  41. //直接返回上一级
  42. back_page( ) {
  43. uni. navigateBack({
  44. delta: 1 // 返回的页面数
  45. })
  46. },
  47. }
  48. }
  49. </script>
  50. <style scoped>
  51. .big_out {
  52. position: fixed;
  53. z-index: 999;
  54. /* background-color: red; */
  55. }
  56. .back {
  57. position: absolute;
  58. height: 50rpx;
  59. width: 120rpx;
  60. }
  61. .back_img {
  62. /* 用border值来控制箭头粗细 */
  63. border: 3px solid black;
  64. /* 上、右、下、左 四个边框的宽度 */
  65. border-width: 0px 2px 2px 0px;
  66. display: inline-block;
  67. /* padding值控制箭头大小 */
  68. padding: 5px;
  69. transform: rotate( 135deg);
  70. -webkit- transform: rotate( 135deg);
  71. margin-left: 30rpx;
  72. }
  73. .back_text {
  74. float: right;
  75. }
  76. </style>

使用的时候需要传按钮名:backtext = ‘返回或者自定义’

需要import引入组件并注册components才行,示例代码:


  
  
  1. <template>
  2. <view>
  3. <backPages backtext='返回' > </backPages>
  4. </view>
  5. </template>
  6. <script>
  7. import backPages from "@/components/backPages.vue"
  8. export default {
  9. components:{
  10. backPages
  11. },
  12. data( ) {
  13. return {
  14. }
  15. },
  16. methods: {
  17. }
  18. }
  19. </script>
  20. <style>
  21. </style>

组件默认回到上一层级,自定义请更改组价的back_page方法。

转:https://blog.csdn.net/ONLYSRY/article/details/126178045

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值