js原生实现简易轮播图效果,原理简单易懂

谁借莪1个温暖的怀抱¢ 2022-02-05 13:37 258阅读 0赞

原生js实现简易的轮播图

用最基础的方式实现想不到的效果,能完成一个轮播图,能让你的兴趣大增。对于初学者来说,学完JavaScript基础知识,就要运用综合知识,实现一些网页的基础效果。如果代码,或者解析哪里有问题的,欢迎大家纠正。

原理

将图片全部重叠在一起,并且给所有的图片设置隐藏,第一张图片设置显示。然后依靠点击事件,显示出相应的图片。这样一个简单的轮播图就完成了。
在这里插入图片描述

首先写出静态页面

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <title>Title</title>
  6. <link href="css/css.css" rel="stylesheet" type="text/css" />
  7. </head>
  8. <body>
  9. <div id="all" class="all">
  10. <div class="head">
  11. <ul id="dots">
  12. <a href="#"><li class="active">图片一</li></a>
  13. <a href="#"><li class="">图片二</li></a>
  14. <a href="#"><li class="">图片三</li></a>
  15. <a href="#"><li class="">图片四</li></a>
  16. </ul>
  17. </div>
  18. <div class="main" id="main">
  19. <div class="banner" id="banner">
  20. <a href="">
  21. <div class="banner-slide slide1 slide-active"></div>
  22. </a>
  23. <a href="">
  24. <div class="banner-slide slide2"></div>
  25. </a>
  26. <a href="">
  27. <div class="banner-slide slide3"></div>
  28. </a>
  29. <a href="">
  30. <div class="banner-slide slide4"></div>
  31. </a>
  32. </div>
  33. </div>
  34. </div>
  35. <script src="js/js.js">
  36. </script>
  37. </body>
  38. </html>

以及css样式

  1. * {
  2. margin:0;
  3. padding: 0;
  4. }
  5. ul {
  6. list-style: none;
  7. }
  8. body {
  9. font-family: Microsoft YaHei;
  10. }
  11. .all{
  12. height: 510px;
  13. }
  14. .head {
  15. width: 1200px;
  16. height: 50px;
  17. margin: 0 auto;
  18. }
  19. .head ul{
  20. float: left;
  21. }
  22. .head ul li{
  23. width: 300px;
  24. list-style: none;
  25. font-size: 20px;
  26. padding: 11px 0;
  27. color:#666;
  28. text-align: center;
  29. float: left;
  30. border-radius:5px;
  31. }
  32. li:hover{
  33. background-color: #FFCC00;
  34. }
  35. .active{
  36. background-color:#FFCC00;
  37. }
  38. .main {
  39. width: 1200px;
  40. height:460px;
  41. margin:0px auto;
  42. overflow: hidden;
  43. }
  44. .banner {
  45. width: 1200px;
  46. height: 460px;
  47. overflow: hidden;
  48. position: relative;
  49. }
  50. .banner-slide{
  51. width: 1200px;
  52. height: 460px;
  53. background-repeat: no-repeat;
  54. position: absolute;
  55. display: none;
  56. }
  57. .slide-active{
  58. display: block;
  59. }
  60. .slide1{
  61. background-image: url("../img/1.jpg");
  62. }
  63. .slide2{
  64. background-image: url("../img/3.jpg");
  65. }
  66. .slide3{
  67. background-image: url("../img/4.jpg");
  68. }
  69. .slide4{
  70. background-image: url("../img/5.jpg");
  71. }

重点js部分

  1. //封装一个函数,代替document.getElementById();
  2. function byId(id){
  3. return typeof id=="string"?document.getElementById(id):id;
  4. }
  5. //获取图片以及点击框对象的引用,全局变量
  6. var index=0,time,
  7. dots=byId("dots").getElementsByTagName("li"),
  8. pics=byId("banner").getElementsByTagName("div"),
  9. all=byId("all"),
  10. len=pics.length;
  11. //鼠标移动轮播图上触发onmouseover鼠标事件,此时会执行函数清除定时器,停止自动轮播。
  12. // 鼠标离开轮播图,定时器继续
  13. all.onmouseover=function(){
  14. if(time){
  15. clearInterval(time);
  16. }
  17. };
  18. //鼠标没有放在轮播图上,触发setInterval,每两秒自动执行一次换图
  19. all.onmouseout=function(){
  20. time=setInterval(function(){
  21. //循环图层,播放到最后一图,跳转到图一
  22. index++;
  23. if(index >= len){
  24. index = 0;
  25. }
  26. //index为图片的索引值,0为第一张图,1为第二张图
  27. changeImg();
  28. },2000);
  29. };
  30. //记得调用,否则图片不会自动执行轮播,需要手动点击点击框,触发轮播
  31. all.onmouseout();
  32. //遍历所有点击框,且绑定点击事件,点击点击框则会跳转到相应的图片
  33. for(var b=0;b<len;b++){
  34. dots[b].id=b;
  35. //给所有的a添加id属性
  36. dots[b].onclick=function(){
  37. //因为作用域的问题,若在里面提取b则无法获取到相应的图片,通过id属性
  38. //触发点击事件,则可获取到某个点几款,触发了点击款事件,最后调用changImg更换到相应的图片
  39. index=this.id;
  40. changeImg();
  41. }
  42. }
  43. function changeImg() {
  44. //遍历所有图片,以及点击框
  45. for (var i=0;i<len;i++){
  46. //所有的图片获得display:none都将隐藏
  47. pics[i].style.display="none";
  48. dots[i].className="";
  49. }
  50. //根据index索引找到当前的div,并将它显示出来
  51. pics[index].style.display="block";
  52. //根据index索引找到当前的li,点击框的背景色缩着轮播图的变化,变化到相应的点击框
  53. dots[index].className="active";
  54. }

总结:

实现这样一个简单的轮播图,其实不是很难。只要指导思路,多多练习并不是难事。首先创建一个div,限制其高度宽度灯。设置overflow:hidden,position:relative,将每个图片都放进这个div里面,并给他们position:absolute。这样他们就全部装进了div里面。接着添加切换的图片的点击框按钮,使其可以手动点击切换。接着通过对象的引用,以及javascript鼠标点击事件,遍历所有图片,并找到相应的索引,完成切图的效果。

好了到此为止,一个简单易懂的简易轮播图就完成了。适合才学习完JavaScript基础的同学食用,简单易懂。若要实现更复杂的效果,欢迎关注我的博客。

发表评论

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

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

相关阅读

    相关 js简单易懂

    首先完成HTML和CSS部分, 1. 划分区域 2. 让图片排成一排,可以利用浮动,也可以利用定位,在这里我用的是定位 3. 开始js部分:由于自己还在学习中,对Jav