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

本实例效果如下图所示:

根据实例效果,需要的元素有图片、中间圆点按钮、左右箭头按钮等。实际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';//删除所有选择按钮上的classNamefor(let i=0;i<aSelList.length;i++){aSelList[i].className = '';}//修改当前选择按钮的className,设为当前选择按钮eTarget.className = 'cur';}});

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

  //轮播图切换function fnSwitchImg(){//修改轮播图容器位置,用于切换图片eImgBox.style.left = -nIndex * nContainerW + 'px';//删除所有选择按钮上的classNamefor(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-1fnSwitchImg();}});

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样式属性。

原生js实现轮播图实例教程相关推荐

  1. 使用原生js将轮播图组件化

    代码地址如下: http://www.demodashi.com/demo/11316.html   这是一个轮播图组件,这里是代码地址,需要传入容器的id和图片地址,支持Internet Explo ...

  2. 原生JS无缝轮播图(左右切换、导航跟随)

    原生JS无缝轮播图(左右切换.导航图标) 功能: 1.实现轮播图的左右无缝切换 2.实现导航图标的跟随显示.点击切换 3.使用定时器进行无缝轮播 css部分 <style>/* 轮播图容器 ...

  3. 原生js实现轮播图——小肉包

    使用原生js实现轮播图--小肉包 今天分享一个使用原生JS实现轮播图的案例,并且配上比较详细的过程讲解,欢迎小伙伴的浏览和批评指正.静态效果图如下: 核心思想 将一些图片在一行中平铺,然后计算偏移量再 ...

  4. 史上最简单的原生JS实现轮播图效果

    原生JS实现轮播图效果 上篇文章我们说到了怎样利用原生JS实现Tab切换的效果,现在我们来说一下Tab切换的"升级版".如何利用原生JS实现轮播图效果.如图: HTML代码: &l ...

  5. 原生js横幅广告轮播图

    手把手原生js简单轮播图 原生js实现图片轮播效果 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" ...

  6. animate用法 js原生_animate动画、原生JS实现轮播图

    写在前面 最近在写项目的时候,才发现自己对css3这部分的内容已经生疏了,复习css3的时候,看到animate属性,就用其写了个焦点轮播图,当然自己也用原生JS码了个,当然css3动画无疑是锦上添花 ...

  7. js轮播图片小圆点变化_原生js实现轮播图(两种方法)

    第一种: 这个是之前写的,比较草率,没有注释,如果这个看不懂就去看第二个,比较仔细,主要是了解他,后面都会有一些插件来使用,很方便,只要几行代码就可写出各种各样的代码,所以,不懂的话,不要太在意, 第 ...

  8. 原生JS实现轮播图 方法总结

    方法总结: 方法一: 利用绝对定位absolute偏移量的改变来实现 具有往左往右滑动的效果 演示代码: 位移滑动轮播图1 方法二: 利用 display/opacity/visibility状态切换 ...

  9. 原生JS实现轮播图插件

    HTML部分只提供存放轮播图的容器,img标签等全部由js操作dom元素动态生成,样式部分也由js 完成 html代码部分 <!-- 创建存放轮播图片的容器 --><div id=& ...

最新文章

  1. 阿里规范不建议多表join,可这SQL要怎么写啊?
  2. VS Code为什么能这么牛?
  3. python【蓝桥杯vip练习题库】ADV-97十进制数转八进制数
  4. 配置文件加载位置||外部配置加载顺序||自动配置原理
  5. c语言中读取内存的文件,c++从内存中读取文件内容,内容写到内存 实现文件的内存共享代码实例...
  6. 软件稳定性测试的测试点
  7. ubuntu8.0中文输入法
  8. Golang——结构体创建与初始化、结构体与数组、结构体与切片、结构体与map、结构体作为函数参数、结构体方法、结构体方法继承
  9. HCIE Security 全套笔记整理
  10. 2. Browser 对象 - Window 对象(2)
  11. 计算机毕业设计网吧管理,毕业设计50河北大学计算机毕业设计网吧管理系统.doc...
  12. 360浏览器Linux版内核,360浏览器推出Linux版下载,主要特性解说
  13. 360度评估中的问题示范:如何提问
  14. Elasticsearch:使用 Filebeat 从 Node.js Web 应用程序提取日志
  15. Cloud 80% 客制化键盘分享,模块拼色设计
  16. 搭建LNMP平台加NFS文件共享部署wordpress博客
  17. JAVA——制作java程序说明书、解决DOS下中文编码问题 GBK
  18. oracle 的SGA与PGA分析
  19. easyAR的使用教程
  20. 【软件测试】三种方法让你快速优化回归测试

热门文章

  1. Hadoop2.2.0集群在RHEL6.2下的安装实战
  2. TfidfVectorizer(stop_words='english',ngram_range=(1,1))中ngram_range的意义
  3. 机器学习第8天:IPyhon与Jupyter notebook
  4. 【LInux】16_软件管理源码包管理
  5. 【Linux】5_进程管理
  6. Hadoop历代版本及其特点
  7. Ubuntu基础知识
  8. spring mvc给参数起别名
  9. Ambiguous mapping found. Cannot map 'xxxxController' bean method
  10. Java对存储过程的调用方法 --转载