原生js实现轮播图实例教程

更新日期: 2020-10-29阅读: 1.7k标签: 轮播

轮播图是前端最基本、最常见的功能,不论web端还是移动端,大平台还是小网站,大多在首页都会放一个轮播图效果。本教程讲解怎么实现一个简单的轮播图效果。学习本教程之前,读者需要具备htmlcss技能,同时需要有简单的javascript基础。

本实例效果如下图所示:


 

 根据实例效果,需要的元素有图片、中间圆点按钮、左右箭头按钮等。实际html代码如下所示:

<div class="banner_container" id="bannerContainer">
  <div class="img_box"><!--图片元素-->
    <div><img src="img/1.jpg" alt=""></div>
    <div><img src="img/2.jpg" alt=""></div>
    <div><img src="img/3.jpg" alt=""></div>
    <div><img src="img/4.jpg" alt=""></div>
    <div><img src="img/5.jpg" alt=""></div>
  </div>
  <ul class="sel_box"><!--选择按钮-->
    <li>1</li>
    <li>2</li>
    <li>3</li>
    <li>4</li>
    <li>5</li>
  </ul>
  <div class="left_btn btn"></div><!--左切换按钮-->
  <div class="right_btn btn"></div><!--右切换按钮-->
</div>

读者可以根据实际效果自行编写样式。

接下来完成javascript部分的代码,先分析一下轮播图的效果所需要的步骤。

1. 获取轮播图各个html元素及声明相关变量。如下所示:

  //获取外包容器
  var eContainer = document.getElementById('bannerContainer');
  //获取图片总容器
  var eImgBox = eContainer.getElementsByClassName('img_box')[0];
  //获取图片容器列表
  var aImgList = eImgBox.getElementsByTagName('div');
  //获取选择按钮容器
  var eSelBox = eContainer.getElementsByClassName('sel_box')[0];
  //获取选择按钮
  var aSelList = eSelBox.getElementsByTagName('li');
  //获取左按钮
  var eLeftBtn = eContainer.getElementsByClassName('left_btn')[0];
  //获取右按钮
  var eRightBtn = eContainer.getElementsByClassName('right_btn')[0];
  //当前图片索引
  var nIndex = 0;
  //轮播图自动切换定时器
  var timer = null;

2. 设置图片容器大小及位置
一般轮播图的数量不是固定的,可能是3个,也可能是5个,所以 “图片容器的宽度=外包容器宽度 * 轮播图数量”,代码如下:

  //获取外包容器宽度
  var nContainerW = eContainer.offsetWidth;
  //设置图片总容器宽度
  eImgBox.style.width = nContainerW * aImgList.length + 'px'; 

 

3. 设置默认显示图片及选择按钮,本实例第一张图为默认图片,代码如下:

  //默认显示第一张图片
  eImgBox.style.left = '0px';
  //默认第一个选择按钮设为当前选择按钮
  aSelList[0].className = 'cur';

 

4. 给选择按钮绑定轮播图切换事件,在这里把点击事件委托给选择按钮容器,如下所示:

  eSelBox.addEventListener('click',function(event){
    //获取当前点击元素
    var eTarget = event.target;
    //判断点击的是li元素,且不是当前选择按钮
    if(eTarget.nodeName.toLowerCase() == 'li' && eTarget.className != 'cur'){
      //设置当前图片索引
      nIndex = eTarget.innerHTML-1
      //修改轮播图容器位置,用于切换图片
      eImgBox.style.left = -nIndex * nContainerW + 'px';
      //删除所有选择按钮上的className
      for(let i=0;i<aSelList.length;i++){
        aSelList[i].className = '';
      }
      //修改当前选择按钮的className,设为当前选择按钮
      eTarget.className = 'cur';
    }
  });

轮播图切换属于本实例核心功能,在选择数字按钮时会切换;点击左、右两个按钮时也会切换;图片还会自动切换。所以可以把切换图片的功能封装成一个函数,如下所示:

  //轮播图切换
  function fnSwitchImg(){
    //修改轮播图容器位置,用于切换图片
    eImgBox.style.left = -nIndex * nContainerW + 'px';
    //删除所有选择按钮上的className
    for(let i=0;i<aSelList.length;i++){
      aSelList[i].className = '';
    }
    //修改当前选择按钮的className,设为当前选择按钮
    aSelList[nIndex].className = 'cur';
  }

那么第 4 步的代码修改如下:

  //选择按钮绑定事件
  eSelBox.addEventListener('click',function(event){
    //获取当前点击元素
    var eTarget = event.target;
    //判断点击的是li元素,且不是当前选择按钮
    if(eTarget.nodeName.toLowerCase() == 'li' && eTarget.className != 'cur'){
      //设置当前图片索引
      nIndex = eTarget.innerHTML-1
      fnSwitchImg();
    }
  });

 

