Swiper实现导航栏滚动效果


Posted in Javascript onOctober 16, 2020

在一些移动app中,总能看到导航栏是可以滚动,下列例子是在vant的官方文档中看到的,这样的滚动效果利用Swiper也可以实现,效果实现的思路是,根据当前点击的“标签”为起点,当前标签”的位置大于视口的一半时,让容器的位置偏移一定的位置,让当前点击的“标签”始终在视口的中间位置。

Swiper实现导航栏滚动效果

1、引入相关插件

<link rel="stylesheet" href="../css/swiper.css" >
<script src="http://www.jq22.com/jquery/jquery-1.7.1.js"></script>
<script src="../js/swiper.js"></script>

2、编写view(界面)

<div class="box">
 <div class="swiper-container">
 <div class="swiper-wrapper">
 <div class="swiper-slide">综合</div>
 <div class="swiper-slide">单曲</div>
 <div class="swiper-slide">视频</div>
 <div class="swiper-slide">歌手</div>
 <div class="swiper-slide">专辑</div>
 <div class="swiper-slide">歌单</div>
 <div class="swiper-slide">主播电台</div>
 <span></span>
 </div>
 </div>
</div>

3、编写style

*{
 margin: 0;
 padding: 0;
 }
 .box{
 width: 500px;
 height: 50px;
 border: 1px solid #000;
 margin: 100px auto;
 }
 .swiper-container{
 width: auto!important;
 height: 100%;
 text-align: center;
 line-height: 50px;
 color: #000;
 font-size: 20px;
 }
 .swiper-wrapper{
 position: relative;
 width: auto!important;
 height: 100%;
 }
 .swiper-slide {
 list-style: none;
 display: flex;
 justify-content: flex-start;
 flex-wrap: nowrap;
 cursor: pointer;
 }
 .swiper-wrapper span{
 position: absolute;
 height: 3px;
 background: #000;
 left: 1%;
 top: 85%;
 }
 .swiper-slide{
 width: auto!important;
 margin-right: 15px!important;
 padding: 0 18px;
 }

为了让每个swiper-slide的宽度由内容撑起,右边显示一半是提示用户这个导航栏是可以滚动的,所以在初始化时要设置swiper的slidesPerView为auto,slidesPerView: “auto”, 同时要在css设置swiper-slide的样式为:

.swiper-slide{
 width: auto!important;
 margin-right: 15px!important;
 padding: 0 18px;
 }

Swiper实现导航栏滚动效果

这样swiper-slide的宽度就是由内容撑起了,而且可以自由的进行滚动了

Swiper实现导航栏滚动效果

4、编写js

$(function () {
 $(".swiper-wrapper span").css({width: $(".swiper-slide")[0].offsetWidth});
 let navScroll = new Swiper('.box .swiper-container', {
 freeMode:true,
 slidesPerView: "auto",
 freeModeMomentumRatio: 0.5,
 on:{
 //当前swiper-slide点击时触发事件
 click:function (e) {
  let thisWidth = this.clickedSlide.offsetWidth;
  let thisLeft = this.clickedSlide.offsetLeft;
  let offsetX = this.width / 2 - thisLeft - thisWidth / 2;
  //偏移量在1/2视口内时,容器不发生偏移
  if (offsetX > 0){
  offsetX = 0;
  }
  //offsetX小于容器最大偏移时,让偏移量等于容器最大的偏移量
  else if (offsetX < this.maxTranslate()){
  offsetX = this.maxTranslate();
  }
  //设置容器的过渡动画
  this.setTransition(300);
  this.setTranslate(offsetX);
  //滚动条位置和长度执行动画
  $(".swiper-wrapper span").animate({left: thisLeft, width: thisWidth},400);
 }
 }
 });
 })

最终效果

