左右箭头点击实现一行超出可视区域的tab切换

tab切换是网页布局中很常用的一个设计,如果我们的选项卡有很多个,一行显示不下,就需要把剩余的部分先隐藏,点击触发显示切换。如下图:

 具体代码实现如下:

默认显示第一个(下标是0),可视区域7个选项卡。

<!DOCTYPE html>
<html>

	<head>
		<meta charset="utf-8">
		<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
		<title>荣誉历程</title>
		<link rel="shortcut icon" href="img/favicon.ico">
		<style>
            .wrap{
              width:1200px;
              margin:0 auto;
            }
			.tab {
				position: relative;
				margin-top: 50px;
				padding-top: 15px;
				overflow: hidden;
			}
			.tab .layui-icon {
				position: absolute;
				top: -0px;
				z-index: 10;
				width: 30px;
				height: 30px;
				line-height: 30px;
				background-color: #fff;
				color: #C0C0C0;
				border-radius: 50%;
				text-align: center;
				border: 1px solid #C0C0C0;
				font-weight: 700;
				cursor: pointer;
			}
			.tab .layui-icon:hover{
				color: #FFFFFF;
				background: #76B729;
			}
			.tab .layui-icon-left {
				left: 0px;
			}
			
			.tab .layui-icon-right {
				right: 0px;
			}
			
			.tab .tablist {
				border-top: 1px solid #C0C0C0;
				width: 4000px;
				padding-left:20px;
				position: relative;
				left: 0;
				top: 0;
			}
			
			.tab .tablist li {
				display: inline-block;
				float: left;
				width: 150px;
				padding-top: 25px;
				text-align: center;
				font-size: 16px;
				font-weight: 600;
				cursor: pointer;
				background: url(../img/bg01.png) no-repeat 70px -5px;
				background-size: 12px 12px;
				z-index: 5;
				margin-top: -4px;
			}
			
			.tab .tablist .on {
				color: #76B729;
				background: url(../img/bg02.png) no-repeat 68px -8px;
				background-size: 15px 25px;
			}
			
			.tabContent {
				margin-top: 50px;
			}
			
			.tbox {
				display: none;
				background: #F7F7F7;
				height: 480px;
			}
			
			.active {
				display: block;
			}
		</style>
	</head>

	<body>
		<div class="mainBox">
			<div class="wrap">
				<div class="honor">
					<!--标题时间-->
					<h1 class="textCenter">荣誉历程</h1>
					<!--顶部标签-->
					<div class="tab">
						<span class="layui-icon layui-icon-left"></span>
						<span class="layui-icon layui-icon-right"></span>
						<ul class="tablist clearfix">
							<li class="tabItem on">2018</li>
							<li class="tabItem">2017</li>
							<li class="tabItem">2016</li>
							<li class="tabItem">2015</li>
							<li class="tabItem">2014</li>
							<li class="tabItem">2013</li>
							<li class="tabItem">2012</li>
							<li class="tabItem">2011</li>
							<li class="tabItem">2010</li>
							<li class="tabItem">2009</li>
							<li class="tabItem">2008</li>
							<li class="tabItem">2007</li>
						</ul>
					</div>
					<!--底部内容-->
					<div class="tabContent">
						<div class="tbox active">第1页</div>
						<div class="tbox">第2页</div>
						<div class="tbox">第3页</div>
						<div class="tbox">第4页</div>
						<div class="tbox">第5页</div>
						<div class="tbox">第6页</div>
						<div class="tbox">第7页</div>
						<div class="tbox">第8页</div>
						<div class="tbox">第9页</div>
						<div class="tbox">第10页</div>
						<div class="tbox">第11页</div>
						<div class="tbox">第12页</div>
					</div>
				</div>
			</div>
		</div>
	</body>
	<script src="../lib/jquery-1.12.2.js"></script>
	<script>
		$(function(){
			//当前选中下标,默认是第一个,视图区域只有7个可见模块
			var defartIndex = 0;
			// ul移动距离居左
			var ulNum = 0;
			// 看有多少模块
			var tabItemArr = $(".tablist").find(".tabItem");
			console.log(tabItemArr.length);
			// 左边箭头
			$(".layui-icon-right").click(function(){
				if(defartIndex >= tabItemArr.length - 1){
					alert("没有更多了!")
				}else if(defartIndex >= tabItemArr.length - 7 && defartIndex< tabItemArr.length -1){
					defartIndex++;
					ulNum = ulNum -150;
					// 当剩余最后7个的话
					var fixLeft = -150*(tabItemArr.length - 7);
					$(".tablist").animate({left:fixLeft},300);
					//顶部添加样式
					$(".tab .tabItem").eq(defartIndex).addClass("on").siblings().removeClass("on");
					//底部添加样式
					$(".tabContent .tbox").eq(defartIndex).addClass("active").siblings().removeClass("active");
				}else{
					defartIndex++;
					ulNum = ulNum -150;
					//往左移动距离
					$(".tablist").animate({left:ulNum},300);
					//顶部添加样式
					$(".tab .tabItem").eq(defartIndex).addClass("on").siblings().removeClass("on");
					//底部添加样式
					$(".tabContent .tbox").eq(defartIndex).addClass("active").siblings().removeClass("active");
				}
				console.log("defartIndex="+defartIndex);
			});
			// 右边箭头
			$(".layui-icon-left").click(function(){
				if(defartIndex<1){
					alert("没有最新得了")
				}else if(defartIndex > tabItemArr.length - 6 && defartIndex <= tabItemArr.length -1){
					defartIndex--;
					ulNum = ulNum + 150;
					// 当剩余最后7个的话
					var fixLeft = -150*(tabItemArr.length - 7);
					$(".tablist").animate({left:fixLeft},300);
					//顶部添加样式
					$(".tab .tabItem").eq(defartIndex).addClass("on").siblings().removeClass("on");
					//底部添加样式
					$(".tabContent .tbox").eq(defartIndex).addClass("active").siblings().removeClass("active");
				}else{
					defartIndex--;
					ulNum = ulNum + 150;
					//往左移动距离
					$(".tablist").animate({left:ulNum},300);
					//顶部添加样式
					$(".tab .tabItem").eq(defartIndex).addClass("on").siblings().removeClass("on");
					//底部添加样式
					$(".tabContent .tbox").eq(defartIndex).addClass("active").siblings().removeClass("active");
				}
				console.log("defartIndex="+defartIndex);
			});
		});
	</script>
