专栏首页前端技术开发uni-app实现滑动切换效果

uni-app实现滑动切换效果

在对于uni-app框架了解之后,今天就实现一个滚动切换tab效果,这个很常见的一个效果,最后封装成一个组件,便于以后使用,写这个需要引入uni官方提供的uni.css样式,用到了写好的样式,就不需要自己写了

 这种切换无论是在app端还是小程序或者H5页面都是很常见的功能。对于这种功能,为单独封装成功组件,方便每个页面都能用到,

tab顶部导航栏

页面布局,使用uni-app提供的scroll-view组件。

<template>
    <view class="uni-tab-bar">
        <scroll-view class="uni-swiper-tab" scroll-x>
            <block v-for="(tab,index) in tabBars" :key="tab.id" :style="scrollStyle">
                <view 
                    class="swiper-tab-list" 
                    :class="{'active' : tabIndex==index}"
                    @tap="tabtap(index)"
                    :style="scrollItemStyle"
                >
                    {{tab.name}} {{tab.num?tab.num:""}}
                <view class="swiper-tab-line"></view>
                </view>
            </block>
        </scroll-view>
    </view>
</template>

这个页面相当于封装一个组件,便于其他他们调用使用,tabIndex这个是tab内容,tabIndex对应的索引值,表示第几个。scrollStyle父级样式设置,scrollItemStyle每一个tab内容样式设置

<script>
	export default {
		props:{
			tabBars:Array,
			tabIndex:Number,
			scrollStyle:{
				type:String,
				default:""
			},
			scrollItemStyle:{
				type:String,
				default:""
			}
		},
		methods:{
			//点击切换导航
			tabtap(index){
				// this.tabIndex = index;
				this.$emit('tabtap',index)
			}
		}
	}
</script> 

样式

<style scoped >
.uni-swiper-tab{
		border-bottom: 1upx solid #EEEEEE;
	}
	.swiper-tab-list{
		color: #969696;
		font-weight: bold;
	}
	.uni-tab-bar .active{
		color: #343434;
	}
	.active .swiper-tab-line{
		border-bottom: 6upx solid #FEDE33;
		width: 70upx;
		margin: auto;
		border-top: 6upx solid #FEDE33;
		border-radius: 20upx;
	}
</style>

tabtap点击切换效果,自定义一个tabtap事件,传递给父级,和vue语法一样

在父级组件

1.第一步先引入上面封装好的组件,

import swiperTabHead from "../../components/index/swiper-tab-head.vue";
注册组件
components:{
     swiperTabHead,
   }

2.使用组件

<swiperTabHead :tabBars="tabBars" :tabIndex="tabIndex" @tabtap="tabtap"></swiperTabHead>

3.在data定义好数据

 export default {
     data(){
         tabIndex:0,// 选中的
	tabBars:[
          { name:"关注",id:"guanzhu" },
	  { name:"推荐",id:"tuijian" },
	  { name:"体育",id:"tiyu" },
	  { name:"热点",id:"redian"  },
	  { name:"财经",id:"caijing" },
	  { name:"娱乐",id:"yule"    },
       ]	    			    
    }
}    

4.在方法中使用传过来的事件

//接受子组件传过来的值点击切换导航
            tabtap(index){
                this.tabIndex = index;
            },

切换内容,直接在父组件写

<view class="uni-tab-bar">
            <swiper class="swiper-box" :style="{height:swiperheight+'px'}" :current="tabIndex" @change="tabChange">
                <swiper-item v-for="(items,index) in newslist" :key="index">
                    <scroll-view scroll-y class="list">
                        <template v-if="items.list.length > 0">
                            <!-- 图文列表 -->
                            <block v-for="(item,index1) in items.list" :key="index1">
                                <view>{{item}}</view>
                            </block>
                        </template>
                    </scroll-view>
                </swiper-item>
            </swiper>
        </view>

5.也是需要在data定义一下内容,newslist是循环遍历的tab内容的内容,大概数据结构就是这样的,swiperheight这个是需要动态计算可视区域内容的高度

swiperheight:500,//高度
newslist:[
   {
     list:[
       数据内天
       ]
   },
   {},
   {},
   {},
   {},
   {}
]

6.在methods方法中写手动切换的效果

//滑动切换导航
tabChange(e){
   this.tabIndex = e.detail.current;
},

 7.动态计算高度,upx2x是吧px转换成upx,调用这个api,需要在onLoad生命周期写

onLoad() {
   uni.getSystemInfo({
	success:(res)=>{
		let height = res.windowHeight-uni.upx2px(100)
		this.swiperheight = height;
	}
    })
},

  以上就是用uni-app实现的一个tab切换的效果,可以使用任何平台,已经测试几个平台,都没有问题,

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 小程序索引列表排序

    在小程序中,会有一些需求,常常会有一些按字母A-Z排序,写过一篇关于vue的字母排序,点击这里查看,今天写一篇关于小程序字母排序的案例,效果展示如下

    小周sri的码农
  • 小程序实现图片上传,预览以及图片base64位处理

    最近一段时间在做小程序项目,第一期功也完工了。需要好好总结一下经验,把项目中遇到的问题好好总结一下,遇到的问题,踩过的坑。今天写一个小程序实现图片上传,预览,以...

    小周sri的码农
  • 深度理解DOM拷贝clone()

    克隆节点是DOM的常见操作,jQuery提供一个clone方法,专门用于处理dom的克隆:

    小周sri的码农
  • 微信小程序框架与组件

    查看官方文档:https://developers.weixin.qq.com/miniprogram/dev/component/

    达达前端
  • uniapp样式绑定方式

    薛定喵君
  • 数字货币交易所开发_币币交易平台开发

    数字货币交易所—币币交易平台起源于17年,狭义的定义区块链币币交易系统:按照时间顺序将数据区块以链条的方式组合成特定数据结构,能够安全存储简单的、有先后关系的、...

    源中瑞科技ruiecjo
  • 区块链与数字货币是什么关系呢?

    我们都知道,区块链技术具有去中心化、稳定、安全等特点,我们一直探讨的问题是区块链技术的运用领域和运用手段,在银链原子链开发的项目中,区块链技术得到良好的施展平台...

    企鹅号小编
  • 话说量化(6)

    各位读者朋友大家好,浪了半个多月之后我终于又开始了我的随笔了,感谢大家的关注。我们言归正传,上次说了通货膨胀,这次我们来说说货币的形式。

    刀刀老高
  • 微信小程序实现标签页滑块效果

    达达前端
  • Android屏幕截图,View截图(干货)

    程序员宝库

扫码关注云+社区

领取腾讯云代金券

玩转腾讯云 有奖征文活动