Blogger Information
Blog 119
fans 3
comment 1
visits 94680
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
JS项目实践:Todolist留言与删除、轮播图
赵大叔
Original
643 people have browsed it

留言与删除

代码:

  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、轮播图案例需要、也值得反复练习。

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