当前位置:   article > 正文

uniapp制作简单的tab切换_uni手写一个tab

uni手写一个tab

 tab切换是APP开发最常见的功能之一,uniapp中提供了多种形式的tab组件供我们使用。对于简单的页面而言,使用tabbar组件非常方便快捷,可以快速实现底部导航栏的效果。对于比较复杂的页面,我们可以使用tab组件自由定义样式和内容

目录

一、实现思路

二、实现步骤

①view部分展示

 ②JavaScript 内容

③css中样式展示

三、效果展示

四、简单案例

        ①  div中添加

        ②JavaScript内容

        ③css样式展示

        ④效果展示



        Uniapp作为一款跨平台的开发工具,提供了一种简便的制作tabbar滑动切换的方法。本文将介绍UniAPP如何实现tabbar滑动切换,并带有详细的示例代码。

一、实现思路

        在tabbar的页面中,当用户进行左右滑动时,能够自动切换到相应的页面。这个过程可以通过Uniapp中的swiper组件实现也可以通过自定义完成,代码非常简单。这里我使用的是原生态开发。

        如果想要使用组件开发,可以参考Tabs 标签 | uView 2.0 - 全面兼容 nvue 的 uni-app 生态框架 - uni-app UI 框架

二、实现步骤
①view部分展示
  1. 首先,在项目中找到tabbar的页面,在template中添加以下代码
  2.  template v-for可以不用写在template模板 
  1. <view class="welltab">
  2. <!-- tab选项 -->
  3. <view class="flex-around" style="border-bottom: 1px solid #E6E6E8;">
  4. <view v-for="(item, index) in topList" :key="index"
  5. :class="[item.default ? 'screen-item-avtive' : 'screen-item']" @click="changeTabs(item)">{{ item.name
  6. }}</view>
  7. </view>
  8. <!-- 列表 -->
  9. <view v-for="(item, index) in list" class="flex-between acctab" :key="index">
  10. <view class="flex-colomn">
  11. <view style="color: #333; font-size: 28rpx;font-weight: bold;">{{ item.content }}</view>
  12. <view style="color: #888;font-size: 24rpx; margin-top: 10rpx;">{{ item.time }}</view>
  13. </view>
  14. <view class="">
  15. <view v-if="status == 0">
  16. <text style="font-size: 30rpx; font-weight: bold;">{{ $tools.getUnit(item.price) }}</text>
  17. </view>
  18. <view v-if="status == 1">
  19. <text style="font-size: 30rpx; font-weight: bold;">+{{ $tools.getUnit(item.price) }}</text>
  20. </view>
  21. <view v-if="status == 2">
  22. <text style="font-size: 30rpx; font-weight: bold;">-{{ $tools.getUnit(item.price) }}</text>
  23. </view>
  24. </view>
  25. </view>
  26. </view>
 ②JavaScript 内容

        1.toplist表示的是tab顶部的内容

        2.list中展示的是跳转后的内容

  1. <script>
  2. export default {
  3. data() {
  4. return {
  5. status: '', // 状态
  6. list: [{
  7. id: 1,
  8. price: 123,
  9. content: '需求任务',
  10. time: '2024-09-09 19:00'
  11. }, {
  12. id: 1,
  13. price: 300,
  14. content: '跑腿订单',
  15. time: '2024-09-09 19:00'
  16. }
  17. ],
  18. //展示tab款的内容
  19. topList: [{
  20. name: '全部',
  21. default: true,
  22. // default: false,
  23. id: 0
  24. }, {
  25. name: '收入',
  26. default: false,
  27. // default: true,
  28. id: 1
  29. }, {
  30. name: '支出',
  31. default: false,
  32. // default: true,
  33. id: 2
  34. },]
  35. }
  36. },
  37. methods: {
  38. //点击tab跳转
  39. changeTabs(item) {
  40. let obj = this.topList.find(v => v.default)
  41. if (obj) {
  42. obj.default = false
  43. item.default = true
  44. }
  45. this.status = item.id
  46. // this.getRequestList()
  47. },
  48. }
  49. }
  50. </script>
