Blogger Information
Blog 6
fans 0
comment 0
visits 4960
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
JavaScript toDoList,延迟加载,幻灯片
萨龙龙
Original
678 people have browsed it

简介

原生 JavaScript 代码实现 toDoList、延迟加载、幻灯片,课堂上的四个按钮,选项卡的功能感觉包括在幻灯片中,而幻灯片的逻辑相对复杂,用惯了框架调用,写 JS 代码有点吃力。

作业本来昨天下午就要提交,一直卡在幻灯片的自动播放上,不是很正常。

toDoList 功能代码演示

1、todolist.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. <link href="assets/images/logo.png" rel="shortcut icon" />
  7. <link rel="stylesheet" href="assets/css/style.css">
  8. <title>toDoList 实例</title>
  9. </head>
  10. <body>
  11. <div class="container">
  12. <h3>去旅行吧</h3>
  13. <div class="input">
  14. <label for="travel">目的地:</label>
  15. <input type="text" name="travel" id="travel" autofocus placeholder="输入目的地,按钮回车提交">
  16. </div>
  17. <ul class="travel-list">
  18. <li><span>西藏——拉萨</span><button onclick="delLi(this)"></button></li>
  19. <li><span>云南——大理</span><button onclick="delLi(this)"></button></li>
  20. </ul>
  21. <button class="button" onclick="letsGo()">Let's go</button>
  22. <div id="status"></div>
  23. </div>
  24. <script src="assets/js/todolist-min.js"></script>
  25. </body>
  26. </html>

2、todolist.js 代码

  1. /**
  2. * toDoList
  3. */
  4. // 定义控制台
  5. var cl = console.log.bind(console);
  6. // 获取输入框元素
  7. var input = document.querySelector("input");
  8. // 获取列表元素
  9. var ul = document.querySelector(".travel-list");
  10. // 提示
  11. var statusEle = document.getElementById("status");
  12. // 事件
  13. input.addEventListener(
  14. "keyup",
  15. function (ev) {
  16. // 检测键盘是不是按了回车
  17. if (ev.key === "Enter") {
  18. /**
  19. * 输入框为空提示
  20. */
  21. var lis = ul.querySelectorAll("li");
  22. //设置最多5个目的地
  23. // 为空
  24. if (input.value.length === 0) {
  25. statusEle.innerHTML = "请输入内容!";
  26. } else if (lis.length >= 5) {
  27. statusEle.innerHTML = "最多5个目的地,不要太贪玩了,哈哈";
  28. }
  29. if (input.value.length === 0 || lis.length >= 5) {
  30. statusEle.className = "active warning";
  31. /* 显示提交内容 */
  32. statusEle.style.display = "block";
  33. /* 2秒后隐藏提示 */
  34. setTimeout(() => {
  35. statusEle.style.display = "none";
  36. }, 2000);
  37. return false;
  38. }
  39. /**
  40. * 向列表中增加内容
  41. */
  42. // 创建 li
  43. var li = document.createElement("li");
  44. // 添加内容到 li 中
  45. li.innerHTML =
  46. "<span>" +
  47. input.value +
  48. "</span>" +
  49. '<button onclick="delLi(this)"></button>';
  50. // 将 li 添加到列表中
  51. if (ul.childNodes === 0) ul.appendChild("li");
  52. else ul.insertBefore(li, ul.firstElementChild);
  53. // 清空 input 内容
  54. input.value = null;
  55. }
  56. },
  57. false
  58. );
  59. // 删除
  60. function delLi(ele) {
  61. // cl(ele.parentNode);
  62. return confirm("确定删除当前目的地?") ? ele.parentNode.remove() : false;
  63. }
  64. // 提交按钮
  65. function letsGo() {
  66. var lis = ul.querySelectorAll("li");
  67. if (lis.length === 0) {
  68. statusEle.innerHTML = "请输入旅行目的地!";
  69. statusEle.className = "active warning";
  70. } else {
  71. statusEle.innerHTML = "好吧,你一个人去吧,我得继续做作业,哈哈";
  72. statusEle.className = "active success";
  73. }
  74. /* 显示提交内容 */
  75. statusEle.style.display = "block";
  76. /* 3秒后隐藏提示 */
  77. setTimeout(() => {
  78. statusEle.style.display = "none";
  79. }, 3000);
  80. }

