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

相关推荐
阿山同学.4 分钟前
AWS 亚马逊 S3存储桶直传 前端demo 复制即可使用
前端·javascript·aws
Jolyne_12 分钟前
grid 实现完美的水平铺满、间隔一致的自适应布局
前端·css
西洼工作室16 分钟前
【解决导航栏字体图标渲染导致文本闪烁问题】采用腾讯视频的解决方案
前端·css·css3
WindrunnerMax24 分钟前
从零实现富文本编辑器#5-编辑器选区模型的状态结构表达
前端·架构·github
CodeSheep29 分钟前
宇树科技,改名了!
前端·后端·程序员
Hilaku37 分钟前
为什么我们用了 Vite 还是构建慢?——真正的优化在这几步
前端·javascript·vite
XI锐真的烦37 分钟前
横向对比npm和yarn
前端·npm·node.js
国家不保护废物37 分钟前
🧩 React 组件化进阶:像乐高大师一样搭建你的应用世界!
前端·react.js·ai编程
TimelessHaze44 分钟前
从"切图崽"到前端工程师:React 到底是个啥?🚀
前端·react.js·ai编程
站在风口的猪11081 小时前
《前端面试题:CSS的display属性》
前端·css·html·css3·html5