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等这些后面我会单独拿出来讲。

相关推荐
漂流瓶jz2 小时前
Webpack如何实现万物皆可import?loader的使用/配置/手写实践
前端·javascript·webpack
ZC跨境爬虫2 小时前
跟着 MDN 学CSS day_41:显式轨道、隐式网格与区域命名放置
前端·javascript·css·ui·交互
修己xj3 小时前
告别手动存图!这款叫 Fatkun 的浏览器插件,简直是素材收集神器
前端
袋鼠云数栈4 小时前
从前端到基础设施,ACOS 如何打通企业全链路可观测
运维·前端·人工智能·数据治理·数据智能
AskHarries4 小时前
系统提示词、开发者指令和用户输入的优先级
java·前端·数据库
Moment4 小时前
长上下文会最终杀死 Rag 吗?
前端·javascript·后端
qcx235 小时前
【系统学AI】25 论文导读 ①:两篇改变 AI 的开山之作——Attention Is All You Need & ReAct
前端·人工智能·react.js·transformer
kyriewen6 小时前
大文件上传最全指南:分片、断点续传、秒传,一篇就够了
前端·javascript·面试
郑洁文6 小时前
基于Python的Web命令执行漏洞自动化检测系统
前端·python·网络安全·自动化
新酱爱学习6 小时前
手搓 10 个 Skill 后,我把重复劳动收敛成了一套零依赖 CLI 工具
前端·javascript·人工智能