前提

  • 今天产品提了这样一个需求:用户在首次登录后,要展示一个引流的轮播图,其内容主要是对新功能的图文说明(类似于王者荣耀每次更新时的内容一览轮播图,如下图所示)如果非首次登录,则让它隐藏掉即可。注:由于时间关系,前端用 localstorage本地缓存 简单实现一下功能就行,暂时先不需要调用后台接口。

王者荣耀版本更新主要内容一览图

  • 要实现的效果图大致如下所示:

功能实现

  • 首先,轮播图肯定是使用 swiper 组件实现,别人已经写好的插件,我们直接拿来用就可以了。
  • 然后,就涉及到了 swiper 组件中 一些自定义的小部件

如何使用 swiper 组件 (注:强烈建议使用之前好好阅读文档,学习一下使用方法)

  1. 具体使用方法请参考: Swiper组件使用教程(第一步)
  2. API 文档地址入口:请戳这里进入(第二步)

使用教程

  • 首先加载插件,需要用到的文件有 swiper.min.jsswiper.min.css 文件。可 下载Swiper 文件 或 使用 CDN 。
  • 然后创建 HTML 内容。注:swiper 组件已经提供好的模板,直接复制粘贴使用。
  • Swiper 容器 设定一个样式,比如:给轮播图的外层盒子设置一下 widthheight注:这个取决于需求,可要可不要。
  • 初始化 Swiper注:其实就是创建一个 Swiper 实例,然后进行个性化配置。

HTML部分(无组件)

<!DOCTYPE html>
<html>
<head>...<link rel="stylesheet" href="dist/css/swiper.min.css">
</head>
<body><div class="swiper-container"><div class="swiper-wrapper"><div class="swiper-slide">Slide 1</div><div class="swiper-slide">Slide 2</div><div class="swiper-slide">Slide 3</div></div></div>...<script src="dist/js/swiper.min.js"></script>...
</body>
</html>

HTML部分(有组件)

注:组件我们一般都会用到,所以组件基本上是必须的。而且最常用的两个组件就是:分页器和前进后退按钮。

<!DOCTYPE html>
<html>
<head>...<link rel="stylesheet" href="dist/css/swiper.min.css">
</head>
<body><div class="swiper-container"><div class="swiper-wrapper"><div class="swiper-slide">Slide 1</div><div class="swiper-slide">Slide 2</div><div class="swiper-slide">Slide 3</div></div><!-- 注:导航等组件可以放在container之外。很重要的一句话! --><!-- 如果需要分页器 --><div class="swiper-pagination"></div><!-- 如果需要导航按钮 --><div class="swiper-button-prev"></div><div class="swiper-button-next"></div><!-- 如果需要滚动条 --><div class="swiper-scrollbar"></div><!-- 注:这三个组件需要哪个就写哪个--></div>...<script src="dist/js/swiper.min.js"></script>...
</body>
</html>

CSS 部分:这个根据实际需要自行设置就可以了。

初始化 Swiper 【可参考原文档:进行 Swiper 初始化】

  • 使用方法示例:
