Blogger Information
Blog 19
fans 0
comment 0
visits 13339
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
任务队列、事件、冒泡、fetch使用
王浩
Original
587 people have browsed it
  1. 作业内容:
  2. 1. [可选]JS单线程与事件循环,任务队列,解决了什么问题?
  3. 2. 事件的添加方式有哪些?事件删除,事件派发是怎么实现的?
  4. 3. 事件冒泡是什么意思 ? 事件冒泡是如何实现事件委托的?
  5. 4. fetch的常用场景,自己找一些json数据进行测试

1. [可选]JS单线程与事件循环,任务队列,解决了什么问题?

单线程保证和任务的顺序执行,而任务队列让那些可能比较耗时间的任务通过事件循环来控制不至于产生阻塞,可以确保主线程的正常运行。
代码演示:

  1. function clg(num) {
  2. return console.log(num);
  3. }
  4. clg(1);
  5. setTimeout(() => clg(2), 1000);
  6. clg(3);
  7. // 输出:1,3,2

2. 事件的添加方式有哪些?事件删除,事件派发是怎么实现的?

事件的添加方式主要有以下内种:

  • 通过元素的事件属性添加
  1. <button onclick="alert(1);">点击</button>
  • 通过元素对象(元素对象里的onclick只能执行一次,如果有多条,则只执行最后一条。
  1. <button>点击</button>
  2. <script>
  3. let btn1 = document.querySelector("button");
  4. btn1.onclick = () => console.log("按钮被点击了");
  5. </script>

这个删除比较简单

  1. // 删除click事件
  2. btn1.onclick = null;
  • 事件监听器,用addEventListener可以对同一个元素添加多个事件
  1. let btn1 = document.querySelector("button");
  2. // addEventListener(事件, 回调, 冒泡=默认,可以省略)
  3. btn1.addEventListener("click", () => console.log("事件监听器"), false);

这个删除必须要指定回调函数名,上面代码可修改如下:

  1. let btn1 = document.querySelector("button");
  2. let fun1 = () => console.log("事件监听器");
  3. btn1.addEventListener("click", fun1, false);
  4. btn1.removeEventListener("click", fun1);

事件派发的实现:

  1. // new 一个新的事件对象出来
  2. let myEvent = new Event("click");
  3. // 然后用dispatchEvent来派发
  4. btn1.dispatchEvent(myEvent);

3. 事件冒泡是什么意思 ? 事件冒泡是如何实现事件委托的?

事件冒泡指的是任何元素触发事件,他的逐个上级元素都会触发相同的事件,只不过对于当前元素来说,他的的主体和目标是一致的。所以通常会在元素的上级元素上绑定事件,委托执行。

  1. <ul class="list">
  2. <li class="item">item1</li>
  3. <li class="item">item2</li>
  4. <li class="item">item3</li>
  5. <li class="item">item4</li>
  6. <li class="item">item5</li>
  7. </ul>
  8. <script>
  9. function fn(ev) {
  10. // 如果需要停止冒泡,则可以用这一句代码
  11. // ev.stopPropagation();
  12. console.log("[当前主体]:" + ev.currentTarget.textContent);
  13. console.log("[当前目标]:" + ev.target.textContent);
  14. }
  15. let lis = document.querySelector(".list");
  16. [...lis.children].forEach((element) => {
  17. element.onclick = fn;
  18. });
  19. lis.onclick = fn;
  20. </script>

4. fetch的常用场景,自己找一些json数据进行测试

常用的JSON网站:
https://jsonplaceholder.typicode.com

  1. <style>
  2. .t {
  3. border-collapse: collapse;
  4. }
  5. .t > tbody > tr > td,
  6. th {
  7. border: 1px solid red;
  8. padding: 0.5em;
  9. }
  10. </style>
  11. <table class="t">
  12. <tbody>
  13. <tr>
  14. <th>ID</th>
  15. <th>name</th>
  16. <th>username</th>
  17. <th>email</th>
  18. </tr>
  19. </tbody>
  20. </table>
  21. <script>
  22. let html = "";
  23. fetch("https://jsonplaceholder.typicode.com/users")
  24. .then((response) => response.json())
  25. .then((data) => {
  26. data.forEach((e) => {
  27. html += "<tr>";
  28. html += "<td>" + e.id + "</td>";
  29. html += "<td>" + e.name + "</td>";
  30. html += "<td>" + e.username + "</td>";
  31. html += "<td>" + e.email + "</td>";
  32. html += "</tr>";
  33. });
  34. let tbody = document.querySelector("table>tbody");
  35. tbody.insertAdjacentHTML("beforeEnd", html);
  36. });
  37. </script>
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