JS轮播图的实现方法


Posted in Javascript onAugust 24, 2020

本文实例为大家分享了JS轮播图的实现代码,供大家参考,具体内容如下

需求:

自动轮播,鼠标移入轮播停止、移出继续,小圆点点击切图,左右箭头切图

效果图:

JS轮播图的实现方法

思路

通过编写过渡动画实现轮播效果,图片的出现动画以及移出动画。显示区的图片移出,切换的图进入分别调用动画,程序关键点:哪张图应该进入,哪张图应该移出。

轮播分为三部分:

自动轮播,左右箭头翻图,底部小圆点点击翻图。

编写程序顺序:

1. 小圆点点击

为什么先做小圆点呢?做小圆点点击功能时,我们能够清晰的知道哪张图片应该切换过来,哪张图片应该移开。例如,显示区是第一张图时,点击第二个原点,那么当前的第一张图应该移开,第二图应该进入。

2.左右箭头切换

这部分功能,我们可以这种思路,当点击左箭头时,相当于我们按顺序点击1、2、3号小圆点,只是显示区为3号图时,我们需要将下一张设置为1号图。所以加一个判断条件即可,当计数器为3时,重置为1;右边箭头相反即可 顺序变为3、2、1,当当计数器为1时,重置为3。 

3.自动轮播

这功能就相当于在一定的时间间隔内,点击右边箭头或者左边箭头。

HTML部分:

<div id="banner">
 <div class="w">
  <!--   左右箭头-->
  <span class="iconfont icon-zuojiantou" onclick="arrow_left()"></span>
  <span class="iconfont icon-youjiantou" onclick="arrow_right()"></span>
  <!--   轮播图-->
  <ul>
   <li><img src="img/1.jpg" alt=""></li>
   <li style="left: 1000px"><img src="img/2.jpg" alt="" ></li>
   <li style="left: 1000px"><img src="img/3.jpg" alt="" ></li>
  </ul>
  <!--  /小圆点-->
  <ol id="circleContainer">
   <li onclick="move(0)"></li>
   <li onclick="move(1)"></li>
   <li onclick="move(2)"></li>
  </ol>
 </div>
</div>

CSS部分:

<style>
  *{
   margin: 0;
   padding: 0;
   list-style: none;
  }
  .w {
   width: 1000px;
   height: 600px;
   margin: 100px auto 0;
   position: relative;
   overflow: hidden;
  }
  ul {
   height: 600px;
  }
  @keyframes leftCome {
   from {
    left: -100%;
   }
   to {
    left: 0;
   }
  }
  @keyframes leftOut {
   from {
    left: 0;
   }
   to {
    left: 100%;
   }
  }
  @keyframes rightCome {
   from {
    left: 100%;
   }
   to {
    left: 0;
   }
  }
  @keyframes rightOut {
   from {
    left: 0;
   }
   to {
    left: -100%;
   }
  }
  ul li {
   position: absolute;
   width: 1000px;
  }
  ul li img {
   width: 100%;
   height: 600px;
  }
  .iconfont {
   color: white;
   position: absolute;
   font-size: 30px;
   top: calc(50% - 15px);
   background-color: rgba(216, 216, 216, 0.23);
   cursor: pointer;
   opacity: 0;
   transition: opacity .3s linear;
   z-index: 999;
  }
  .iconfont:hover {
   color: palegreen;
  }
  .icon-zuojiantou {
   left: 0;
   border-top-right-radius: 50%;
   border-bottom-right-radius: 50%;
  }
  .icon-youjiantou {
   right: 0;
   border-top-left-radius: 50%;
   border-bottom-left-radius: 50%;
  }
  #circleContainer {
   position: absolute;
   bottom: 10px;
   left: calc(50% - 30px);
  }
  #circleContainer li {
   display: inline-block;
   width: 20px;
   height: 20px;
   border-radius: 50%;
   background-color: white;
   margin-right: 5px;
  }
  #circleContainer .change {
   background-color: palegreen;
   box-shadow: 0 0 10px #7dd07d;
  }
</style>

JS部分:

<script>
  let timer ;
  window.onload = function(){
   timer = setInterval(function () {
    arrow_left();
   },3000)
  };
  let arrow = document.querySelectorAll(".iconfont");
  let w = document.querySelector(".w");
  let circle = document.querySelectorAll("ol li");
  w.addEventListener("mouseenter",function () {
   clearInterval(timer);
   arrow[0].style.opacity = "1";
   arrow[1].style.opacity = "1";
  });
  w.addEventListener("mouseleave",function () {
   arrow[0].style.opacity = "0";
   arrow[1].style.opacity = "0";
   timer = setInterval(function () {
    arrow_left();
   },3000)
  });
  circle[0].className = "change";
  let location_i = 0;
  let li = document.querySelectorAll("ul li");
  // 移动函数
  function move(i,direcTion_) {
    if (direcTion_ === "right") {
     if (location_i !== i) {
      li[i].style.animation = "rightCome .5s ease forwards";
      li[location_i].style.animation = "rightOut .5s ease forwards";
      location_i = i;
      num = i;
     }
    } else {
     if (location_i !== i) {
      li[i].style.animation = "leftCome .5s ease forwards";
      li[location_i].style.animation = "leftOut .5s ease forwards";
      location_i = i;
      num = i;
     }
    }
    for (let i = 0 ; i<circle.length ;i++){
     circle[i].className = "";
    }
    circle[location_i].className = "change";
  }
  // 右箭头
  let flag = true;
  let num = 0;
  function arrow_right() {
   flag = false ;
   num === 2 ? num = 0 : num = location_i + 1;
   move(num);
  }
  // 左箭头
  function arrow_left() {
   num === 0 ? num = 2 : num = location_i - 1;
   move(num,"right");
  }
