前言

这段时间在做练习的时候遇到了这个要展示多个轮播图的需求,现在大部分网页的轮播图每次都是展示一个的,就算是淘宝、天猫这样的大网站。一开始在做这个轮播图的时候在决定跳转的时刻同时防止用户短时间内频繁翻页这个地方卡了一会,最后终于做出来的时候决定将实现原理分享一下。

首先看一下要实现的效果

如图,一次性展示5张图片,向左或向右翻页时图片的展示顺序是固定的。

本文将使用 JQ 实现这个效果,如果用原生js的话道理也是一样的,只是会麻烦一点,有兴趣的读者可以自己尝试一下。

实现原理

图片位置

其实同时展示多张图片的轮播图和一次展示一张 图片的轮播图原理类似,也是展示在边缘图片还要继续走之前先将图片移动到另外一边

上图是展示单张页面的原理图,当展示图片为最右边的 ‘1’ 同时还要向右翻的时候,整个矩形要移动位置,将最左边的‘1’定位到展示窗口,然后才执行向右翻的操作;
这里为了实现无缝轮播一定要在‘头’之前衔接‘尾’,要在‘尾’之后衔接头;

而要实现多张图片的无缝轮播道理也是相似的

比如说,要实现同时展示五张图片的无缝轮播,就以五张图片为整体,将3个整体合并起来;
当展示窗口移动到最左边的时候还要向左翻页,那在翻页前先将‘矩形’的中间整体定位到展示窗口,然后再执行向左翻的操作;向右翻操作同理;

防止用户短时间内进行多次翻页

我实现这个功能的方法是给定一个用于判定是否可以翻页的变量,当变量为 true 时可以执行翻页,当变量为 false 时禁止翻页,当翻页这个动作结束时再将该变量设置为 true。

具体代码

html

<div class="pic"><ul class="carousel clear"><li><a href="#"><img src="./images/work/_pic1.jpg" width="100%" alt=""></a></li><li><a href="#"><img src="./images/work/_pic2.jpg" width="100%" alt=""></a></li><li><a href="#"><img src="./images/work/_pic3.jpg" width="100%" alt=""></a></li><li><a href="#"><img src="./images/work/_pic4.jpg" width="100%" alt=""></a></li><li><a href="#"><img src="./images/work/_pic5.jpg" width="100%" alt=""></a></li><li><a href="#"><img src="./images/work/_pic1.jpg" width="100%" alt=""></a></li><li><a href="#"><img src="./images/work/_pic2.jpg" width="100%" alt=""></a></li><li><a href="#"><img src="./images/work/_pic3.jpg" width="100%" alt=""></a></li><li><a href="#"><img src="./images/work/_pic4.jpg" width="100%" alt=""></a></li><li><a href="#"><img src="./images/work/_pic5.jpg" width="100%" alt=""></a></li><li><a href="#"><img src="./images/work/_pic1.jpg" width="100%" alt=""></a></li><li><a href="#"><img src="./images/work/_pic2.jpg" width="100%" alt=""></a></li><li><a href="#"><img src="./images/work/_pic3.jpg" width="100%" alt=""></a></li><li><a href="#"><img src="./images/work/_pic4.jpg" width="100%" alt=""></a></li><li><a href="#"><img src="./images/work/_pic5.jpg" width="100%" alt=""></a></li></ul><div class="leftArrow"></div><div class="rightArrow"></div></div>

