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 指导方针
Apr 05 Javascript
JavaScript 事件查询综合
Jul 13 Javascript
js中判断Object、Array、Function等引用类型对象是否相等
Aug 29 Javascript
ECMAScript6中Set/WeakSet详解
Jun 12 Javascript
javascript处理a标签超链接默认事件的方法
Jun 29 Javascript
巧用weui.topTips验证数据的实例
Apr 17 Javascript
underscore之Chaining_动力节点Java学院整理
Jul 10 Javascript
基于js中的存储键值对以及注意事项介绍
Mar 30 Javascript
vue.js内置组件之keep-alive组件使用
Jul 10 Javascript
解决layer弹层遮罩挡住窗体的问题
Aug 17 Javascript
从vue源码解析Vue.set()和this.$set()
Aug 30 Javascript
Vue中keep-alive组件的深入理解
Aug 23 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中mysql模块部分功能的简单封装
2011/09/30 PHP
PHP+MYSQL中文乱码问题
2015/07/01 PHP
php命令行写shell实例详解
2018/07/19 PHP
phpinfo的知识点总结
2019/10/10 PHP
Javascript优化技巧(文件瘦身篇)
2008/01/28 Javascript
Prototype Array对象 学习
2009/07/19 Javascript
为jquery.ui.dialog 增加“自动记住关闭时的位置”的功能
2009/11/24 Javascript
用jquery实现下拉菜单效果的代码
2010/07/25 Javascript
兼容IE、FireFox、Chrome等浏览器的xml处理函数js代码
2011/11/30 Javascript
js给网页加上背景音乐及选择音效的方法
2015/03/03 Javascript
JavaScript中调用函数的4种方式代码实例
2015/07/08 Javascript
jquery通过扩展select控件实现支持enter或focus选择的方法
2015/11/19 Javascript
xtemplate node.js 的使用方法实例解析
2016/08/22 Javascript
vue 2.0组件与v-model详解
2017/03/27 Javascript
Vue实现双向数据绑定
2017/05/03 Javascript
Jquery中attr与prop的区别详解
2017/05/27 jQuery
Vue.js搭建移动端购物车界面
2020/06/28 Javascript
angular写一个列表的选择全选交互组件的示例
2018/01/22 Javascript
vue-router二级导航切换路由及高亮显示的实现方法
2019/07/10 Javascript
[01:10:57]Liquid vs OG 2018国际邀请赛小组赛BO2 第一场 8.16
2018/08/17 DOTA
详解PyTorch批训练及优化器比较
2018/04/28 Python
Python列表切片操作实例总结
2019/02/19 Python
python 函数中的内置函数及用法详解
2019/07/02 Python
TensorFlow加载模型时出错的解决方式
2020/02/06 Python
tensorflow模型转ncnn的操作方式
2020/05/25 Python
使用已经得到的keras模型识别自己手写的数字方式
2020/06/29 Python
python tkinter的消息框模块(messagebox,simpledialog)
2020/11/07 Python
采购部岗位职责
2013/11/24 职场文书
班组长安全生产职责
2013/12/16 职场文书
技术总监个人的自我评价范文
2013/12/18 职场文书
体育教育专业自荐信范文
2013/12/20 职场文书
体育系毕业生求职自荐信
2014/04/16 职场文书
元旦趣味活动方案
2014/08/22 职场文书
五心教育心得体会
2014/09/04 职场文书
网络营销计划
2015/01/17 职场文书
工作证明格式范文
2015/06/15 职场文书