JavaScript中最重要的5个Observer,看这一篇就够了

MutationObserver

简介:

MutationObserver用于监听DOM对象的变更,包括节点属性的变化、子节点的增删改等。提供了方便的方式监听DOM变化。

API介绍:

  • MutationObserver(callback):创建新的实例,传入变动时的回调函数。
  • observe(target, config):开始观察指定目标节点,传入目标节点和配置对象。
  • disconnect():停止观察,断开与所有目标节点的关联。

基本使用:

const targetNode = document.getElementById("app");
const config = {
  attributes: true,
  childList: true,
  subtree: true,
  characterData: true
};

const callback = function (mutationsList, observer) {
  console.log(mutationsList);
};

const observer = new MutationObserver(callback);
observer.observe(targetNode, config);

常见场景:

适用于动态渲染Tag group内元素,例如实现简单的Todo List。

<!-- MutationObserver Todo List Demo -->
<!DOCTYPE html>
<html>
<head>
  <title>MutationObserver Todo List Demo</title>
  <style>
    #todo-list {
      list-style-type: none;
    }
  </style>
</head>
<body>
  <h1>Todo List</h1>
  <ul id="todo-list">
    <li>Complete homework</li>
    <li>Go shopping</li>
  </ul>
  <button id="addTask">Add Task</button>
  <button id="removeTask">Remove Task</button>
  <p id="taskCount">Task Count: 2</p>

  <script>
    // JavaScript code for MutationObserver
  </script>
</body>
</html>
IntersectionObserver

简介:

IntersectionObserver用于监听元素在视口中的可见比例变化,适用于性能优化。

API介绍:

  • IntersectionObserver(callback, options):创建新的实例,传入变动时的回调函数和配置对象。
  • observe(target):开始观察指定目标元素,传入目标元素。
  • unobserve(target):停止观察指定目标元素。
  • disconnect():停止观察,断开与所有目标元素的关联。

基本使用:

const target = document.getElementById('app');
const options = {
  root: rootTarget,
  rootMargin: '0px',
  threshold: 0.5
};

const intersectionObserver = new IntersectionObserver((entries, observer) => {
  entries.forEach(entry => {
    console.log(entry);
  });
}, options);

intersectionObserver.observe(target);

常见场景:

适用于元素可见性变化时执行特定逻辑,例如优化性能。

<!-- Sticky Header with Shadow on Intersection -->
<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Sticky Header with Shadow on Intersection</title>
  <style>
    // CSS styles for the example
  </style>
</head>
<body>
  <div id="guard"></div>
  <header id="sticky-header" class="header-shadow">Sticky Header</header>
  <section>
    <p>Scroll down to trigger sticky and show shadow</p>
  </section>

  <script>
    // JavaScript code for IntersectionObserver
  </script>
</body>
</html>
ResizeObserver

简介:

ResizeObserver用于监听DOM尺寸的变化,提供实时获取元素尺寸的能力。

API介绍:

  • ResizeObserver(callback):创建新的实例,传入尺寸变化时的回调函数。
  • observe(target):开始观察指定目标元素,传入目标元素。
  • unobserve(target):停止观察指定目标元素。
  • disconnect():停止观察,断开与所有目标元素的关联。

基本使用:

const box = document.getElementById('box');
const resizeObserver = new ResizeObserver(entries => {
  entries.forEach(entry => {
    console.log(entry);
  });
});

resizeObserver.observe(box);

常见场景:

用于实时获取元素尺寸的变化,例如resize-detector。

<!-- ResizeObserver Demo with Resizable Box -->
<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>ResizeObserver Demo with Resizable Box</title>
  <style>
    // CSS styles for the example
  </style>
</head>
<body>
  <div id="resizable-box">Resize me!</div>

  <script>
    // JavaScript code for ResizeObserver
  </script>
</body>
</html>
PerformanceObserver

简介:

PerformanceObserver用于监听浏览器的性能事件,便于处理性能相关信息。

API介绍:

  • PerformanceObserver(callback):创建新的实例,传入性能事件发生时的回调函数。
  • observe(options):开始观察指定类型的性能事件,传入配置对象,指定entryTypes。
  • disconnect():停止观察,断开与所有性能事件的关联。