3、toDoList 演示地址

演示地址

图片延迟加载功能代码演示

1、lazyload.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. <link href="assets/images/logo.png" rel="shortcut icon" />
  7. <link rel="stylesheet" href="assets/css/style.css">
  8. <title>图片延迟加载实例</title>
  9. </head>
  10. <body>
  11. <div class="container">
  12. <h3>图片延迟加载</h3>
  13. <div class="img-list">
  14. <img src="默认图片地址" alt="图片延迟加载" data-src="真实图片地址">
  15. 100张图片略过……
  16. </div>
  17. </div>
  18. <script src="assets/js/lazyload-min.js"></script>
  19. </body>
  20. </html>

2、lazyload.js 代码

  1. var cl = console.log.bind(console);
  2. // 获取图片元素
  3. var imgs = document.querySelectorAll('.img-list img');
  4. // 获取文档可视区域高度
  5. var clientHeight = document.documentElement.clientHeight;
  6. // 增加浏览器滚动监听事件
  7. window.addEventListener("scroll", function() {
  8. lazyload(imgs, clientHeight);
  9. }, false);
  10. /*延迟加载函数 */
  11. function lazyload(imgs, clientHeight) {
  12. /*获取内容区域滚动离顶部的大小*/
  13. var scrollTop = document.documentElement.scrollTop;
  14. /*遍历图片,判断图片是否进入的可视区域*/
  15. imgs.forEach(function(img) {
  16. if (img.offsetTop <= clientHeight + scrollTop) {
  17. img.src = img.dataset.src;
  18. img.style.top = "0";
  19. }
  20. });
  21. }

3、图片延迟加载演示地址

演示地址

幻灯片功能代码演示

1、slide.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. <link href="assets/images/logo.png" rel="shortcut icon" />
  7. <link rel="stylesheet" href="assets/css/style.css">
  8. <title>幻灯片实例</title>
  9. </head>
  10. <body>
  11. <div class="container">
  12. <h3>幻灯片实例</h3>
  13. <div class="slides">
  14. <!-- 幻灯片图片列表 -->
  15. <div class="slide-list">
  16. <img src="https://demo.salongweb.com/slearn/slider/01.jpg" class="slider active" data-index="1"
  17. alt="幻灯片">
  18. <img src="https://demo.salongweb.com/slearn/slider/02.jpg" class="slider" data-index="2" alt="幻灯片">
  19. <img src="https://demo.salongweb.com/slearn/slider/03.jpg" class="slider" data-index="3" alt="幻灯片">
  20. <img src="https://demo.salongweb.com/slearn/slider/04.jpg" class="slider" data-index="4" alt="幻灯片">
  21. </div>
  22. <!-- 导航点 -->
  23. <div class="slide-dots"></div>
  24. <!-- 上下按钮 -->
  25. <button class="slide-button slide-prev"><</button>
  26. <button class="slide-button slide-next">></button>
  27. </div>
  28. </div>
  29. <script src="assets/js/slide-min.js"></script>
  30. </body>
  31. </html>

