2 html5 浏览器已经支持的新API

HTML5规范下很多API浏览器都已经支持,这里我们列举几个很常用的浏览器支持的API:

1 tab页之间通信:

BroadcastChannel(channelName);

可用于多个不同浏览器tab页之间通信。实例化的时候Channel名称必须相同。

复制代码
const broadcastChannel = new BroadcastChannel('myChannel')

broadcastChannel.postMessage('Hello from tab 1');

使用postMessage 发送消息,并在另一个窗口监听消息

broadcastChannel.onmessage = function(e) {

console.log('Received:', e.data);

};

这里的postMessage,和 onMessage 事件,你可能在ifram和父窗体通信时你也用过。

2 浏览器全屏:

requestFullscreen()

img, video, div元素等加上这个方法就可以实现全屏,使用document.exitFullscreen();退出全屏。

3 屏幕分享:

navigator.mediaDevices.getDisplayMedia() 这个就是将当前指定的屏幕分享出去。我们如下当代是将截取内容放在播放器中播放。

复制代码
 const stream = await navigator.mediaDevices.getDisplayMedia({
            video: true,
          });
          videoElement.srcObject = stream;

当然看到这个mediaDevices,这个对象目前可以使用的还有:

1 获取摄像头

navigator.mediaDevices.getUserMedia()

2 获取设备信息:

navigator.mediaDevices.enumerateDevices()

4 网络状态

navigator.onLine

以及给window增加了两个事件

复制代码
window.ononline = function () {
        console.log("你的浏览器在线工作");
      };
      window.onoffline = function () {
        console.log("你的浏览器离线工作");
      };

5 requestAnimationFrame实现浏览器绘制帧时的调用

这个api可用来替代使用interval回调时动画都问题。当然vue底层也用了这个新的api.

复制代码
var ball = document.getElementById("ball");
      var pos = 0;

      function moveBall() {
        if (pos == 350) {
          return; // 如果到达指定位置则停止动画
        } else {
          pos += 1;
          ball.style.top = pos + "px";
          ball.style.left = pos + "px";
          window.requestAnimationFrame(moveBall); // 继续下一帧动画
        }
      }

      // 启动动画
      window.requestAnimationFrame(moveBall);

6 Clipboard 粘贴板对象,当然这对象功能也很强大。

通过writeText写入内容,通过 readText读取复制内容。

复制代码
navigator.clipboard.writeText(text).then(function() {
   console.log("复制成功!");
 }, function() {
   console.log("复制失败!");
 });

7 MutationObserver DOM变化监听

说到这个Api,你可能之前使用过insertBefore()甚至自己封装了insertAfter(),但是更为详细的监听,html5 浏览器已经实现了MutationObserver,利用这个对象可以实现更详细的dom变化的监听。

复制代码
 // Observer需要一个用于监听的目标DOM
      const targetNode = document.getElementById("app");

      //用于确定mutation监听变化的范围
      const config = {
        attributes: true, // 监听目标节点的属性变化,例如id,class等属性
        childList: true, // 除目标节点外还要监听目标节点的直接子节点
        subtree: true, // subtree的范围大于childList,还包括子节点children
        characterData: true, // 监听TextNode需要额外配置,默认TextNode变化不会触发callback
      };

      // 当观察到变动时执行的回调函数,mutationsList包含本次变更的信息
      const callback = function (mutationsList, observer) {
        console.log(mutationsList);
      };

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

8 scrollIntoView 快速滚动到指定的元素位置。

这是一个dom新增的方法,可以配合一个behavior: "smooth",block: "start"即可实现平滑滚动。

复制代码
 document.body.scrollIntoView({
     behavior: "smooth",
     block: "start",
  });

9 Notification通知消息

复制代码
 var notification = new Notification("通知标题", {
          body: "通知内容",
          icon: "notif-icon.png",
        });

等等,还有一些其他的,比如formData,fileRender等等这些大家平时用的比较多的,我这里就不再举例。还有canvas这种,svg等这些后面我会单独拿出来讲。

相关推荐
yuguo.im18 小时前
91 行代码实现一个打飞机游戏(HTML5 Canvas 版)
前端·游戏·html5·打飞机
怪侠_岭南一只猿18 小时前
爬虫工程师学习路径 · 阶段四:反爬虫对抗(完整学习文档)
css·爬虫·python·学习·html
从文处安18 小时前
「前端何去何从」一直写 Vue ,为何要在 AI 时代去学 React「2」?
前端·react.js
掘金者阿豪18 小时前
深入解读OpenClaw配置文件:一个现代化AI网关的全景洞察
前端
葡萄城技术团队19 小时前
Playwright 官方推荐的 Fixture 模式,为什么大厂架构师却在偷偷弃用?
前端
newbe3652419 小时前
ImgBin CLI 工具设计:HagiCode 图片资产管理方案
前端·后端
bluceli19 小时前
CSS Scroll Snap:打造丝滑滚动体验的利器
前端·css
www_stdio19 小时前
深入理解 React Fiber 与浏览器事件循环:从性能瓶颈到调度机制
前端·react.js·面试
工边页字19 小时前
LLM 系统设计核心:为什么必须压缩上下文?有哪些工程策略
前端·人工智能·后端
嚣张丶小麦兜19 小时前
react的理解
前端·react.js·前端框架