<div class="swiper-container"><div class="swiper-wrapper"><div class="swiper-slide">slider1</div><div class="swiper-slide">slider2</div><div class="swiper-slide">slider3</div></div>
</div><script>var mySwiper = new Swiper('.swiper-container', {autoplay: true,//可选选项,自动滑动})
</script>

问题:如果一个页面中引用了多个Swiper组件呢?
答:可以给每个容器加上 IDClass 区分。不过,要注意的是:一定要保留默认的类名 swiper-container

HTML部分:
<div class="swiper-container" id="swiper1">....<div>
<div class="swiper-container" id="swiper2">....<div>
<div class="swiper-container" id="swiper3">....<div>
JS部分:
var swiper1 = new Swiper('#swiper1');
var swiper2 = new Swiper('#swiper2');
var swiper3 = new Swiper('#swiper3');
  • 使用讲解
  1. new Swiper(swiperContainer, parameters) 用于初始化一个 Swiper ,返回初始化后的 Swiper 实例。
  2. 它包含两个参数,具体如下:
  • swiperContainer: Swiper 容器的 css 选择器,HTMLElement or string,必选。例如:“.swiper-container”其实就是为了说明你要配置哪一个 swiper 组件。
  • parameters : Swiper 的个性化配置,object 类型,可选。其实就是你想要配置的内容。
  1. 以上就是 Swiper 组件最简单的用法了。

当然,我们目前的使用场景可不仅仅是局限于基本用法,还需要很多自定义的样式以及个性化配置。

Swiper组件的个性化配置

建议:根据自己的需求,参考官方文档,去配置一些选项。必须自己深入的了解,认真的过一遍文档才行,大概知道一些选项和用法就行了。

参考文档后,实际用于项目中所总结的。个人写法,仅供参考

var mySwiper = new Swiper ('#swiper_guide', {direction: 'horizontal',watchOverflow:true,//当没有足够的slide切换时,例如只有1个slide(非loop),swiper会失效且隐藏导航。grabCursor : true,//设置为true时,鼠标覆盖Swiper时指针会变成手掌形状,拖动时指针会变成抓手形状。effect : 'slide',//切换效果:默认为“位移切换”。loop : true,//让Swiper看起来是循环的。autoplay: {//启动自动切换,具体选项如下:delay: 3000,//自动切换的时间间隔,单位msstopOnLastSlide: false,//如果设置为true,当切换到最后一个slide时停止自动切换。(loop模式下无效)。disableOnInteraction: false,//用户操作swiper之后,是否禁止autoplay。默认为true:停止。},// 如果需要分页器,类名要和 HTML 中的相对应pagination: {el: '.swiper-pagination',//自动隐藏clickable :true,},//如果需要前进后退按钮,类名要和 HTML 中的相对应navigation: {nextEl: '.swiper-button-next',//自动隐藏prevEl: '.swiper-button-prev',//自动隐藏hiddenClass: 'btn-hidden',//某些情况下需要隐藏前进后退按钮时,可以设定一个自定义的类名。}});

Swiper组件的自定义样式

自定义前进后退按钮

Swiper 组件中的前进后退按钮默认在容器内部。

问题:如果要将前进后退按钮显示在容器外部,如何实现呢?
答案:给 swiper组件container容器外面加一个包裹的 div元素,并且给 这个 div 设置 相对(relative)定位。原因如下:

  • 通过在控制台看源码,我们可以发现:前进后退按钮默认是绝对定位的。

  • 再加上 swiper组件 的容器 .swiper-container 设置了 overflow:hidden属性。如果只改变前进后退按钮的 left 或者 right 定位属性是不行的。因为如果按钮移动到超出容器边缘时,超出部分就会隐藏掉,不会显示。

  • 问题:那该如何解决呢?

  • swiper 组件的容器外面再套一层 div,并且给这个 div 设置 相对 relative 定位。最终通过这个 最外层的 div 来控制 前进后退按钮的位置。这样就会解决超出隐藏的问题,我们就可以随意设置 前进后退按钮 的位置了。

  • 问题:位置的问题现在解决了,那么样式又该如何调整呢?

  • 很简单,直接用前进后退按钮的类名,覆盖原有样式即可。非常简单,相当于直接忽略了默认样式,自己按照对应的类名重写一次就行了。无论是图标,颜色,还是背景都可以自定义实现。

代码分析:

<script language="javascript"> var mySwiper = new Swiper('.swiper-container',{navigation: {nextEl: '.swiper-button-next',prevEl: '.swiper-button-prev',hideOnClick: true,//点击slide时显示/隐藏按钮。hiddenClass: 'my-button-hidden',//按钮隐藏时的Class,不写的话,有默认值},})
</script>
  • hiddenClass前进后退按钮组件 中的一个选项。

    • 它表示了按钮隐藏时的Class,默认的隐藏类名是 swiper-button-hidden
    • 这个类名可以自定义,然后在 隐藏类名中使用 css 样式中的 opacity 属性就可以控制隐藏了 。
    • 该类名对应的 css 样式是:opacity:0;就可以实现隐藏按钮。
    • 注意: 默认的 swiper.css 中并未发现为 swiper-button-hidden 这个类名添加了隐藏的样式。所以,后期需要手动添加。
  • hideOnClick 也是 前进后退按钮组件 中的一个选项。
    • 作用: 点击 slide 时控制显示/隐藏按钮。
    • BUG处理: 如果遇到点击按钮显示/隐藏无效,可手动增加如下 css样式:(我看官方的案例也是手动添加的隐藏样式,默认的 css 样式中并没有)
    • 经过本人亲自测试: 如果该属性设置为 true,同时也没有设置 hiddenClass 选项,则在点击 slide 时,会为 前进后退按钮 自动追加一个 swiper-button-hidden 类名。如果该类名有对应的样式,那么点击时就会实现显示和隐藏的效果。如果该类名没有对应的样式,那就需要自己手动添加了。具体如下图所示:
 .swiper-container .swiper-button-hidden
{ opacity : 0;}

关于 swiper-button-hidden 类名的样式设置如下:

以下是官方的写法,可作参考

注:

  • 因为默认存在隐藏的类名 swiper-button-hidden。所以这里无需设置 hiddenClass 配置项的值了。
  • 只需要设置 类名对应的 css 隐藏属性即可。

个人自定义的前进后退按钮的样式,仅供参考
/*自定义 前进后退按钮*/
#layer_guide_banner .swpier-btn{width: 48px;height:141px;top: 38%;outline: none;
}
#layer_guide_banner .swpier-btn.btn-hidden{opacity: 0;
}
#layer_guide_banner .swiper-button-prev{left: -9%;background:url(../../images/guide_banner/btn-prev.png) center center no-repeat;background-size: 48px 141px;
}
#layer_guide_banner .swiper-button-next{right: -9%;background:url(../../images/guide_banner/btn-next.png) center center no-repeat;background-size: 48px 141px;
}

自定义分页器

注:

  • 设置之前我们先来看一看官方提供的默认的分页器结构和样式。
  • 看完之后就知道如何设置自定义样式了。

分页器容器的样式和结构

我们可以发现:

  • .swiper-pagination 是 整个分页器的容器,它设置了 绝对 absolute 定位。
  • 如果想要调整分页器的位置,那么直接设置 .swiper-pagination 类名对应样式中的 定位属性即可。即自己重写一遍样式,覆盖掉原有的样式。

分页器容器中分页符的样式(未激活)

我们可以发现:

  • swiper-pagination-bullet 代表每一个分页符,并且可以自定义样式。也是直接覆盖样式进行重写即可。
  • Swiper 有很多一般选项的配置,上面的 swiper-container-horizontal 就是已经配置过的一般选项 direction
  • direction 选项表示 Slides的滑动方向,可设置 水平 (horizontal) 或 垂直 (vertical) 。默认:水平 horizontal 【使用方法如下所示】
<script> var mySwiper = new Swiper('.swiper-container',{direction : 'vertical',})
</script>

分页器容器中分页符的样式(未激活)

我们可以发现:

  • swiper-pagination-bullet-active 代表 当前分页符的样式,或者说已选中、已激活的分页符的样式。自定义样式也是直接进行覆盖重写即可,非常简单。
个人自定义的分页器样式,仅供参考
/*自定义分页器*/
#layer_guide_banner .swiper-pagination{bottom:3%;left: 50%;transform: translateX(-50%);
}
#layer_guide_banner .swiper-pagination .swiper-pagination-bullet{margin: 0 4px;outline: none;
}
#layer_guide_banner .swiper-pagination .swiper-pagination-bullet-active{background-color:#f65e62;
}

