JS实现动态无缝轮播


Posted in Javascript onJanuary 11, 2020

在同学的帮助下,终于使用纯js代码实现了动态轮播,学无止境加油吧!

JS实现动态无缝轮播

效果图是这样的,我们需要定义一个div,并放入三张图片,还需要左右两个按钮,以及底下三个按钮三个div。

先看布局代码

<div class="banner" id="banner">
    <ul class="clear" >
      <li style="left:0" ><img src="k1.jpg"></li>
      <li style="left:100%" ><img src="k-2.jpg"></li>
      <li style="left:100%"><img src="k-3.jpg"></li>
    </ul>
    <div class="pageNav"></div>
    <div class="leftBtn"></div>
    <div class="rightBtn"></div>
</div>

如何是css部分

.clear:after{
     display:block;
     content:"";
     clear:both;
    }
    .banner{
      width: 100%;
      position:relative;
      height: 390px;
    }
    .banner ul{
      width: 100%;
      height: 390px;
      list-style-type:none;
      overflow: hidden;
    }
    .banner ul li{
      width: 100%;
      position: absolute;
    }
    .pageNav{
      position: absolute;
      left:50%;
      bottom:20px;
      transform: translateX(-50%);
    }
    .pageNav a{
      display:inline-block;
      margin:0 5px;
      width: 20px;
      height: 20px;
      background-color:#fff;
      border-radius:50%;
      border:2px solid #000;
      cursor:pointer;
    }
    .pageNav a.cur{
      background-color:red;
    }
    .leftBtn, .rightBtn{
      position:absolute;
      top: 50%;
      transform:translateY(-50%);
      width: 40px;
      height: 50px;
      background-color:rgba(0, 0, 0, 0.5);
      cursor:pointer;
    }
    .leftBtn{
      left:0;
    }
    .rightBtn{
      right:0;
    }
    .leftBtn:hover,.rightBtn:hover{
      background-color:rgba(0, 0, 0, 0.8);
 }

接下来是js部分

var banner=document.getElementById("banner");
  var ul=banner.getElementsByTagName("ul")[0];
  var li=ul.getElementsByTagName("li");
  var pageNav=banner.getElementsByClassName("pageNav")[0],leftBtn=document.getElementsByClassName("leftBtn")[0],rightBtn=document.getElementsByClassName("rightBtn")[0],n=0,index=0,timerElem=null,state=false;
  for(var i=0;i<li.length;i++){//给图片底下添加按钮
    pageA=document.createElement("a");
    if(i==0){
      pageA.className="cur";
    }
    pageNav.appendChild(pageA);
  }
  pageNav.addEventListener('click',pageNavClick,false);
  function pageNavClick(e){
    if(state){
      return;
    }
    e=e||window.event;//兼容性考虑
    for(var i=0;i<li.length;i++){
      if(pageNav.children[i]==e.target){
        index=n;
        var offset=i-n;
        n=i;
        showBtn(n);
        if(offset>0){
          showImg(-100);
        }else{
          showImg(100);
        }
      }
    }
  }
  function showBtn(index){
    for(var z=0;z<li.length;z++){
      pageNav.children[z].className="";
    }
    pageNav.children[index].className="cur";
  }
  function showImg(offset){
    clearInterval(timerElem);
    var speed=offset/20;
    timerElem=setInterval(function(){
      state=true;
      if(parseInt(li[n].style.left)==0){
        state=false;
        clearInterval(timerElem);
        li[n].style.left="0";
        for(var l=0;l<n;l++){
          li[l].style.left="-100%"
        }
        for(var r=n+1;r<li.length;r++){
          li[r].style.left="100%";
        }
      }else{
        li[n].style.left=parseInt(li[n].style.left)+speed+"%";
        li[index].style.left=parseInt(li[index].style.left)+speed+"%";
      }
    },100)
  }
  leftBtn.onclick=function(){
    if(state){
      return;
    }
    index=n;
    n--;
    if(n<0){
      n=li.length-1;
      li[n].style.left="-100%";
    }
    showBtn(n);
    showImg(100);
  }
  rightBtn.onclick=function(){
    if(state){
      return;
    }
    index=n;
    n++;
    if(n>li.length-
      1){
      n=0;
      li[n].style.left="100%";
    }
    showBtn(n);
    showImg(-100);
  }
  var timer;
  timer=setInterval(autoLunbo,3000);
  function autoLunbo(){
    rightBtn.onclick();
  }
  banner.onmouseover=function(){
    clearInterval(timer);
  }
  banner.onmouseout=function(){
    timer=setInterval(autoLunbo,3000);
}

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

