Blogger Information
Blog 56
fans 1
comment 0
visits 62180
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
JS自定义轮播图
零龙
Original
759 people have browsed it

JS 自动轮播图
用视图文件index.html. JS处理文件slider.js及图片文件

  • index.html
  • slider.js
  • slider.css
  • 轮播图文件

示例 index.html

  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. <title>js轮播图</title>
  7. <link rel="stylesheet" href="static/css/slider.css">
  8. </head>
  9. <body>
  10. <div class="box">
  11. <img
  12. src="static/images/1.jpg"
  13. alt=""
  14. data-index="1"
  15. class="slider active"
  16. />
  17. <img src="static/images/2.jpg" alt="" data-index="2" class="slider" />
  18. <img src="static/images/3.jpg" alt="" data-index="3" class="slider" />
  19. <img src="static/images/4.jpg" alt="" data-index="4" class="slider" />
  20. <img src="static/images/5.jpg" alt="" data-index="5" class="slider" />
  21. <div class="point-list">
  22. <!-- <span class="point active" data-index="1"></span>
  23. <span class="point" data-index="2"></span>
  24. <span class="point" data-index="3"></span>
  25. <span class="point" data-index="4"></span>
  26. <span class="point" data-index="5"></span> -->
  27. </div>
  28. <span class="skip prev">&lt;</span>
  29. <span class="skip next">&gt;</span>
  30. </div>
  31. <script src="static/js/slider.js"> </script>
  32. <script>
  33. star(); //调用自动轮播图
  34. </script>
  35. </body>
  36. </html>
  • slider.js 处理文件

源码:

  1. //获取轮播图所有图片
  2. var imgs = document.querySelectorAll("img");
  3. //获取小圆点组
  4. var pointList = document.querySelector(".point-list");
  5. //动态生成小圆点
  6. //圆点的数量和图片的数量是一样多
  7. imgs.forEach(function (img, index) {
  8. //遍历图片数量生成圆通数量
  9. var span = document.createElement("span");
  10. //创建一个span
  11. if (index == 0) {
  12. //判断是否第一个圆点
  13. span.classList.add("point", "active");
  14. //生成圆点第一个的样式
  15. }
  16. span.classList.add("point"); //圆点的样式
  17. span.dataset.index = img.dataset.index; //圆点自定义的data-index等于图片的
  18. pointList.appendChild(span); //写入到文档
  19. });
  20. //获取到所有的小圆点
  21. var points = document.querySelectorAll(".point");
  22. //点击小圆点添加事件
  23. pointList.addEventListener("click", function (ev) {
  24. imgs.forEach(function (img) {
  25. //遍历图片
  26. if (img.dataset.index === ev.target.dataset.index) {
  27. //如果点击的图片的index是否等于小圆点的index
  28. imgs.forEach(function (img) {
  29. img.classList.remove("active");
  30. //变量清除其他图片的显示
  31. });
  32. //图片的显示样式
  33. img.classList.add("active");
  34. //设置与当前图片对应的小圆点高亮显示
  35. // 因为这个功能要多处使用,这里将它声明为公共函数
  36. setPointActive(img.dataset.index);
  37. //传图片的index
  38. }
  39. });
  40. });
  41. //自定义小圆点显示样式函数
  42. function setPointActive(imgIndex) {
  43. //变量小圆点
  44. points.forEach(function (point) {
  45. point.classList.remove("active");
  46. // 清除小圆点样式
  47. });
  48. points.forEach(function (point) {
  49. if (point.dataset.index === imgIndex) {
  50. point.classList.add("active");
  51. }
  52. //设置被点击小圆点的显示样式
  53. });
  54. }
  55. // -------------------------------------翻页------------------------------
  56. //获取翻页按钮
  57. var skip = document.querySelectorAll(".skip");
  58. //添加事件
  59. skip.item(0).addEventListener("click", skipImg, false);
  60. skip.item(1).addEventListener("click", skipImg, false);
  61. // 翻页显示图片的回调方法
  62. function skipImg(ev) {
  63. //获取当前的图片
  64. var currentImg = "";
  65. imgs.forEach(function (img) {
  66. if (img.classList.contains("active")) {
  67. currentImg = img;
  68. }
  69. });
  70. if (ev.target.classList.contains("prev")) {
  71. currentImg.classList.remove("active");
  72. //为了显示出前一张,必须将当前图片的激活去掉
  73. // 将当前图片的前一张图片设置为当前图片
  74. currentImg = currentImg.previousElementSibling;
  75. if (currentImg !== null && currentImg.nodeName == "IMG") {
  76. currentImg.classList.add("active");
  77. } else {
  78. currentImg = imgs[imgs.length - 1];
  79. currentImg.classList.add("active");
  80. }
  81. }
  82. if (ev.target.classList.contains("next")) {
  83. currentImg.classList.remove("active");
  84. //为了显示出前一张,必须将当前图片的激活去掉
  85. // 将当前图片的前一张图片设置为当前图片
  86. currentImg = currentImg.nextElementSibling;
  87. if (currentImg !== null && currentImg.nodeName == "IMG") {
  88. currentImg.classList.add("active");
  89. } else {
  90. currentImg = imgs[0];
  91. currentImg.classList.add("active");
  92. }
  93. }
  94. setPointActive(currentImg.dataset.index);
  95. }
  96. var box = document.querySelector(".box");
  97. var timer = null;
  98. box.addEventListener(
  99. "mouseout",
  100. function () {
  101. star();
  102. },
  103. false
  104. );
  105. function star() {
  106. // 创建一个事件模拟器
  107. var clickEvent = new Event("click");
  108. timer = setInterval(function () {
  109. skip.item(1).dispatchEvent(clickEvent);
  110. //触发模拟事件(自动翻页)
  111. }, 2000);
  112. }
  113. box.addEventListener(
  114. "mouseover",
  115. function () {
  116. clearInterval(timer);
  117. // clearInterval() 来停止执行自动模拟自动触发的事件
  118. },
  119. false
  120. );

