博客列表 >JS项目实践:Todolist留言与删除、轮播图

JS项目实践:Todolist留言与删除、轮播图

赵大叔
赵大叔原创
2020年05月27日 16:38:56642浏览

留言与删除

代码:

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <title>Todolist案例-留言与删除</title>
  6. <style>
  7. ul {display: flex; flex-direction: column;}
  8. li button {margin-left: 10px;}
  9. </style>
  10. </head>
  11. <body>
  12. 请留言:<input type="text" name="content">
  13. <ol></ol>
  14. </body>
  15. <script>
  16. // 获取表单
  17. var inpt = document.querySelector("input");
  18. // 留言区
  19. var ol = document.querySelector("ol");
  20. inpt.addEventListener("keyup", function (ev) {
  21. // console.log(ev.key);
  22. if (ev.key === "Enter") {
  23. // 1、检查内容是否为空
  24. if(inpt.value.length === 0){
  25. alert("留言内容不能为空");
  26. }else {
  27. // 1、创建元素
  28. var li = document.createElement("li");
  29. // 2、填充内容
  30. li.innerHTML = inpt.value + '<button onclick="del(this)">删除</button>';
  31. // ol.appendChild(li):挂载内容到父节点下
  32. // 3、将最新留言始终显示在第一个:如果没有留言-->ol子元素数量为0
  33. if (ol.childElementCount === 0) ol.appendChild(li);
  34. // insertBefore:将某个节点添加到另一个节点前面
  35. else ol.insertBefore(li, ol.firstElementChild);
  36. // 4、清空留言区
  37. inpt.value = null;
  38. }
  39. }
  40. },false);
  41. // 删除评论的函数
  42. function del(ele) {
  43. return confirm('是否删除?') ? ol.removeChild(ele.parentElement) : false;
  44. }
  45. </script>
  46. </html>

演示效果图:

轮播图

