zoukankan      html  css  js  c++  java
  • 前端基础功能,原生js实现轮播图实例教程

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

  • 相关阅读:
    创造别人想要的东西(2)----创业15问
    创造别人想要的东西(1)----创业的本质
    有点迷茫
    普林斯顿大学算法公开课(1)----介绍
    工业控制系统信息安全与信息安全、功能安全的区别【转自工控工程网】
    十条概念区分信息安全与隐私保护【转自安全牛】
    NBT(NetBIOS Over TCP)名称解析概述
    SMB协议概述
    PCI DSS合规建设ASV扫描介绍
    信息安全等级测评师(初级 技术)
  • 原文地址:https://www.cnblogs.com/jiangweiping/p/14310387.html
Copyright © 2011-2022 走看看