Javascript 相关文章推荐
jQuery处理xml格式的返回数据(实例解析)
Nov 28 Javascript
jQuery判断checkbox是否选中的小例子
Dec 02 Javascript
js获取select标签选中值的两种方式
Jan 09 Javascript
怎么判断js脚本加载完成
Feb 28 Javascript
基于BootStrap的Metronic框架实现页面链接收藏夹功能按钮移动收藏记录(使用Sortable进行拖动排序)
Aug 29 Javascript
JavaScript实现清空(重置)文件类型INPUT元素值的方法
Nov 17 Javascript
js实现省份下拉菜单效果
Feb 15 Javascript
解决ng-repeat产生的ng-model中取不到值的问题
Oct 02 Javascript
jquery.param()实现数组或对象的序列化方法
Oct 08 jQuery
基于vue的验证码组件的示例代码
Jan 22 Javascript
何时/使用 Vue3 render 函数的教程详解
Jul 25 Javascript
maptalks+three.js+vue webpack实现二维地图上贴三维模型操作
Aug 10 Javascript
原生js实现无缝轮播图
Jan 11 #Javascript
JS实现轮播图效果
Jan 11 #Javascript
js实现带搜索功能的下拉框
Jan 11 #Javascript
js实现select下拉框选择
Jan 11 #Javascript
js实现二级联动简单实例
Jan 11 #Javascript
jQuery实现轮播图效果demo
Jan 11 #jQuery
详解微信小程序中var、let、const用法与区别
Jan 11 #Javascript
You might like
提交表单后 PHP获取提交内容的实现方法
2016/05/25 PHP
微信公众号开发之文本消息自动回复php代码
2016/08/08 PHP
php性能分析之php-fpm慢执行日志slow log用法浅析
2016/10/17 PHP
PHP正则匹配操作简单示例【preg_match_all应用】
2017/07/10 PHP
PDO操作MySQL的基础教程(推荐)
2017/08/18 PHP
轻松创建nodejs服务器(8):非阻塞是如何实现的
2014/12/18 NodeJs
jQuery中:nth-child选择器用法实例
2014/12/31 Javascript
js实现分割上传大文件
2016/03/09 Javascript
AngularJS 应用身份认证的技巧总结
2016/11/07 Javascript
javascript中this关键字详解
2016/12/12 Javascript
jQuery插件echarts实现的多折线图效果示例【附demo源码下载】
2017/03/04 Javascript
Node.js操作redis实现添加查询功能
2017/05/25 Javascript
Angular.JS中select下拉框设置value的方法
2017/06/20 Javascript
Node.js中,在cmd界面,进入退出Node.js运行环境的方法
2018/05/12 Javascript
最后说说Vue2 SSR 的 Cookies 问题
2018/05/25 Javascript
原生js实现Flappy Bird小游戏
2018/12/24 Javascript
JavaScript中import用法总结
2019/01/20 Javascript
jquery 验证用户名是否重复代码实例
2019/05/14 jQuery
小程序富文本提取图片可放大缩小
2020/05/26 Javascript
vue实现的多页面项目如何优化打包的步骤详解
2020/07/19 Javascript
js绘制一条直线并旋转45度
2020/08/21 Javascript
一篇文章看懂JavaScript中的回调
2021/01/05 Javascript
小议Python中自定义函数的可变参数的使用及注意点
2016/06/21 Python
python实现字符串完美拆分split()的方法
2019/07/16 Python
Python reshape的用法及多个二维数组合并为三维数组的实例
2020/02/07 Python
浅谈Python中的异常和JSON读写数据的实现
2020/02/27 Python
CentOS 7如何实现定时执行python脚本
2020/06/24 Python
Python自带的IDE在哪里
2020/07/01 Python
波兰电子产品购物网站:Vobis
2019/05/26 全球购物
Booking.com德国:预订最好的酒店和住宿
2020/02/16 全球购物
个人批评与自我批评范文
2014/10/17 职场文书
上课迟到检讨书
2015/05/06 职场文书
党员干部学习十八届五中全会精神心得体会
2016/01/05 职场文书
HR在给员工开具离职证明时,需要注意哪些问题?
2019/07/03 职场文书
聊一聊Redis与MySQL双写一致性如何保证
2021/06/26 Redis
JavaScript架构搭建前端监控如何采集异常数据
2022/06/25 Javascript