代码:

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <title>轮播图</title>
  6. <style>
  7. ul,
  8. li {
  9. margin: 0;
  10. padding: 0;
  11. list-style: none;
  12. }
  13. .box {
  14. /*定位父级*/
  15. position: relative;
  16. width: 1000px;
  17. height: 350px;
  18. margin: 0 auto;
  19. }
  20. .box .slider {
  21. width: 1000px;
  22. height: 350px;
  23. display: none;
  24. }
  25. .box .slider.active {
  26. display: block;
  27. }
  28. .box .point-list {
  29. position: absolute;
  30. /*绝对定位的环境下的水平居中方式*/
  31. left: 50%;
  32. margin-left: -38px;
  33. top: 310px;
  34. }
  35. .box .point-list .point {
  36. display: inline-block;
  37. width: 12px;
  38. height: 12px;
  39. margin: 0 5px;
  40. background-color: white;
  41. border-radius: 100%;
  42. }
  43. .box .point-list .point.active {
  44. background-color: black;
  45. }
  46. .box .point-list .point:hover {
  47. cursor: pointer;
  48. }
  49. .skip {
  50. position: absolute;
  51. top: 140px;
  52. display: inline-block;
  53. width: 40px;
  54. height: 80px;
  55. text-align: center;
  56. line-height: 80px;
  57. background-color: lightgray;
  58. color: white;
  59. opacity: 0.2;
  60. font-size: 36px;
  61. }
  62. .box .prev {
  63. left: 0;
  64. }
  65. .box .next {
  66. right: 0;
  67. }
  68. .box .skip:hover {
  69. cursor: pointer;
  70. opacity: 0.5;
  71. color: black;
  72. }
  73. </style>
  74. </head>
  75. <body>
  76. <div class="box">
  77. <img src="banner/banner1.jpg" alt="" class="slider active" data-index="1">
  78. <img src="banner/banner2.jpg" alt="" class="slider" data-index="2">
  79. <img src="banner/banner3.jpg" alt="" class="slider" data-index="3">
  80. <img src="banner/banner4.jpg" alt="" class="slider" data-index="4">
  81. <!-- 小按钮 -->
  82. <div class="point-list">
  83. <!-- <span class="point active"></span>
  84. <span class="point"></span>
  85. <span class="point"></span> -->
  86. </div>
  87. <!-- 左页翻页按钮 -->
  88. <span class="skip prev">&lt;</span>
  89. <span class="skip next">&gt;</span>
  90. </div>
  91. </body>
  92. <script>
  93. // 1、获取所有图片
  94. var imgs = document.querySelectorAll('img');
  95. // 2、获取小圆点的父节点
  96. var pointList = document.querySelector('.point-list');
  97. // 3、动态生成小圆点:圆点和图片对应,通过遍历图片动态生成
  98. imgs.forEach(function (img, index) {
  99. var span = document.createElement('span');
  100. // 默认显示第一张图片,所以第一个小圆点应该是激活,就是有一个黑背景
  101. if (index === 0) {
  102. span.classList.add('point', 'active');
  103. }
  104. // 给圆点添加样式
  105. span.classList.add('point');
  106. // 将小圆点与当前的图片进行关联
  107. span.dataset.index = img.dataset.index;
  108. // 将小圆点添加到页面中
  109. pointList.appendChild(span);
  110. });
  111. // 4、为小圆点添加点击事件
  112. // 获取所有的小圆点
  113. var points = document.querySelectorAll('.point');
  114. // 事件代理/委托;为每个小圆点添加点击事件
  115. pointList.addEventListener("click", function (ev) {
  116. console.log(ev.target);
  117. imgs.forEach(function (img) {
  118. if (img.dataset.index === ev.target.dataset.index) {
  119. imgs.forEach(function (img) {
  120. // 去掉原来图片激活样式
  121. img.classList.remove("active");
  122. });
  123. // 设置当前图片的激活样式
  124. img.classList.add("active");
  125. // 公共函数: 设置小圆点当前的高亮, 必须与图片一一对应, 同步
  126. setPointActive(img.dataset.index);
  127. }
  128. });
  129. }, false);
  130. // 公共函数:setPointActive;设置小圆点高亮
  131. function setPointActive(imgIndex) {
  132. // 清除之前的小圆点的激活状态
  133. points.forEach(function (point) {
  134. // 先移除之前圆点激活状态
  135. point.classList.remove('active');
  136. // 如果圆点和图片对应,设置为激活
  137. if (point.dataset.index === imgIndex) point.classList.add('active');
  138. });
  139. }
  140. // 获取翻页按钮
  141. var skip = document.querySelectorAll('.skip');
  142. // 添加事件
  143. skip.item(0).addEventListener('click', skipImg, false);
  144. skip.item(1).addEventListener('click', skipImg, false);
  145. // 翻页显示图片的函数
  146. function skipImg(ev) {
  147. // 获取当前正在显示的图片
  148. var currentImg = null;
  149. imgs.forEach(function (img) {
  150. // 当前图片是否有'active'
  151. if (img.classList.contains('active')) {
  152. currentImg = img;
  153. }
  154. });
  155. // 1. 判断点击的是显示前一张的按钮,显示前一张图片
  156. if (ev.target.classList.contains('prev')) {
  157. // 去掉当前图片的激活状态
  158. currentImg.classList.remove('active');
  159. // 获取前一张图片
  160. currentImg = currentImg.previousElementSibling;
  161. // 如果存在前一张
  162. if (currentImg !== null && currentImg.nodeName === 'IMG') {
  163. currentImg.classList.add('active');
  164. } else {
  165. // 如果不存在前一张
  166. currentImg = imgs[imgs.length - 1];
  167. currentImg.classList.add('active');
  168. }
  169. }
  170. // 2. 判断点击的是显示前后张的按钮,显示后一张图片
  171. if (ev.target.classList.contains('next')) {
  172. // 去掉当前图片的激活状态
  173. currentImg.classList.remove('active');
  174. // 获取后一张图片
  175. currentImg = currentImg.nextElementSibling;
  176. // 如果存在后一张
  177. if (currentImg !== null && currentImg.nodeName === 'IMG') {
  178. currentImg.classList.add('active');
  179. } else {
  180. // 如果不存在前一张
  181. currentImg = imgs[0];
  182. currentImg.classList.add('active');
  183. }
  184. }
  185. // 设置小圆点的高亮
  186. setPointActive(currentImg.dataset.index);
  187. }
  188. // 定时器自动播放
  189. var box = document.querySelector('.box');
  190. var timer = null;
  191. // 创建鼠标移入事件的监听器
  192. box.addEventListener('mouseover', function(){
  193. // 清除定时器
  194. clearInterval(timer);
  195. }, false);
  196. // 移出时自动播放轮播图
  197. box.addEventListener('mouseout', function (){
  198. // 创建一个事件模拟器
  199. var clickEvent = new Event('click');
  200. timer = setInterval(function(){
  201. skip.item(1).dispatchEvent(clickEvent);
  202. }, 2000);
  203. }, false);
  204. </script>
  205. </html>

演示效果图:

总结

1、轮播图很难,代码很多,变量、对象很多,涉及知识也很多。
2、总得来说还是写出来了。
3、轮播图案例需要、也值得反复练习。

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