最终的实现效果(丑也没办法,产品目前设计的就这样)

结束语

  • 至此,问题就已经被完美解决了。
  • 有什么问题欢迎大家及时留言,一起交流探讨。
  • 我也只是个新手。

swiper组件如何自定义分页符和前进后退按钮相关推荐

  1. Django 分页组件替换自定义分页

    Django的分页器(paginator) 总之不太好用我们还是用自己的好一些 自定义分页器 分页实现源码 """ 自定义分页组件 """c ...

  2. 微信小程序实现非swiper组件的自定义伪3D轮播图

    效果如下: 我用了很笨的方法实现的,大致就是: 1.当前点击的div(view)如果前后都有内容,那么,当前div(view)就设置到中间,前一个就设置到左边,前一个的前面所有全部设置到最左边,后面一 ...

  3. WORD学习之插入分页符

    我们在用Word编辑文档时,不可避免的需要对文档进行页面布局,才能使得文档看起来更加美观.有时候会使用到分页符,下面就简单介绍一下分页符 分页符 主要作用: 1.若要把两段分开在两页显示时,把光标定位 ...

  4. 微信小程序项目实战知识点总结(swiper组件自适应高度,自定义弹出层,悬浮按钮,虚拟键盘)...

    1.小程序 swiper 组件默认高度150px,并且如果子元素过高,swiper不会自适应高度    height:100vh; 2.微信小程序自定义弹出层,参考网址:https://blog.cs ...

  5. Python自定义分页组件

    为了防止XSS即跨站脚本攻击,需要加上 safe # 路由 from django.conf.urls import url from django.contrib import admin from ...

  6. Angular 自定义分页组件,自定义每页显示个数

    后端返回列表是全部数据,分页前端做的,自定义分页组件实现前端分页,下图为分页效果: 1.创建page.component.html <nav class="navigation&quo ...

  7. mvc jquery ajax分页实例,jQuery Ajax自定义分页组件(jquery.loehpagerv1.0)实例详解,mvcpagerajax分页...

    jQuery Ajax自定义分页组件(jquery.loehpagerv1.0)实例详解,mvcpagerajax分页 简单的两个步骤即可实现分页功能 //回调里面进行业务处理 function lo ...

  8. 微信小程序之轮播图swiper组件自定义指示点样式

    微信小程序 - swiper组件 定义一个轮播图 swiper 组件: // swiper.wxml <swiper indicator-dots="true">< ...

  9. 【微信小程序|组件库】自定义swiper组件

    前言 Hello!小伙伴! 非常感谢您阅读海轰的文章,倘若文中有错误的地方,欢迎您指出-   自我介绍 ଘ(੭ˊᵕˋ)੭ 昵称:海轰 标签:程序猿|C++选手|学生 简介:因C语言结识编程,随后转入计 ...

