PHP8.1.21版本已发布
vue8.1.21版本已发布
jquery8.1.21版本已发布

博客列表 > 任务队列、事件、冒泡、fetch使用

任务队列、事件、冒泡、fetch使用

王浩
王浩 原创
2021年09月30日 21:13:23 565浏览
  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>
声明:本文内容转载自脚本之家,由网友自发贡献,版权归原作者所有,如您发现涉嫌抄袭侵权,请联系admin@php.cn 核实处理。
全部评论
文明上网理性发言,请遵守新闻评论服务协议