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

相关推荐
码界领航1 分钟前
【2025最新版】Chrome谷歌浏览器如何能恢复到之前的旧版本
前端·chrome
乐多_L1 小时前
使用vue3框架vue-next-admin导出表格excel(带图片)
前端·javascript·vue.js
南望无一1 小时前
React Native 0.70.x如何从本地安卓源码(ReactAndroid)构建
前端·react native
Mike_188702783511 小时前
1688代采下单API接口使用指南:实现商品采集与自动化下单
前端·python·自动化
鲨鱼辣椒️面1 小时前
HTML视口动画
前端·html
一小路一1 小时前
Go Web 开发基础:从入门到实战
服务器·前端·后端·面试·golang
堇舟1 小时前
HTML第一节
前端·html
纯粹要努力1 小时前
前端跨域问题及解决方案
前端·javascript·面试
小刘不知道叫啥1 小时前
React源码揭秘 | 启动入口
前端·react.js·前端框架
kidding7232 小时前
uniapp引入uview组件库(可以引用多个组件)
前端·前端框架·uni-app·uview