screenfull在IE中引起的坑

screenfull版本
  • 5.0.0
先来看BUG

IE环境下出现了bug

IE环境下,首页内容排版很奇怪,内容和滚动条都被拉到左边了

chrome环境下显示正常

chrome环境下显示正常
解决方案
原来的代码是这样的
handleScreenFull(type) {
    if (!screenfull.isEnabled) {
      this.$message({
        message: "不支持全屏",
        type: "warning"
      });
      return false;
    }
    screenfull.toggle();
    this.isScreenFull = !this.isScreenFull;
}
添加判断IE的逻辑,并把全屏的元素设置为body
handleScreenFull(type) {
      if (!screenfull.isEnabled) {
        this.$message({
          message: "不支持全屏",
          type: "warning"
        });
        return false;
      }
      if(!!window.ActiveXObject||"ActiveXObject" in window){
        screenfull.toggle(document.getElementsByTagName("body")[0]);
      }else{
        screenfull.toggle();
      }
      this.isScreenFull = !this.isScreenFull; 
    }
问题解决

问题解决

原因分析

screenfull的toggle()方法在非全屏情况下会调用request()方法来切换全屏(全屏情况下调用exit()方法)。

request: function (element) {
 		return new Promise(function (resolve, reject) {
 			var onFullScreenEntered = function () {
 				this.off('change', onFullScreenEntered);
 				resolve();
 			}.bind(this);

 			this.on('change', onFullScreenEntered);

 			element = element || document.documentElement;

 			var returnPromise = element[fn.requestFullscreen]();

 			if (returnPromise instanceof Promise) {
 				returnPromise.then(onFullScreenEntered).catch(reject);
 			}
 		}.bind(this));
 	}

没有传入element参数的时候,进行全屏的是

element = document.documentElement

相当于

document.getElementsByTagName("html")[0]

<html>
..........
</html>
返回的是文档的根节点
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值