常见entryTypes:

  • mark:标记时间戳的事件。
  • measure:performance.measure触发的事件。
  • frame:网页渲染的事件。
  • navigation:导航的事件,例如页面加载或重新加载。

基本使用:

function perf_observer(list, observer) {
  console.log(list);
}

const observer2 = new PerformanceObserver(perf_observer);
observer2.observe({ entryTypes: ["measure"] });

常见场景:

适用于对性能敏感的项目和长期性能监控,方便处理各种性能事件。

ReportingObserver

简介:

ReportingObserver用于监听浏览器报告的事件,例如废弃API、过时特性、网络错误等。这在监控SDK等方面经常使用,方便处理各种浏览器报告的事件。

API介绍:

  • ReportingObserver(callback):创建新的实例,传入报告事件发生时的回调函数。
  • observe(options):开始观察指定类型的报告事件,传入配置对象,指定types。
  • disconnect():停止观察,断开与所有报告事件的关联。

基本使用:

const reportingObserver = new ReportingObserver(reports => {
  reports.forEach(report => {
    console.log(report);
  });
});

reportingObserver.observe({ types: ["deprecation", "intervention"] });

常见报告事件类型:

  • deprecation:废弃API的事件。
  • intervention:浏览器干预的事件。
  • crash:浏览器崩溃的事件。
  • error:一般的错误事件。

常见场景:

适用于监控废弃的API、浏览器干预、浏览器崩溃等情况,方便及时做出处理。

综述:

这篇文章深入研究了JavaScript中最重要的五个Observer,包括MutationObserver、IntersectionObserver、ResizeObserver、PerformanceObserver、ReportingObserver。每个Observer都提供了独特的监听机制,适用于不同的场景。从监听DOM变更到元素可见性、尺寸变化、性能事件以及浏览器报告,这些Observer为开发者提供了丰富的工具,使得处理复杂的Web开发场景更加得心应手。

通过对每个Observer的API介绍和基本使用,开发者可以更好地理解和利用它们,为Web应用的开发、性能优化、监控等方面提供强大的支持。综合运用这些Observer,开发者可以更加高效地处理各种复杂的前端场景,提升用户体验和系统性能。

智能网联汽车的安全员高级考试涉及多个方面的专业知识,包括但不限于自动驾驶技术原理、车辆传感器融合、网络安全防护以及法律法规等内容。以下是针对该主题的一些核心知识解析: ### 关于智能网联车安全员高级考试的核心内容 #### 1. 自动驾驶分级标准 国际自动机工程师学会(SAE International)定义了六个级别的自动驾驶等级,从L0到L5[^1]。其中,L3及以上级别需要安全员具备更高的应急处理能力。 #### 2. 车辆感知系统的组成与功能 智能网联车通常配备多种传感器,如激光雷达、毫米波雷达、摄像头和超声波传感器等。这些设备协同工作以实现环境感知、障碍物检测等功能[^2]。 #### 3. 数据通信与网络安全 智能网联车依赖V2X(Vehicle-to-Everything)技术进行数据交换,在此过程中需防范潜在的网络攻击风险,例如中间人攻击或恶意软件入侵[^3]。 #### 4. 法律法规要求 不同国家和地区对于无人驾驶测试及运营有着严格的规定,考生应熟悉当地交通法典中有关自动化驾驶部分的具体条款[^4]。 ```python # 示例代码:模拟简单决策逻辑 def decide_action(sensor_data): if sensor_data['obstacle'] and not sensor_data['emergency']: return 'slow_down' elif sensor_data['pedestrian_crossing']: return 'stop_and_yield' else: return 'continue_driving' example_input = {'obstacle': True, 'emergency': False, 'pedestrian_crossing': False} action = decide_action(example_input) print(f"Action to take: {action}") ``` 需要注意的是,“同学”作为特定平台上的学习资源名称,并不提供官方认证的标准答案集;建议通过正规渠道获取教材并参加培训课程来准备此类资格认证考试
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

秋名山大前端

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值