③css中样式展示
  1. tab顶部文字的样式,文字点击时的样式
  1. <style>
  2. /* 点击文字的颜色 */
  3. .screen-item-avtive {
  4. position: relative;
  5. font-size: 28rpx;
  6. font-family: PingFang SC, PingFang SC;
  7. font-weight: bold;
  8. color: #428AF6;
  9. letter-spacing: 2rpx;
  10. padding: 24rpx 0;
  11. }
  12. /* 本来展示的颜色 */
  13. .screen-item {
  14. font-size: 28rpx;
  15. font-family: PingFang SC, PingFang SC;
  16. color: #333;
  17. letter-spacing: 2rpx;
  18. padding: 24rpx 0;
  19. }
  20. /* 点击的底部线条颜色 */
  21. .screen-item-avtive::after {
  22. content: '';
  23. position: absolute;
  24. left: 50%;
  25. bottom: 0;
  26. height: 4rpx;
  27. background-color: #428AF6;
  28. width: 50%;
  29. transform: translateX(-50%);
  30. border-radius: 4rpx;
  31. // transition: all .5s linear;
  32. animation: change 1s linear;
  33. }
  34. /* 底部变化 */
  35. @keyframes change {
  36. 0% {
  37. width: 50%;
  38. }
  39. 50% {
  40. width: 100%;
  41. }
  42. 100% {
  43. width: 50%;
  44. }
  45. }
  46. </style>
三、效果展示

        

 

          

四、简单案例

        将各个部分的代码添加至页面中,即可展示效果。

        ①  div中添加
  1. <view style="background-color: #fff; padding: 24rpx;">
  2. <view class="flex-grid" style="border-bottom: 1px solid #E6E6E8;">
  3. <view v-for="(item, index) in topList" :key="index"
  4. :class="[item.default ? 'screen-item-avtive' : 'screen-item']" @click="changeTabs(item)">
  5. {{ item.name}}
  6. </view>
  7. </view>
  8. <view v-if="status == 0">
  9. 11
  10. <view v-if="status == 1">
  11. 22
  12. </view>
  13. </view>

        ②JavaScript内容
  1. <script>
  2. export default {
  3. data() {
  4. return {
  5. //展示tab款的内容
  6. topList: [{
  7. name: '待处理',
  8. default: true,
  9. // default: false,
  10. id: 0
  11. }, {
  12. name: '已处理',
  13. default: false,
  14. // default: true,
  15. id: 1
  16. }]
  17. }
  18. },
  19. methods: {
  20. //点击tab跳转
  21. changeTabs(item) {
  22. let obj = this.topList.find(v => v.default)
  23. if (obj) {
  24. obj.default = false
  25. item.default = true
  26. }
  27. this.status = item.id
  28. // this.getRequestList()
  29. },
  30. }
  31. }
  32. </script>

        ③css样式展示
  1. /* 点击文字的颜色 */
  2. .screen-item-avtive {
  3. position: relative;
  4. font-size: 28rpx;
  5. font-family: PingFang SC, PingFang SC;
  6. font-weight: bold;
  7. color: #1A1A1A;
  8. letter-spacing: 2rpx;
  9. padding: 24rpx 0;
  10. }
  11. /* 本来展示的颜色 */
  12. .screen-item {
  13. font-size: 28rpx;
  14. font-family: PingFang SC, PingFang SC;
  15. color: #333;
  16. letter-spacing: 2rpx;
  17. padding: 24rpx 0;
  18. }
  19. /* 点击的底部线条颜色 */
  20. .screen-item-avtive::after {
  21. content: '';
  22. position: absolute;
  23. left: 25%;
  24. bottom: 0;
  25. height: 4rpx;
  26. background-color: #1A1A1A;
  27. width: 25%;
  28. transform: translateX(-50%);
  29. border-radius: 4rpx;
  30. // transition: all .5s linear;
  31. animation: change 1s linear;
  32. }
  33. /* 底部变化 */
  34. @keyframes change {
  35. 0% {
  36. width: 50%;
  37. }
  38. 50% {
  39. width: 100%;
  40. }
  41. 100% {
  42. width: 50%;
  43. }
  44. }
        ④效果展示

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

闽ICP备14008679号