博客列表 >JS自定义轮播图

JS自定义轮播图

零龙
零龙原创
2020年08月23日 06:55:36749浏览

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. }

示例图:

声明:本文内容转载自脚本之家,由网友自发贡献,版权归原作者所有,如您发现涉嫌抄袭侵权,请联系admin@php.cn 核实处理。
全部评论
文明上网理性发言,请遵守新闻评论服务协议