js原生代码实现简单的轮播图实例教程

刺骨的言语ヽ痛彻心扉 2023-07-24 09:19 37阅读 0赞

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

本实例效果如下图所示:

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

  1. <div class="banner_container" id="bannerContainer">
  2. <div class="img_box"><!--图片元素-->
  3. <div><img src="img/1.jpg" alt=""></div>
  4. <div><img src="img/2.jpg" alt=""></div>
  5. <div><img src="img/3.jpg" alt=""></div>
  6. <div><img src="img/4.jpg" alt=""></div>
  7. <div><img src="img/5.jpg" alt=""></div>
  8. </div>
  9. <ul class="sel_box"><!--选择按钮-->
  10. <li>1</li>
  11. <li>2</li>
  12. <li>3</li>
  13. <li>4</li>
  14. <li>5</li>
  15. </ul>
  16. <div class="left_btn btn"></div><!--左切换按钮-->
  17. <div class="right_btn btn"></div><!--右切换按钮-->
  18. </div>

读者可以自己编写一些样式实现效果,也可以从本教程附件的实例 《js原生代码实现简单的轮播图实例教程》源码 下载。

来完成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){

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

    });

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

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

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

  1. //选择按钮绑定事件
  2. eSelBox.addEventListener('click',function(event){
  3. //获取当前点击元素
  4. var eTarget = event.target;
  5. //判断点击的是li元素,且不是当前选择按钮
  6. if(eTarget.nodeName.toLowerCase() == 'li' && eTarget.className != 'cur'){
  7. //设置当前图片索引
  8. nIndex = eTarget.innerHTML-1
  9. fnSwitchImg();
  10. }
  11. });
  1. 点击左、右两个按钮也是可以切换图片的,分别添加事件,代码如下:

    eLeftBtn.onclick = function(){

    1. if(nIndex<=0){
    2. return; //如果当前是第一张图片,阻止后续代码执行
    3. }
    4. //往左切换图片
    5. nIndex --;
    6. fnSwitchImg();

    }
    eRightBtn.onclick = function(){

    1. if(nIndex>=aSelList.length-1){
    2. return; //如果当前是最后一张图片,阻止后续代码执行
    3. }
    4. //往右切换图片
    5. nIndex ++;
    6. fnSwitchImg();

    }

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

    //轮播图自动切换
    timer = setInterval(function(){

    1. //向右切换图片
    2. nIndex ++;
    3. //已切换到最后一张图片时,跳回第一张图片
    4. if(nIndex>=5){
    5. nIndex = 0;
    6. }
    7. fnSwitchImg();

    },3000);

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

    1. clearInterval(timer);

    }

    //鼠标移出轮播图开始自动切换
    eContainer.onmouseleave = function(){

    1. //轮播图自动切换
    2. timer = setInterval(function(){
    3. //向右切换图片
    4. nIndex ++;
    5. //已切换到最后一张图片时,跳回第一张图片
    6. if(nIndex>=5){
    7. nIndex = 0;
    8. }
    9. fnSwitchImg();
    10. },3000);

    }

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

发表评论

表情:
评论列表 (有 0 条评论,37人围观)

还没有评论,来说两句吧...

相关阅读

    相关 原生JS实现简单

    注意 我们用原生JS来做一个简单的无缝轮播图,首先需要准备几张**图片作为材料**,图片的链接需要自己设置,所以这边我的代码中图片链接的位置请大家自己添加图片。 ...

    相关 原生js实现

    原生js实现轮播图  很多网站上都有轮播图,但却很难找到一个系统讲解的,因此这里做一个简单的介绍,希望大家都能有所收获,如果有哪些不正确的地方,希望大家可以指出。  [