JavaScript代码实现简单的轮播图效果

亦凉 2022-06-07 01:54 281阅读 0赞

JavaScript中的轮播图在许多网站中能够经常看到,如淘宝京东首页等。轮播图还是比较简单的,只要理解动画原理以及定时器函数

setTimeout()和clearTimeout()

setInterval()和clearInterval()

这四个函数都是属于window对象的。Window是可以省略的。

使用格式:

SetTimeout(函数,时间);

SetInterval(函数,时间);

其中,时间是以毫秒作为单位,如果要写1s,需要写成1000.

函数,可以写在外面,传入函数名,也可以直接写在参数列表

如果需要清除定时器,需要使用clearTimeout,clearInterval。

在清除定时器的时候,需要获得定时器的引用。

好了,理解这些定时器后开始写轮播图了。

先来看看HTML代码部分:

  1. <div class="box">
  2. <div id="picth">
  3. <a href=""><img src="images/jd1.jpg" alt=""></a>
  4. <a href=""><img src="images/jd2.jpg" alt=""></a>
  5. <a href=""><img src="images/jd3.jpg" alt=""></a>
  6. <a href=""><img src="images/jd4.jpg" alt=""></a>
  7. <a href=""><img src="images/jd5.jpg" alt=""></a>
  8. <a href=""><img src="images/jd6.jpg" alt=""></a>
  9. </div>
  10. <div class="nav-bar">
  11. <ul>
  12. <li class="on">1</li>
  13. <li>2</li>
  14. <li>3</li>
  15. <li>4</li>
  16. <li>5</li>
  17. <li>6</li>
  18. </ul>
  19. </div>
  20. </div>