2、slide.js 代码

  1. var cl = console.log.bind(console);
  2. // 获取所有图片
  3. var imgs = document.querySelectorAll(".slide-list img");
  4. /*获取导航点元素*/
  5. var dotsList = document.querySelector(".slide-dots");
  6. /*获取按钮*/
  7. var buttons = document.querySelectorAll(".slide-button");
  8. /*生成导航点*/
  9. imgs.forEach(function (img, index) {
  10. /*创建点元素*/
  11. var span = document.createElement("span");
  12. /*添加 class*/
  13. span.classList.add("point");
  14. /*如果是第一个增加 active*/
  15. if (index === 0) span.classList.add("active");
  16. /*将图片上的 index 值添加到点元素上*/
  17. span.dataset.index = img.dataset.index;
  18. /*添加点元素到导航元素中*/
  19. dotsList.appendChild(span);
  20. }, false);
  21. /*获取所有导航点,为之后的当前状态做准备*/
  22. var pointAll = dotsList.querySelectorAll("span");
  23. /*监听点击导航点*/
  24. dotsList.addEventListener(
  25. "click",
  26. function (ev) {
  27. /*点的 index 值*/
  28. var pointIndex = ev.target.dataset.index;
  29. /*遍历图片,添加 active*/
  30. imgs.forEach(function (img, index) {
  31. /*增加和当前点元素对应的图片 active*/
  32. if (img.dataset.index === pointIndex) {
  33. /*遍历图片,删除已有的 active*/
  34. imgs.forEach(function (img) {
  35. img.classList.remove("active");
  36. });
  37. /*增加 active*/
  38. img.classList.add("active");
  39. /*导航点元素的增加和删除 active*/
  40. dotsActive(img.dataset.index);
  41. }
  42. }, false);
  43. },
  44. false
  45. );
  46. /*导航点的增加或删除 active*/
  47. function dotsActive(imgIndex) {
  48. /*先删除 active*/
  49. pointAll.forEach(function (point) {
  50. point.classList.remove("active");
  51. }, false);
  52. /*再增加与图片对应点的 active*/
  53. pointAll.forEach(function (point) {
  54. if (point.dataset.index === imgIndex) {
  55. point.classList.add("active");
  56. }
  57. }, false);
  58. }
  59. /* 当前图片 */
  60. function slideCurrentImg() {
  61. var currentImg = null;
  62. /*找到正在显示的图片*/
  63. imgs.forEach(function (img) {
  64. if (img.classList.contains("active")) currentImg = img;
  65. }, false);
  66. return currentImg;
  67. }
  68. /*为按钮添加点击事件*/
  69. buttons.item(0).addEventListener("click", buttonClick, false);
  70. buttons.item(1).addEventListener("click", buttonClick, false);
  71. /*按钮点击事件*/
  72. function buttonClick(ev) {
  73. /*找到正在显示的图片*/
  74. var currentImg = slideCurrentImg();
  75. /*点击上一个*/
  76. if (ev.target.classList.contains("slide-prev")) {
  77. singleButton(
  78. currentImg,
  79. imgs[imgs.length - 1],
  80. currentImg.previousElementSibling
  81. );
  82. }
  83. /*点击下一个*/
  84. if (ev.target.classList.contains("slide-next")) {
  85. singleButton(currentImg, imgs[0], currentImg.nextElementSibling);
  86. }
  87. /* 点击左右按钮,清除定时器 */
  88. clearTimer();
  89. }
  90. /*单个按钮事件函数*/
  91. function singleButton(currentImg, index, ele) {
  92. /*删除当前图片的 active*/
  93. currentImg.classList.remove("active");
  94. /*获取上一节点*/
  95. currentImg = ele;
  96. /*如果没有上一节点,则为获取最后的节点并增加 active*/
  97. if (currentImg === null) {
  98. currentImg = index;
  99. }
  100. currentImg.classList.add("active");
  101. /*导航点元素的增加和删除 active*/
  102. dotsActive(currentImg.dataset.index);
  103. }
  104. /**
  105. * 为图片增加自动播放,暂停
  106. */
  107. var slides = document.querySelector(".slides");
  108. var timer = null;
  109. // 1. 当鼠标移出轮播图区域时, 启动定时器,每2秒自动切换图片
  110. slides.addEventListener("mouseout", startTimer, false);
  111. // 2. 当鼠标移入轮播图区域时,清除定时器,由用户点击操作
  112. slides.addEventListener("mouseover", clearTimer, false);
  113. // 启动定时器
  114. function startTimer() {
  115. var click = new Event("click");
  116. setInterval(function () {
  117. buttons.item(1).dispatchEvent(click);
  118. }, 2000);
  119. }
  120. // 清除定时器
  121. function clearTimer() {
  122. clearInterval(timer);
  123. }

3、幻灯片演示地址

演示地址

总结

代码需多写,方能见本领。虽然能听懂老师讲的是什么,但是自己操作时还是遇到很多问题,这些问题也将成为经验吧。

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