1.jq 方式
1.1 代码
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width,initial-scale=1,minimum-scale=1,maximum-scale=1,user-scalable=no" />
<title></title>
<style type="text/css"> header { width: 100%; overflow: hidden; white-space: nowrap; overflow-x: scroll; } header::-webkit-scrollbar { display: none; } .nav { display: inline-block; margin-left: 15px; margin-right: 10px; height: 50px; line-height: 50px; } </style>
<script src="http://libs.baidu.com/jquery/2.0.0/jquery.min.js"></script>
</head>
<body>
<header>
<div class="nav"> 推荐 推荐 推荐 推荐 推荐 推荐 推荐 </div>
<div class="nav"> 视频 </div>
<div class="nav"> 新闻 </div>
<div class="nav"> 体育 </div>
<div class="nav"> 社会 </div>
<div class="nav"> 娱乐 </div>
<div class="nav"> 军事 推荐 推荐 推荐 推荐 推荐 </div>
<div class="nav"> 人文 </div>
<div class="nav"> 地理 </div>
<div class="nav"> 历史 </div>
</header>
<script type="text/javascript">
$(function() {
$(".nav").on("click", function(ev) {
var moveX = $(this).position().left + $(this).parent().scrollLeft();
var pageX = document.documentElement.clientWidth;
var blockWidth = $(this).width();
console.log(moveX)
console.log(pageX);
console.log(blockWidth);
var left = moveX - (pageX / 2) + (blockWidth / 2);
console.log(left);
$(this).css("color", "red").siblings().css("color", "#000000");
$("header").scrollLeft(left);
});
});
</script>
</body>
</html>
1.2 效果
2. swiper 方式
2.1 代码 (swiper为3.x的版本的方式)
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>今日头条APP顶部点击可居中导航</title>
<meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=no" />
<link href="https://cdn.bootcss.com/Swiper/3.4.2/css/swiper.css" rel="stylesheet">
<script src="https://cdn.bootcss.com/Swiper/3.4.2/js/swiper.js"></script>
<script src="https://cdn.bootcss.com/jquery/3.3.1/jquery.js"></script>
<style> * { margin: 0; padding: 0; } #topNav { width: 100%; overflow: hidden; font: 16px/32px hiragino sans gb, microsoft yahei, simsun; border-bottom: 1px solid #f8f8f8; } #topNav .swiper-slide { padding: 0 5px; letter-spacing: 2px; text-align: center; width: auto !important; } #topNav .swiper-slide span { transition: all .3s ease; display: block; } #topNav .active span { transform: scale(1.1); color: #FF2D2D; } img { width: 100%; line-height: 0; } </style>
</head>
<body>
<div id="topNav" class="swiper-container">
<div class="swiper-wrapper">
<span class="swiper-slide active"><span>推荐</span></span>
<span class="swiper-slide"><span>热点热点热点热点</span></span>
<span class="swiper-slide"><span>深圳</span></span>
<span class="swiper-slide"><span>视频</span></span>
<span class="swiper-slide"><span>社会</span></span>
<span class="swiper-slide"><span>娱乐</span></span>
<span class="swiper-slide"><span>科技</span></span>
<span class="swiper-slide"><span>问答</span></span>
<span class="swiper-slide"><span>汽车</span></span>
<span class="swiper-slide"><span>财经</span></span>
<span class="swiper-slide"><span>军事</span></span>
<span class="swiper-slide"><span>体育</span></span>
<span class="swiper-slide"><span>段子</span></span>
<span class="swiper-slide"><span>美女</span></span>
<span class="swiper-slide"><span>国际</span></span>
<span class="swiper-slide"><span>趣图</span></span>
<span class="swiper-slide"><span>健康</span></span>
<span class="swiper-slide"><span>特产</span></span>
<span class="swiper-slide"><span>房产</span></span>
</div>
</div>
<script type="text/javascript">
initSwiper();
function initSwiper() {
var mySwiper = new Swiper('#topNav', {
freeMode: true,
freeModeMomentumRatio: 0.5,
slidesPerView: 'auto',
});
var swiperWidth = mySwiper.container[0].clientWidth,
maxTranslate = mySwiper.maxTranslate(),
maxWidth = -maxTranslate + swiperWidth / 2;
$(".swiper-container").on('touchstart', function(e) {
e.preventDefault()
});
mySwiper.on('tap', function(swiper, e) {
// e.preventDefault()
var slide = swiper.slides[swiper.clickedIndex],
slideLeft = slide.offsetLeft,
slideWidth = slide.clientWidth,
slideCenter = slideLeft + slideWidth / 2;
// 被点击slide的中心点
mySwiper.setWrapperTransition(300)
if(slideCenter < swiperWidth / 2) {
mySwiper.setWrapperTranslate(0)
} else if(slideCenter > maxWidth) {
mySwiper.setWrapperTranslate(maxTranslate)
} else {
nowTlanslate = slideCenter - swiperWidth / 2
mySwiper.setWrapperTranslate(-nowTlanslate)
}
$("#topNav .active").removeClass('active')
$("#topNav .swiper-slide").eq(swiper.clickedIndex).addClass('active')
});
}
</script>
</body>
</html>
2.2 或者 用 swiper 为 4.x 的版本 (和3.x的版本的区别就是swiper的某些方法使用发生了变化而已,原理相同)
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>今日头条APP顶部点击可居中导航</title>
<meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=no" />
<link href="https://cdn.bootcss.com/Swiper/4.5.0/css/swiper.css" rel="stylesheet">
<script src="https://cdn.bootcss.com/Swiper/4.5.0/js/swiper.js"></script>
<script src="https://cdn.bootcss.com/jquery/3.3.1/jquery.js"></script>
<style> * { margin: 0; padding: 0; } #topNav { width: 100%; overflow: hidden; font: 16px/32px hiragino sans gb, microsoft yahei, simsun; border-bottom: 1px solid #f8f8f8; } #topNav .swiper-slide { padding: 0 5px; letter-spacing: 2px; text-align: center; width: auto !important; } #topNav .swiper-slide span { transition: all .3s ease; display: block; } #topNav .active span { transform: scale(1.1); color: #FF2D2D; } img { width: 100%; line-height: 0; } </style>
</head>
<body>
<div id="topNav" class="swiper-container">
<div class="swiper-wrapper">
<span class="swiper-slide active"><span>推荐</span></span>
<span class="swiper-slide"><span>热点热点热点热点</span></span>
<span class="swiper-slide"><span>深圳</span></span>
<span class="swiper-slide"><span>视频</span></span>
<span class="swiper-slide"><span>社会</span></span>
<span class="swiper-slide"><span>娱乐</span></span>
<span class="swiper-slide"><span>科技</span></span>
<span class="swiper-slide"><span>问答</span></span>
<span class="swiper-slide"><span>汽车</span></span>
<span class="swiper-slide"><span>财经</span></span>
<span class="swiper-slide"><span>军事</span></span>
<span class="swiper-slide"><span>体育</span></span>
<span class="swiper-slide"><span>段子</span></span>
<span class="swiper-slide"><span>美女</span></span>
<span class="swiper-slide"><span>国际</span></span>
<span class="swiper-slide"><span>趣图</span></span>
<span class="swiper-slide"><span>健康</span></span>
<span class="swiper-slide"><span>特产</span></span>
<span class="swiper-slide"><span>房产</span></span>
</div>
</div>
<script type="text/javascript">
var mySwiper = new Swiper('#topNav', {
freeMode: true,
freeModeMomentumRatio: 0.5,
slidesPerView: 'auto',
touchStartPreventDefault : false,
on:{
click:function(event){
var swiperWidth = mySwiper.width,
maxTranslate = mySwiper.maxTranslate(),
maxWidth = -maxTranslate + swiperWidth / 2;
var slide = mySwiper.slides[mySwiper.clickedIndex],
slideLeft = slide.offsetLeft,
slideWidth = slide.clientWidth,
slideCenter = slideLeft + slideWidth / 2;
// 被点击slide的中心点
mySwiper.setTransition(300)
if (slideCenter < swiperWidth / 2) {
mySwiper.setTranslate(0)
} else if (slideCenter > maxWidth) {
mySwiper.setTranslate(maxTranslate)
} else {
nowTlanslate = slideCenter - swiperWidth / 2
mySwiper.setTranslate(-nowTlanslate)
}
$("#topNav .active").removeClass('active')
$("#topNav .swiper-slide").eq(mySwiper.clickedIndex).addClass('active')
}
}
});
</script>
</body>
</html>
2.3效果
3. 说明
3.1 地址:https://segmentfault.com/q/1010000009997299/
3.2 地址: https://www.sucaihuo.com/js/2249.html
3.3 小程序效果:https://blog.youkuaiyun.com/hangGe0111/article/details/101014033