tab标签栏横向滑动的实现

绝绝子,虽然很菜,纠结了有些时间,但是总结出来了 ^ ^

js的封装函数

function tab(id,setting){
	var $box=$("#"+id);
	setting=$.extend({
		tabData:[]
	},setting)
	$box.append(`<div class="gdp_tapTop"><ul class="gdp_tabTitle"></ul></div><div class="gdp_tabContent"></div>`);
	
	$box.addClass("gdp_tabBox");
	$.each(setting.tabData,function(index){
		 $box.find(".gdp_tabTitle").append(`<li class="gdp_title${index+1}" index=${index}><span>${this.title}</span></li>`);
		 $box.find(".gdp_tabContent").append(`<div class="gdp_content${index+1}" index=${index}>${this.content}</div>`);
	   if(this.badge==0||!this.badge) return;
		// 设置圆圈
		$box.find(`.gdp_title${index+1}`).append(`<i class="gdp_badge">${this.badge}</i>`);
	    
	})
	var position={
		left:true,
		right:false
	}
	// 判断是否需要滚动,如果需要则设置滚动
	var acWidth=$box.find(".gdp_tabTitle")[0].scrollWidth;
	var viWidth=$box.find(".gdp_tabTitle")[0].offsetWidth;
	var scrollLeft=0,scrollLeft2=0,scrollLeft3=0;
	// 点击的id前后比较
	var clickLiArr=[0];
   // 绑定点击事件
   $box.find(".gdp_tabTitle li").on("click",function(e){
	var clickLi=this;
	var clickItemIndex=$(this).attr("index");
	clickLiArr.push(clickItemIndex);
	var distance=Number.parseInt($(this).offset().left-$box.find(".gdp_tabTitle").offset().left);
	 $box.find(".gdp_tabContent div").each(function(index){
		   if(clickItemIndex==index){
			$(this).siblings().css("display","none");
			$(this).css("display","block");
			 $box.find(`.gdp_title${Number.parseInt(clickItemIndex)+1} span`).css({
				"borderBottom":"2.5px solid #667dec",
				 "color":"#667dec"
			 });
			 $box.find(`.gdp_title${Number.parseInt(clickItemIndex)+1}`).siblings().find("span").css({
				 "borderBottom":"0px",
				 "color":"#000"
			 });
		   }
	 })
	// 实现滚动功能方向判断
	if(clickLiArr.length==3){
		clickLiArr.splice(0,1);
	}
	// 比较数组1和2值.如果2大于1向左滑,2小于1向右滑
	if(clickLiArr[0]<clickLiArr[1]){
			if(distance>Number.parseInt(viWidth/2)&& position.right!=true){
				scrollLeft=scrollLeft+distance-Number.parseInt(viWidth/2);
				$box.find(".gdp_tabTitle").animate({
					scrollLeft:scrollLeft
				},300)
			}
	}
	if(clickLiArr[0]>clickLiArr[1]){
		if(scrollLeft-(Number.parseInt(viWidth/2)-distance)<=0){
			 scrollLeft=0;
		}else{
			scrollLeft=scrollLeft-(Number.parseInt(viWidth/2)-distance)
		}
			$box.find(".gdp_tabTitle").animate({
			scrollLeft:scrollLeft
			},300)
	}
	// 滚动监听
	$box.find(".gdp_tabTitle").on("scroll",function(){
	var scroLeft=$(this)[0].scrollLeft;
	console.log("滑动的距离"+scrollLeft)
	if(scroLeft==0){
		position.right=false;
		position.left=true;
		return position;
	} else if(scroLeft==(acWidth-viWidth)){
		position.right=true;
		position.left=false;
		return  position;
	}else{
		position.right=false;
		position.left=false;
		return position;
	}
	})
	})	
}

css

*{
	margin:0px;
	padding:0px;
}
li{
	list-style:none;
}
/* tab滑动门start */
/* 让所有滚动消失 */
::-webkit-scrollbar {
	display: none;
}
.gdp_tabBox{
	height:579px;
	font-size:16px;
	margin:20px 24px;
}
.gdp_tapTop{
	overflow:hidden;
}
.gdp_tapTop ul{
	flex:1;
	display:flex;
	width:100%;
	overflow:scroll;
	text-align:center;
}
.gdp_tapTop ul li{
	flex:1;
	display:inline-block;
	margin:15px 0px;
	color:#323233;
	margin:10px 15px;
	white-space:nowrap;   /* 控制文字1行显示 */
}
.gdp_tapTop ul li span{
	 padding-bottom:7px;
}

.gdp_tapTop ul li:first-child span{
   border-bottom:2.5px solid #667dec;	
   color:#667dec;
}
.gdp_badge{
	background-color: #FB5B06;
	border-radius: 100px;
	padding: 1px 5px;
	line-height: 1;
	font-size: 12px;
	color: #fff;
	font-style: normal;
	vertical-align: super;
}
.gdp_tabTitle{
	
}
.gdp_tabContent{
	background-color: skyblue;
	margin:24px 20px;
}
.gdp_tabContent div{
	display:none;
}
.gdp_tabContent .gdp_content1{
	display:block;
}

使用

tab("typeTab",{tabData:[{'title':'标签1','content':'内容1'},{'title':'标签2','content':'内容2'},{'title':'标签3','content':'内容3'}]});

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值