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 相关文章推荐
防止网站内容被拷贝的一些方法与优缺点好处与坏处分析
Nov 30 Javascript
深入理解JavaScript系列(48):对象创建模式(下篇)
Mar 04 Javascript
jQuery使用Layer弹出层插件闪退问题
Dec 22 Javascript
详解Vue中添加过渡效果
Mar 20 Javascript
jquery将标签元素的高设为屏幕的百分比
Apr 19 jQuery
vue实现登陆登出的实现示例
Sep 15 Javascript
javascript实现小型区块链功能
Apr 03 Javascript
详解Vue组件之间通信的七种方式
Apr 14 Javascript
教你完全理解ReentrantLock重入锁
Jun 03 Javascript
JS数组扁平化(flat)方法总结详解
Jun 24 Javascript
vue移动端城市三级联动组件使用详解
Jul 26 Javascript
Vue移动端用淘宝弹性布局lib-flexible插件做适配的方法
May 26 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中二维数组排序问题方法详解
2015/08/28 PHP
微信支付开发告警通知实例
2016/07/12 PHP
完美解决在ThinkPHP控制器中命名空间的问题
2017/05/05 PHP
Laravel源码解析之路由的使用和示例详解
2018/09/27 PHP
PHP执行linux命令6个函数代码实例
2020/11/24 PHP
使用 js+正则表达式为关键词添加链接
2014/11/11 Javascript
javascript中createElement的两种创建方式
2015/05/14 Javascript
JS控制按钮10秒钟后可用的方法
2015/12/22 Javascript
javascript的理解及经典案例分析
2016/05/20 Javascript
郁闷!ionic中获取ng-model绑定的值为undefined如何解决
2016/08/27 Javascript
JavaScript基于对象去除数组重复项的方法
2016/10/09 Javascript
jQuery如何防止Ajax重复提交
2016/10/14 Javascript
JS+HTML5实现上传图片预览效果完整实例【测试可用】
2017/04/20 Javascript
JS实现按钮控制计时开始和停止功能
2017/07/27 Javascript
axios进阶实践之利用最优雅的方式写ajax请求
2017/12/20 Javascript
Egg.js 中 AJax 上传文件获取参数的方法
2018/10/10 Javascript
Next.js实现react服务器端渲染的方法示例
2019/01/06 Javascript
详解js中的原型,原型对象,原型链
2020/07/16 Javascript
从零学python系列之数据处理编程实例(二)
2014/05/22 Python
python用Pygal如何生成漂亮的SVG图像详解
2017/02/10 Python
PyQt5 pyqt多线程操作入门
2018/05/05 Python
浅谈Python2、Python3相对路径、绝对路径导入方法
2018/06/22 Python
django中forms组件的使用与注意
2019/07/08 Python
Python 寻找局部最高点的实现
2019/12/05 Python
python求最大公约数和最小公倍数的简单方法
2020/02/13 Python
html5教程实现Photoshop渐变色效果
2013/12/04 HTML / CSS
Timberland美国官网:全球领先的户外品牌
2016/08/15 全球购物
介绍一下write命令
2012/09/24 面试题
会计自我鉴定
2013/11/02 职场文书
旅游管理毕业生自荐信范文
2014/03/19 职场文书
购房意向书范本
2014/04/01 职场文书
考试作弊检讨书范文
2015/01/27 职场文书
2015年药品销售工作总结范文
2015/05/25 职场文书
教师实习自我鉴定总结
2019/08/20 职场文书
浅谈自定义校验注解ConstraintValidator
2021/06/30 Java/Android
JavaScript与JQuery框架基础入门教程
2021/07/15 Javascript