示例图 :


懒加载

源码示例:

  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. <title>懒加载实现</title>
  7. <link rel="stylesheet" href="static/css/base.css">
  8. </head>
  9. <body>
  10. <div class="container">
  11. <img src="static/images/temp.png" data-src="static/images/1.png">
  12. <img src="static/images/temp.png" data-src="static/images/2.png">
  13. <img src="static/images/temp.png" data-src="static/images/3.png">
  14. <img src="static/images/temp.png" data-src="static/images/4.png">
  15. <img src="static/images/temp.png" data-src="static/images/5.png">
  16. <img src="static/images/temp.png" data-src="static/images/6.png">
  17. </div>
  18. <script>
  19. // 1.获取所有图片
  20. var imgs = document.querySelectorAll(".container img");
  21. // 2.获取文档可视的高度
  22. var clientHeight = document.documentElement.clientHeight;
  23. // 3.监听滚动事件
  24. window.addEventListener(
  25. "scroll",
  26. function(){
  27. lazyload(imgs,clientHeight);
  28. },false);
  29. // 4.懒加载函数
  30. function lazyload(imgs,clientHeight)
  31. {
  32. //获取文档到顶部的距离
  33. var scrollTop =document.documentElement.scrollTop;
  34. //遍历图片,判断是否进入到可视区
  35. imgs.forEach(function(img){
  36. if(img.offsetTop <= clientHeight + scrollTop)
  37. {
  38. // 图片到顶部的距离是否小于或者等于文档可是的高度+滚动的高度
  39. // 等于或者小于图片可视的高度和滚动的高度,图片就加载
  40. img.src = img.dataset.src;
  41. img.classList = "icon";
  42. console.log(img.classList);
  43. }
  44. });
  45. }
  46. </script>
  47. </body>
  48. </html>

选项卡

  • index.html
  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. <title>经典选项卡案例</title>
  7. </head>
  8. <style>
  9. @import url(static/css/tabs.css);
  10. </style>
  11. <body>
  12. <div class="tabs">
  13. <ul class="tab">
  14. <li class= "active" data-index="1">水果</li>
  15. <li data-index="2">手机</li>
  16. <li data-index="3">汽车</li>
  17. </ul>
  18. <ul class="item active" data-index=1>
  19. <li><a href="">西瓜</a></li>
  20. <li><a href="">苹果</a></li>
  21. <li><a href="">橙子</a></li>
  22. </ul>
  23. <ul class="item" data-index=2>
  24. <li><a href="">小米</a></li>
  25. <li><a href="">华为</a></li>
  26. <li><a href="">OPPO</a></li>
  27. </ul>
  28. <ul class="item" data-index=3>
  29. <li><a href="">长城</a></li>
  30. <li><a href="">五菱</a></li>
  31. <li><a href="">荣威</a></li>
  32. </ul>
  33. </div>
  34. <script type="text/javascript" src="static/js/tabs.js"></script>
  35. </body>
  36. </html>
  • JS 源码
  1. // 1.获取导航
  2. var tab = document.querySelector(".tab");
  3. // console.log(tab);
  4. // 2.获取详情页
  5. var items = document.querySelectorAll(".item");
  6. // console.log(items);
  7. // 3.给导航添加点击事件(事件代理/事件委托/冒泡)
  8. tab.addEventListener('click',show,false);
  9. tab.addEventListener('mouseover',show,false);
  10. // 4.声明show()函数
  11. function show(ev)
  12. {
  13. // ev.log(ev.type):事件类型,如click,mouseover
  14. // ev.target 事件的触发者
  15. // console.log(ev.type); 事件类型
  16. // console.log(ev.target); 事件触发者
  17. // console.log(ev.currentTarget); 绑定事件者
  18. //1.清除除当前高亮选项卡之外的选项卡的高亮样式
  19. ev.currentTarget.childNodes.forEach(function (item) {
  20. if (item.nodeType === 1) item.classList.remove("active");
  21. });
  22. // 2.应该将用户点击的当前选择框高亮显示
  23. ev.target.classList.add("active");
  24. // 3清空原有列表
  25. items.forEach(function(item){
  26. item.classList.remove("active");
  27. });
  28. // 4.将选择框对应的内容进行切换(根据导航和详情中的data-index)
  29. items.forEach(function(item){
  30. if(ev.target.dataset.index===item.dataset.index)
  31. {
  32. item.classList.add("active");
  33. }
  34. });
  35. }

示例图:

Correcting teacher:天蓬老师天蓬老师

Correction status:qualified

Teacher's comments:轮播图, 选项卡, 这些代码推荐全部背下来, 想用的时候,直接默写出来
Statement of this Website
The copyright of this blog article belongs to the blogger. Please specify the address when reprinting! If there is any infringement or violation of the law, please contact admin@php.cn Report processing!
All comments Speak rationally on civilized internet, please comply with News Comment Service Agreement
0 comments
Author's latest blog post