Swiper实现导航栏滚动效果

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
javascript EXCEL 操作类代码
Jul 30 Javascript
页面回到顶部的三种实现(锚标记,js)
Oct 01 Javascript
jquery使整个div区域可以点击的方法
Jun 24 Javascript
jQuery.prop() 使用详解
Jul 19 Javascript
JavaScript数据类型判定的总结笔记
Jul 31 Javascript
jQuery实现大转盘抽奖活动仿QQ音乐代码分享
Aug 21 Javascript
JavaScript函数内部属性和函数方法实例详解
Mar 17 Javascript
JavaScript和jQuery获取input框的绝对位置实现方法
Oct 13 Javascript
Vue源码学习之初始化模块init.js解析
Nov 02 Javascript
详解微信小程序图片地扯转base64解决方案
Aug 18 Javascript
jQuery实现简易聊天框
Feb 08 jQuery
javascript操作向表格中动态加载数据
Aug 27 Javascript
node.js通过url读取文件
Oct 16 #Javascript
vue组件实现移动端九宫格转盘抽奖
Oct 16 #Javascript
Vue3.0的优化总结
Oct 16 #Javascript
JavaScript通如何过RGraph实现动态仪表盘
Oct 15 #Javascript
利用js实现简易红绿灯
Oct 15 #Javascript
关于Node.js中频繁修改代码重启服务器的问题
Oct 15 #Javascript
JS如何操作DOM基于表格动态展示数据
Oct 15 #Javascript
You might like
用PHP制作静态网站的模板框架(四)
2006/10/09 PHP
thinkPHP3.1验证码的简单实现方法
2016/04/22 PHP
Laravel SQL语句记录方式(推荐)
2016/05/26 PHP
PHPStorm 2020.1 调试 Nodejs的多种方法详解
2020/09/17 NodeJs
js 实现无缝滚动 兼容IE和FF
2009/07/15 Javascript
jQuery EasyUI API 中文文档 可调整尺寸
2011/09/29 Javascript
ToolTips JQEURY插件之简洁小提示框效果
2011/11/19 Javascript
jQuery图片渐变特效的简单实现
2016/06/25 Javascript
基于JS实现发送短信验证码后的倒计时功能(无视页面刷新,页面关闭不进行倒计时功能)
2016/09/02 Javascript
jQuery判断邮箱格式对错实例代码讲解
2017/04/12 jQuery
使用ES6语法重构React代码详解
2017/05/09 Javascript
jquery ajax异步提交表单数据的方法
2017/10/27 jQuery
解决vue-cli脚手架打包后vendor文件过大的问题
2018/09/27 Javascript
puppeteer库入门初探
2019/01/09 Javascript
Node.JS用纯JavaScript生成图片或滑块式验证码功能
2019/09/12 Javascript
JavaScript 反射和属性赋值实例解析
2019/10/28 Javascript
python操作MySQL数据库具体方法
2013/10/28 Python
跟老齐学Python之编写类之三子类
2014/10/11 Python
基于Python中capitalize()与title()的区别详解
2017/12/09 Python
django允许外部访问的实例讲解
2018/05/14 Python
Python自然语言处理 NLTK 库用法入门教程【经典】
2018/06/26 Python
python MultipartEncoder传输zip文件实例
2020/04/07 Python
Softmax函数原理及Python实现过程解析
2020/05/22 Python
诗狄娜化妆品官方网站:Stila Cosmetics
2016/12/21 全球购物
New Balance法国官方网站:购买鞋子和服装
2019/09/01 全球购物
输入N,打印N*N矩阵
2012/02/20 面试题
个人实用的自我评价范文
2013/11/23 职场文书
中文专业学生自我评价范文
2014/02/06 职场文书
十八大感想感言
2014/02/10 职场文书
求职信模板标准格式范文
2014/02/23 职场文书
中介业务员岗位职责
2014/04/09 职场文书
中学生家长评语大全
2014/04/16 职场文书
优秀应届本科生求职信
2014/07/19 职场文书
开展党的群众路线教育实践活动剖析材料
2014/10/13 职场文书
拔河比赛队名及霸气口号
2015/12/24 职场文书
关于Javascript闭包与应用的详解
2021/04/22 Javascript