</script>

精彩专题分享:jQuery图片轮播 JavaScript图片轮播 Bootstrap图片轮播

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

Javascript 相关文章推荐
使用JQuery和CSS模拟超链接的用户单击事件的实现代码
May 23 Javascript
Firefox和IE兼容性问题及解决方法总结
Oct 08 Javascript
JS定时器实例详细分析
Oct 11 Javascript
jquery通过select列表选择框对表格数据进行过滤示例
May 07 Javascript
用js模拟struts2的多action调用示例
May 19 Javascript
JavaScript SweetAlert插件实现超酷消息警告框
Jan 28 Javascript
jquery 判断div show的状态实例
Dec 03 Javascript
原生js实现弹出层登录拖拽功能
Dec 05 Javascript
详解AngularJS中$filter过滤器使用(自定义过滤器)
Feb 04 Javascript
jquery submit()不能提交表单的解决方法
Apr 24 jQuery
基于JavaScript实现前端数据多条件筛选功能
Aug 19 Javascript
Vue-component全局注册实例
Sep 06 Javascript
js 函数性能比较方法
Aug 24 #Javascript
JavaScript实现简单验证码
Aug 24 #Javascript
JavaScript经典案例之简易计算器
Aug 24 #Javascript
原生js实现拖拽移动与缩放效果
Aug 24 #Javascript
JavaScript实现拖拽和缩放效果
Aug 24 #Javascript
Jquery 获取相同NAME 或者id删除行操作
Aug 24 #jQuery
JavaScript实现矩形块大小任意缩放
Aug 25 #Javascript
You might like
漫威DC即将合作联动,而双方早已经秘密开始
2020/04/09 欧美动漫
php实现的Timer页面运行时间监测类
2014/09/24 PHP
PHP SESSION跨页面传递失败解决方案
2020/12/11 PHP
Js 订制自己的AlertBox(信息提示框)
2009/01/09 Javascript
Prototype Function对象 学习
2009/07/12 Javascript
javascript 浏览器检测代码精简版
2010/03/04 Javascript
javascript异步编程的4种方法
2014/02/19 Javascript
关于JavaScript对象的动态选择及遍历对象
2014/03/10 Javascript
处理文本部分内容的TextRange对象应用实例
2014/07/29 Javascript
Javascript获取表单名称(name)的方法
2015/04/02 Javascript
基于javascript实现彩票随机数生成(简单版)
2020/04/17 Javascript
AngularJS基础 ng-submit 指令简单示例
2016/08/03 Javascript
jQuery 全选 全不选 事件绑定的实现代码
2017/01/23 Javascript
详解vue.js全局组件和局部组件
2017/04/10 Javascript
快速处理vue渲染前的显示问题
2018/03/05 Javascript
layui监听工具栏的实例(操作列表按钮)
2019/09/10 Javascript
浅谈vuex中store的命名空间
2019/11/08 Javascript
JS eval代码快速解密实例解析
2020/04/23 Javascript
vue使用swiper实现左右滑动切换图片
2020/10/16 Javascript
pycharm 使用心得(六)进行简单的数据库管理
2014/06/06 Python
使用Python编写提取日志中的中文的脚本的方法
2015/04/30 Python
Python聊天室实例程序分享
2016/01/05 Python
python dict.get()和dict['key']的区别详解
2016/06/30 Python
python3实现163邮箱SMTP发送邮件
2018/05/22 Python
python自动循环定时开关机(非重启)测试
2019/08/26 Python
Python hashlib模块加密过程解析
2019/11/05 Python
Pycharm编辑器功能之代码折叠效果的实现代码
2020/10/15 Python
纯CSS3大转盘抽奖示例代码(响应式、可配置)
2017/01/13 HTML / CSS
The Hut德国站点:时装、家居用品、美容等
2016/09/23 全球购物
Silk’n激光脱毛器官网:silkn.com
2016/10/06 全球购物
Stefania Mode英国:奢华设计师和时尚服装
2017/10/23 全球购物
出纳的岗位职责
2013/11/09 职场文书
公司应聘求职信
2014/06/21 职场文书
党校个人总结
2015/03/04 职场文书
超搞笑婚前保证书
2015/05/08 职场文书
创业计划书之儿童理发店
2019/09/27 职场文书