js

 $(function () {var carousel = $('.carousel'),clickable = true,timer// 自动轮播函数function autoRun() {timer = setInterval(function () {if( parseInt(carousel.css('left')) <= -1860 ){carousel.css('left', '-930px')}animate(-1)}, 3000)}// 刚打开页面时执行autoRun()$('.leftArrow').click(function () {// 防止用户疯狂点击翻页if(clickable){clickable = false// 当展示的5张图片为最左边的五张图片同时还要向左翻页时,重置位置if( parseInt(carousel.css('left')) <= -1860 ){carousel.css('left', '-930px')}animate(-1)}});$('.rightArrow').click(function () {// 防止用户疯狂点击翻页if(clickable){clickable = false// 当展示的是最右边5张图片还要向右 翻页时,重置位置if( parseInt(carousel.css('left')) >= 0 ){carousel.css('left', '-930px')}animate(1)}});// 切换页面函数function animate(direction) { // 这里传入的参数表示翻页的方向// 这里的 186px 是一张图片的宽度,因为用户手动点击翻页是随时发生的// 因此必须在手动翻页时进行位置的调整var adjustment = parseInt(carousel.css('left')) % 186if( direction === -1 ){ // 向左翻页carousel.stop().animate({left: '+='+ direction*(186 + adjustment) +'px'}, 1500)} else{ // 向右翻页carousel.stop().animate({left: '+='+ direction*(186 - adjustment) +'px'}, 1500)}// 翻页的动画用时 1.5s, 为了保证‘安全’我将再次点击许可设置在了 2s 后// 虽然你可能会认为这个有点太简单暴力了。。我想这个地方用 Promise 来实现可能会优雅一点setTimeout(function () {clickable = true}, 2000)}// 鼠标移入时清除自动轮播的定时器$('.pic').mouseenter(function () {clearInterval(timer)timer = null})// 鼠标移出时开始自动轮播的定时器$('.pic').mouseleave(function () {autoRun()})})

当然这个功能的实现方法不唯一,如果你有更好的解决办法,欢迎私信或在评论区评论~

同时展示多张图片的无缝轮播相关推荐

  1. html小圆图堆叠轮播,每次移一张图片的无缝轮播图

    my动画轮播图 *{ list-style: none; margin: 0px; padding: 0px; } .carousel{ width: 530px; height: 280px; ov ...

  2. 左右无缝轮播图的实现

    无缝轮播图: <title>无缝轮播图</title><style>*{margin: 0;padding:0; }ul{list-style: none;}.ba ...

  3. vue如何使用原生js写动画效果_原生js写一个无缝轮播图插件(支持vue)

    轮播图插件(Broadcast.js) 前言:写这个插件的原因 前段时间准备用vue加上网易云的nodejs接口,模拟网易云音乐移动端.因为想自己写一遍所有的代码以及加固自己的flex布局,所以没有使 ...

  4. html的动画效果实现无限轮播,利用 CSS3 实现的无缝轮播功能代码

    无缝轮播的原理图 1 . html的架构 : JavaScript: /*轮播图*/ function banner() { var banner = document.querySelector(' ...

  5. 轮播图 (无缝轮播图)

    1.无缝轮播核心: 在最后多加一张第一张图, 当达到最后一张t1的时候 一瞬间将ul拉回到0的位置 结构: <div class="wrap"><ul>&l ...

  6. 手把手教你用 jQuery 制作无缝轮播

    Web 开发已经离不开轮播图,目前轮播的样式五花八门,如:淡入淡出型.上下滑动型.左右滑动型.左右滑动无缝型,对比用户体验的话,无缝轮播方式是最好的,因为在播放多张图片的情况下不会出现间断感,该课程用 ...

  7. html怎么引轮播图插件,原生js写一个无缝轮播图插件(支持vue)

    轮播图插件(Broadcast.js) 前言:写这个插件的原因 前段时间准备用vue加上网易云的nodejs接口,模拟网易云音乐移动端.因为想自己写一遍所有的代码以及加固自己的flex布局,所以没有使 ...

  8. JavaScript实现无缝轮播图效果

    通过原生js实现无缝轮播效果. 思路: 1.利用html+css完成轮播图片,按钮,底部小点的整体效果的布局. 2.通过原生js完成图片轮播,无缝自动切换,底部小点随图片切换而切换. 步骤1: 建立无 ...

  9. jq 实现无缝轮播图

    工作中经常会用到轮播图,这里记载两种轮播图,供大家参考 一.自动播放的无缝轮播图(一张图片占满屏) 首先是HTML, <div class='bannerCon'><ul class ...

  10. jQuery实现的无缝轮播图

    其实只要原生js学好了,能够实现轮播图无缝切换,再用jQuery写,感觉简单多了,嗯.为了熟悉jQuery的用法,还是动手把它实现了,废话不多说,看代码吧,实现的过程都注释在代码中了,嗯.要养成注释的 ...

最新文章

  1. 树莓派视觉小车 -- 物体跟踪(OpenCV)
  2. 把数据保存到cook_将用户信息保存到Cookie中
  3. centos7 启动流程图_Linux启动过程详解
  4. 快速部署web项目上线云服务器
  5. HTTP的长连接和短连接
  6. Goroutine Local Storage的一些实现方案和必要性讨论
  7. Spark的ShuffleManager
  8. java 简单的webshell_Java Web使用JSPX白名单绕过上传WebShell | kTWO-个人博客
  9. TensorFlow YOLO3
  10. 正确下载谷歌浏览器Chrome本地安装包 ,能离线安装
  11. Golang快速入门
  12. 我可以请你吃一千块钱的饭,但是你欠我的一百块钱你得还,不为什么,这是规矩!
  13. 推荐一个好用的 sqlite 管理器 sqliteman 感觉比 navicat 好用
  14. 六大设计原则----依赖倒置原则
  15. vue中改变v-html元素样式
  16. python dict get 怎么实现的_关于python:dict.get()方法返回一个指针
  17. 利用DirectShow开发C#版的音频文件播放器(补充完善)
  18. Photoshop滤镜巧制超级美女插画效果(转)
  19. 无限循环小数四则运算_0.9999……=1? 无限循环小数能否进行四则运算?
  20. 世界卫生组织0-10岁儿童体格心智发育评价标准(女)

热门文章

  1. 人生短暂,持之以恒地做一件事情就会成功(每当烦躁心急如焚的时候就读读这篇文章吧)--转自孵化恐龙蛋
  2. Vue若依管理系统-实现管理员配置首页计数框/折线图
  3. 10.16 Loi队内胡策 贪心+毒瘤输入+DP+数论
  4. 欢迎来访个人网站——阳光日志
  5. Introduction to Wireless LAN Measurements From 802.11a to 802. 11 ac
  6. 高通WLAN框架学习(3)- -WLAN FTM 模式
  7. 英国资深律师称加密货币和智能合约必然将成为社会主流
  8. [OneNote同步失败记录]OneNote 当前无法同步笔记。将继续尝试。
  9. 香港各个大学计算机类专业
  10. html游戏寻宝,达内:用scratch实现的小游戏—迷宫寻宝