最新文章

  1. 【全网最精简】一行代码解决千万位以上的数字格式化为银行金额数字格式(如:¥1,000,000,000.00)
  2. 2021-01-28 粒子群优化算法-Python版本和Matlab函数 particleswarm 调用
  3. mysql之触发器详解_学习笔记之MySQL触发器详解
  4. WPF中的Attached Property
  5. github 公钥 私钥_ubuntu git生成ssh key (公钥私钥)配置github或者码云
  6. Oracle数据库及在DOS命令下面的简单操作
  7. Excel中的图片,突然全部消失不见,如何解决
  8. idea 报 Cannot access alimaven
  9. 网页设计期末结课作业 html+css+js房地产企业官网网站制作与实现
  10. PayPal集成标准版案例(asp.net)关键源码
  11. 2021全球程序员收入报告出炉,字节高级码农年薪274万元排第5!
  12. java foreach 空指针_foreach循环报NPE空指针异常
  13. 积累的VC编程小技巧之打印相关
  14. android相框_如何将旧的Android平板电脑变成自动更新的数码相框
  15. 樱桃键盘cherry G80-3000不完全拆解
  16. Json的FastJson与Jackson
  17. Android MVVM架构
  18. Python 判断能否被整除
  19. 怎么查询ESI排名(ESI全称:Essential Science Indicators)
  20. 最全WebGIS开发学习和求职资源汇总

热门文章

  1. 一生之中最值得看的书
  2. UnityShader实例17:屏幕特效之碎屏特效
  3. 德国大学生发明手机安全气囊 再不用担心碎屏啦!
  4. 对DataFrame添加一列并且每个值赋值为列表(ValueError: Length of values does not match length of index)的解决方案
  5. CDH+Kylin三部曲之一:准备工作
  6. 天涯明月刀手游刚入门新手选择什么职业好?
  7. 跑步用头戴式耳机好吗、五款最适合跑步用的耳机推荐
  8. DSP28335:外部设备接口XINTF
  9. 【总结整理】租房产品创业的三个方向和三个产品---摘自《人人都是产品经理》...
  10. 三菱FX5U多冲一切追剪程序