热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

JS+JQuery实现无缝连接轮播图

这篇文章主要介绍了JS+JQuery实现无缝连接轮播图,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

我之前写过一个简易版的自动+手动轮播图:简易轮播图
但是这个轮播图在切换的时候是没有实现无缝滚动的,每张图片都是单张切换的,而不是滑动。现在用JQuery实现无缝连接的轮播图。

无缝连接的轮播图的原理如下:

代码:





  
  




  
  
  • <
    >

    这段代码用单例模式优化一下:

    html部分:test.html

    
    
    
    
      
      
    
    
    
    
      
      
  • <
    >

    JS部分:index.js

    function debounce(func, wait, immediate) {
      let timer = null,
        result = null;
      return function anonymous(...args) {
        let cOntext= this,
          now = immediate && !timer;
        clearTimeout(timer);
        timer = setTimeout(() => {
          timer = null;
          !immediate &#63; (result = func.call(context, ...args)) : null;
        }, wait);
        now &#63; (result = func.call(context, ...args)) : null;
        return result;
      };
    }
    
    let bannerModule = (function () {
      let $cOntainer= $("#container"),
        $wrapper = $container.children(".wrapper"),
        $btnLeft = $container.find(".btnLeft"),
        $btnRight = $container.find(".btnRight"),
        $dots = $container.find(".dots"),
        $dotList = $dots.find("li");
    
      let autoTimer = null,
        interval = 2000,
        imgIndex = 0; //当前轮播的图片索引,默认第一张
      // 自动轮播
      function autoPlay() {
        // 让wrapper向左移动
        imgIndex++;
        /* if(imgIndex === 4) imgIndex = 0; 这样写会导致图片会一下变到第一张,不是无缝滚动
            无缝滚动:
            1. 把第一张克隆一份放到末尾,wrapper中会比真实的图片层多一张
            2. 依然一张张往后滚动,滚动到第5张的时候,继续向后走(imgIndex=6),看到了克隆的第一张,再要向后走的时候,
              让其“立即”跳转到真实的第一张(肉眼看不出跳转),然后运动到第二张......
            */
        if (imgIndex > 5) {
          // 上次显示的是克隆的那张,忽略真实的第一张,让其立即跳转到第二张
          $wrapper.css("left", 0);
          imgIndex = 1;
        }
    
        // 匀速向左移动
        // 无动画版:$wrapper.css('transform', 'translate(' + (-imgIndex * 500) + 'px)');
        // 动画版:
        $wrapper.stop().animate({
          left: -imgIndex * 500 //JQ自动补'px'
        }, 300);
    
        showDots();
      }
    
      // 圆点对焦
      function showDots() {
        // 由于不能修改imgIndex的值,所以定义一个临时变量
        let temp = imgIndex;
        temp === 5 &#63; (temp = 0) : null;
        $dotList.each((index, item) => {
          let $item = $(item);
          if (index === temp) {
            $item.addClass("active");
            return;
          }
          $item.removeClass("active");
        });
      }
    
      //点击圆点
      function clickDots() {
        $dotList.click(debounce(function () {
          let index = $(this).index();
          imgIndex = index;
    
          $wrapper.stop().animate({
            left: -imgIndex * 500 //JQ自动补'px'
          }, 300);
    
          showDots();
        },300,true));
      }
    
      // 左右按键
      function btnClick() {
        $btnLeft.click(function () {
          imgIndex--;
          if (imgIndex <0) {
            // 上次显示的是真实的第一张,忽略克隆的倒数第一张,让其立即跳转倒数第二张
            $wrapper.css('left', -2500);
            imgIndex = 4;
          }
    
          $wrapper.stop().animate({
            left: -imgIndex * 500 //JQ自动补'px'
          }, 300);
    
          showDots();
        });
    
        // 右键点击:相当于自动轮播
        $btnRight.click(debounce(autoPlay, 300, true));
      }
    
      return {
        init: function () {
          autoTimer = setInterval(autoPlay, interval);
    
          // 鼠标进入/离开轮播区域时停止/开启自动轮播
          $container.on("mouseenter", () => {
            clearInterval(autoTimer);
          });
          $container.on("mouseleave", () => {
            autoTimer = setInterval(autoPlay, interval);
          });
    
          clickDots();
          btnClick();
        },
      };
    })();
    
    bannerModule.init();

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


    推荐阅读
    • Ihavethefollowingonhtml我在html上有以下内容<html><head><scriptsrc..3003_Tes ... [详细]
    • mui框架offcanvas侧滑超出部分隐藏无法滚动如何解决
      web前端|js教程off-canvas,部分,超出web前端-js教程mui框架中off-canvas侧滑的一个缺点就是无法出现滚动条,因为它主要用途是设置类似于qq界面的那种格 ... [详细]
    • Java实战之电影在线观看系统的实现
      本文介绍了Java实战之电影在线观看系统的实现过程。首先对项目进行了简述,然后展示了系统的效果图。接着介绍了系统的核心代码,包括后台用户管理控制器、电影管理控制器和前台电影控制器。最后对项目的环境配置和使用的技术进行了说明,包括JSP、Spring、SpringMVC、MyBatis、html、css、JavaScript、JQuery、Ajax、layui和maven等。 ... [详细]
    • CSS3选择器的使用方法详解,提高Web开发效率和精准度
      本文详细介绍了CSS3新增的选择器方法,包括属性选择器的使用。通过CSS3选择器,可以提高Web开发的效率和精准度,使得查找元素更加方便和快捷。同时,本文还对属性选择器的各种用法进行了详细解释,并给出了相应的代码示例。通过学习本文,读者可以更好地掌握CSS3选择器的使用方法,提升自己的Web开发能力。 ... [详细]
    • Voicewo在线语音识别转换jQuery插件的特点和示例
      本文介绍了一款名为Voicewo的在线语音识别转换jQuery插件,该插件具有快速、架构、风格、扩展和兼容等特点,适合在互联网应用中使用。同时还提供了一个快速示例供开发人员参考。 ... [详细]
    • 本文介绍了解决IE678伪类不兼容问题的方法,包括少用CSS3和HTML5独有的属性,使用CSS hacker,使用last-child清除浮动、批量添加标签、去掉list item最后一个的border-right等技巧。同时还介绍了使用after清除浮动时加上IE独有属性zoom:1的处理方法。另外,本文还提到可以使用jQuery代替批量添加标签的功能,以及使用负边距和CSS2选择器element+element去掉list item最后一个的border-right的方法。 ... [详细]
    • 本文介绍了前端人员必须知道的三个问题,即前端都做哪些事、前端都需要哪些技术,以及前端的发展阶段。初级阶段包括HTML、CSS、JavaScript和jQuery的基础知识。进阶阶段涵盖了面向对象编程、响应式设计、Ajax、HTML5等新兴技术。高级阶段包括架构基础、模块化开发、预编译和前沿规范等内容。此外,还介绍了一些后端服务,如Node.js。 ... [详细]
    • HTML5网页模板怎么加百度统计?
      本文介绍了如何在HTML5网页模板中加入百度统计,并对模板文件、css样式表、js插件库等内容进行了说明。同时还解答了关于HTML5网页模板的使用方法、表单提交、域名和空间的问题,并介绍了如何使用Visual Studio 2010创建HTML5模板。此外,还提到了使用Jquery编写美好的HTML5前端框架模板的方法,以及制作企业HTML5网站模板和支持HTML5的CMS。 ... [详细]
    • Android实战——jsoup实现网络爬虫,糗事百科项目的起步
      本文介绍了Android实战中使用jsoup实现网络爬虫的方法,以糗事百科项目为例。对于初学者来说,数据源的缺乏是做项目的最大烦恼之一。本文讲述了如何使用网络爬虫获取数据,并以糗事百科作为练手项目。同时,提到了使用jsoup需要结合前端基础知识,以及如果学过JS的话可以更轻松地使用该框架。 ... [详细]
    • 本文介绍了一种图片处理应用,通过固定容器来实现缩略图的功能。该方法可以实现等比例缩略、扩容填充和裁剪等操作。详细的实现步骤和代码示例在正文中给出。 ... [详细]
    • 本文介绍了使用jQuery实现图片预加载和等比例缩放的方法,同时提供了演示和相关代码。该方法可以重置图片的宽度和高度,并使图片在水平和垂直方向上居中显示。 ... [详细]
    • 本文介绍了DataTables插件的官方网站以及其基本特点和使用方法,包括分页处理、数据过滤、数据排序、数据类型检测、列宽度自动适应、CSS定制样式、隐藏列等功能。同时还介绍了其易用性、可扩展性和灵活性,以及国际化和动态创建表格的功能。此外,还提供了参数初始化和延迟加载的示例代码。 ... [详细]
    • 获取ul中第一个li元素的五种方法和多个ul中第一个li元素的四种方法
      本文介绍了获取ul中第一个li元素的五种方法和多个ul中第一个li元素的四种方法,包括使用jQuery的选择器和遍历方法。通过这些方法,可以方便地获取到所需的元素,并进行相应的操作。 ... [详细]
    • 如何压缩网站页面以减少页面加载时间
      本文介绍了影响网站打开时间的两个因素,即网页加载速度和网站页面大小。重点讲解了如何通过压缩网站页面来减少页面加载时间。具体包括图片压缩、Javascript压缩、CSS压缩和HTML压缩等方法,并推荐了相应的压缩工具。此外,还提到了一款Google Chrome插件——网页加载速度分析工具Speed Tracer。 ... [详细]
    • angular.element使用方法及总结
      2019独角兽企业重金招聘Python工程师标准在线查询:http:each.sinaapp.comangularapielement.html使用方法 ... [详细]
    author-avatar
    手机用户2502898783
    这个家伙很懒,什么也没留下!
    PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
    Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有