CSS代码部分:

  1. <style>
  2. *{margin: 0; padding: 0;}
  3. .box{
  4. width: 730px;
  5. height: 454px;
  6. position: relative;
  7. overflow: hidden;
  8. margin: 50px auto 0;
  9. }
  10. #picth{
  11. width: 4380px;
  12. height: 454px;
  13. position: absolute;
  14. left: 0;
  15. top: 0;
  16. }
  17. #picth a{
  18. float: left;
  19. }
  20. .nav-bar{
  21. position: absolute;
  22. bottom: 10px;
  23. width: 130px;
  24. left: 300px;
  25. }
  26. ul{list-style: none;}
  27. .nav-bar li{
  28. height: 12px;
  29. line-height: 12px;
  30. width: 12px;
  31. float: left;
  32. margin: 0 4px;
  33. background: #333;
  34. color: #FFFFFF;
  35. text-align: center;
  36. }
  37. .nav-bar .on{background: #c00;}
  38. </style>

css代码中我并没有使用百分比的宽度。图片的大小为730*454

这里有两点需要注意:1、整个盒子.box,图片,图片picth对应的数字.nav-bar都要写定位。

2、图片有多少张,则图片中的div宽度就730宽度*图片的数量。高度不变。

JavaScript代码如下:

  1. <script>
  2. //图片切换,先获取所有的图片
  3. var picth = document.getElementById("picth");
  4. var li = document.getElementsByTagName("li");
  5. var t = null;//定义一个定时器
  6. var init = 0;//默认为第一张图片
  7. //时间函数
  8. function chang (){
  9. t = setInterval( function(){
  10. init ++ ;
  11. if( init >=6){
  12. init = 0;
  13. }
  14. picth.style.left = init *-730 + "px"; //做左移动
  15. //导航数字切换
  16. for ( var i = 0, len = li.length; i < len; i++){
  17. li[i].className = "";
  18. }
  19. li[init].className = "on";
  20. },2000);
  21. }
  22. chang();//开始动画
  23. //鼠标移到图片停止动画
  24. picth.onmouseover = function(){
  25. clearInterval(t);
  26. }
  27. picth.onmouseout = function(){
  28. //封装一个函数,调用
  29. chang();
  30. }
  31. //导航数字的移动方向与图片一致
  32. //数字循环
  33. for ( var j = 0, len = li.length; j < len; j ++){
  34. li[j].index = j;//给个点击的值
  35. //注册事件
  36. li[j].onmouseover = function(){
  37. clearInterval(t);
  38. init = this.index;//图片的位置属性和所单击的数字一致
  39. picth.style.left = init *-730 + "px";
  40. for ( var i = 0, len = li.length ; i < len; i++){
  41. li[i].className = "";
  42. }
  43. //当前的li,加上on
  44. li[init].className = "on";
  45. }
  46. }
  47. </script>

整段代码如下:

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <meta name="viewport" content="width=device-width, initial-scale=1.0">
  6. <meta http-equiv="X-UA-Compatible" content="ie=edge">
  7. <title>Document</title>
  8. <style>
  9. *{margin: 0; padding: 0;}
  10. .box{
  11. width: 730px;
  12. height: 454px;
  13. position: relative;
  14. overflow: hidden;
  15. margin: 50px auto 0;
  16. }
  17. #picth{
  18. width: 4380px;
  19. height: 454px;
  20. position: absolute;
  21. left: 0;
  22. top: 0;
  23. }
  24. #picth a{
  25. float: left;
  26. }
  27. .nav-bar{
  28. position: absolute;
  29. bottom: 10px;
  30. width: 130px;
  31. left: 300px;
  32. }
  33. ul{list-style: none;}
  34. .nav-bar li{
  35. height: 12px;
  36. line-height: 12px;
  37. width: 12px;
  38. float: left;
  39. margin: 0 4px;
  40. background: #333;
  41. color: #FFFFFF;
  42. text-align: center;
  43. }
  44. .nav-bar .on{background: #c00;}
  45. </style>
  46. </head>
  47. <body>
  48. <div class="box">
  49. <div id="picth">
  50. <a href=""><img src="images/jd1.jpg" alt=""></a>
  51. <a href=""><img src="images/jd2.jpg" alt=""></a>
  52. <a href=""><img src="images/jd3.jpg" alt=""></a>
  53. <a href=""><img src="images/jd4.jpg" alt=""></a>
  54. <a href=""><img src="images/jd5.jpg" alt=""></a>
  55. <a href=""><img src="images/jd6.jpg" alt=""></a>
  56. </div>
  57. <div class="nav-bar">
  58. <ul>
  59. <li class="on">1</li>
  60. <li>2</li>
  61. <li>3</li>
  62. <li>4</li>
  63. <li>5</li>
  64. <li>6</li>
  65. </ul>
  66. </div>
  67. </div>
  68. <script>
  69. //图片切换,先获取所有的图片
  70. var picth = document.getElementById("picth");
  71. var li = document.getElementsByTagName("li");
  72. var t = null;//定义一个定时器
  73. var init = 0;//默认为第一张图片
  74. //时间函数
  75. function chang (){
  76. t = setInterval( function(){
  77. init ++ ;
  78. if( init >=6){
  79. init = 0;
  80. }
  81. picth.style.left = init *-730 + "px"; //做左移动
  82. //导航数字切换
  83. for ( var i = 0, len = li.length; i < len; i++){
  84. li[i].className = "";
  85. }
  86. li[init].className = "on";
  87. },2000);
  88. }
  89. chang();//开始动画
  90. //鼠标移到图片停止动画
  91. picth.onmouseover = function(){
  92. clearInterval(t);
  93. }
  94. picth.onmouseout = function(){
  95. //封装一个函数,调用
  96. chang();
  97. }
  98. //导航数字的移动方向与图片一致
  99. //数字循环
  100. for ( var j = 0, len = li.length; j < len; j ++){
  101. li[j].index = j;//给个点击的值
  102. //注册事件
  103. li[j].onmouseover = function(){
  104. clearInterval(t);
  105. init = this.index;//图片的位置属性和所单击的数字一致
  106. picth.style.left = init *-730 + "px";
  107. for ( var i = 0, len = li.length ; i < len; i++){
  108. li[i].className = "";
  109. }
  110. //当前的li,加上on
  111. li[init].className = "on";
  112. }
  113. }
  114. </script>
  115. </body>
  116. </html>

好了,简单的轮播效果就完成了,赶紧去试试吧。

发表评论

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

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

相关阅读