</html>

 

  • 1
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
这可以通过JavaScript和CSS实现。首先,需要在HTML中创建一个具有滑动效果的容器,例如一个div元素,并为其添加CSS样式,使其可以滑动。然后,使用JavaScript监听用户的滑动手势事件,并根据用户的滑动方向来移动容器的位置。 以下是一个示例代码,实现左右滑动效果: HTML代码: ``` <div class="slider"> <div class="slides"> <img src="image1.jpg"> <img src="image2.jpg"> <img src="image3.jpg"> </div> </div> ``` CSS代码: ``` .slider { width: 100%; overflow: hidden; } .slides { display: flex; width: 300%; } .slides img { width: 33.33%; float: left; } ``` JavaScript代码: ``` var slider = document.querySelector('.slider'); var slides = document.querySelector('.slides'); var slideIndex = 0; // 监听用户的滑动手势事件 slider.addEventListener('touchstart', handleTouchStart, false); slider.addEventListener('touchmove', handleTouchMove, false); var x1 = null; var y1 = null; // 处理滑动手势开始事件 function handleTouchStart(event) { x1 = event.touches[0].clientX; y1 = event.touches[0].clientY; } // 处理滑动手势移动事件 function handleTouchMove(event) { if (!x1 || !y1) { return; } var x2 = event.touches[0].clientX; var y2 = event.touches[0].clientY; var xDiff = x2 - x1; var yDiff = y2 - y1; if (Math.abs(xDiff) > Math.abs(yDiff)) { // 水平滑动 event.preventDefault(); if (xDiff > 0) { // 向右滑动 slideIndex--; if (slideIndex < 0) { slideIndex = slides.children.length - 1; } } else { // 向左滑动 slideIndex++; if (slideIndex >= slides.children.length) { slideIndex = 0; } } slides.style.transform = 'translateX(-' + slideIndex * 100 / slides.children.length + '%)'; } x1 = null; y1 = null; } ``` 这段代码中,我们使用了CSS的flex布局来创建一个具有滑动效果的容器,其中图片元素的宽度设为33.33%。然后,我们监听了滑动手势事件,并根据用户的滑动方向来移动容器的位置,从而实现了左右滑动效果。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值