5. 点击左、右两个按钮也是可以切换图片的,分别添加事件,代码如下:

  eLeftBtn.onclick = function(){
    if(nIndex<=0){
      return; //如果当前是第一张图片,阻止后续代码执行
    }
    //往左切换图片
    nIndex --;
    fnSwitchImg();
  }
  eRightBtn.onclick = function(){
    if(nIndex>=aSelList.length-1){
      return; //如果当前是最后一张图片,阻止后续代码执行
    }
    //往右切换图片
    nIndex ++;
    fnSwitchImg();
  }


6. 给轮播图添加自动切换功能
完成这些步骤之后,轮播图已能正常运行,不过大部分轮播图都是可以自动切换的。所以还需要加上一个定时器功能,设置轮播图自动切换;当鼠标移入轮播图的时候,需要移除定时器;鼠标移出时再次启动定时器。如下所示:

  //轮播图自动切换
  timer = setInterval(function(){
    //向右切换图片
    nIndex ++;
    //已切换到最后一张图片时,跳回第一张图片
    if(nIndex>=5){
      nIndex = 0;
    }
    fnSwitchImg();
  },3000);

  //鼠标滑入轮播图停止自动切换
  eContainer.onmouseenter = function(){
    clearInterval(timer);
  }

  //鼠标移出轮播图开始自动切换
  eContainer.onmouseleave = function(){
    //轮播图自动切换
    timer = setInterval(function(){
      //向右切换图片
      nIndex ++;
      //已切换到最后一张图片时,跳回第一张图片
      if(nIndex>=5){
        nIndex = 0;
      }
      fnSwitchImg();
    },3000);
  }

 

本实例图片切换的动画效果使用的是css3的过渡动画,所以需要给相关元素添加transition样式属性。


链接: https://www.fly63.com/article/detial/10125

vue轮播图_用vue实现一个仿简书的轮播图

Vue的理念是以数据驱动视图,所以拒绝通过改变元素的margin-top来实现滚动效果。写好css样式,只需改变每张图片的class即可实现轮播效果。可以将轮播图看成两个,如图所示

swiper在angular.js中使用循环轮播失效的解决方法总汇

我们在anjular.js 中使用了swiper轮播图,把json数据放入swiper-slide中,容易出现swiper循环轮播失效的问题,就此整理一些此问题的解决方法

原生 js 实现移动端 Touch 轮播图

touch轮播图其实就是通过手指的滑动,来左右切换轮播图,下面我们通过一个案例,来实现下。结构上,还是用ul、li来存放轮播图片,ol、li来存放轮播小圆点:

原生JS实现滑动轮播图

纯粹只使用了html+css+JS,发现还是比较简单的,并不需要借助别的插件或类库来实现,核心是把图片组合成一行序列,通过左右移动,以及父元素的overflow:hidden来决定显示的图片

使用backgroundImage解决图片轮播切换

利用backgroundImage可以添加多张图片,以及位置偏移实现轮播效果:创建一个div;并用backgroundImage给div附图片;利用backgroundPosition调节位置;利用css3 transition调节过渡

jquery轮播图的实现

今天分享的是一个简单的轮播图,这个轮播图的特效很简单,能够进行图片的轮播以及点击相应图片,图片能够跳转到相应位置,首先书写的div部分;然后书写style样式部分

js无缝轮播的实现思路

最简单的点击按钮切换图片很简单,给按钮添加click事件监听,改变图片的translateX。当然如果想要轮播图从上到下播放,相应的改变translateY就行。

swiper在tab切换的时候,swiper不生效,当display:none 后 再次显示 无法自动滑动问题解决方案

当你兴高采烈的写完一个tab,并且把swiper嵌入到每一个tab item 觉得大功告成的时候,你会发现,永远只有第一个tab上的swiper生效了,其余的不管你怎么切换,swiper总是初始化失败,是的,就是不能愉快的滚动了~

两种轮播图实现方式

首页轮播图一直没有达到理想的效果,在网上找了两个实现方法,一个是用css自己实现,一个是用swiper插件,个人认为swiper做的还比较好用。这里只贴出主要的实现代码,想要看具体实现代码及效果可以到对应网址上看:

原生Js 实现的简单无缝滚动轮播图

简单无缝滚动轮播图存在很多漏洞,就是后期增加图片时会很不方便,需要改动的地方也很多,耦合性也很强,只适用于一部分程序,所以我们可以通过改动图片结构和计算折算点的方式,升级代码。

点击更多...

内容以共享、参考、研究为目的,不存在任何商业目的。其版权属原作者所有,如有侵权或违规,请与小编联系!情况属实本人将予以删除!