vue天地图按钮控制全屏,f11全屏按键同步控制实现方法

文章讲述了在Vue项目中,由于H5的事件监听无法捕获到F11键,作者通过自定义方法`toggleFullscreen`以及添加键盘和窗口变化监听来实现全屏显示和退出全屏的功能。在全屏状态下,地图布局会调整为固定定位,覆盖整个屏幕。同时,当检测到F11按键或窗口尺寸变化时,会触发相应的全屏状态切换操作。
摘要由CSDN通过智能技术生成

本人网上找了半天也没有找到合适的,h5那些控制事件都是按钮级别的捕捉不到f11的事件,所以只能自己想办法实现了,特此记录下

vue布局:

<div class="mapMain" :style="mapMain">
       <!-- 地图布局 -->
      <div id="mapDiv"></div>
      <!-- 按钮布局 -->
      <div class="button-style">
            <el-button
              size="small"
              type="primary"
              plain
              style="float: right"
              @click="toggleFullscreen"
              >{{ fullScreenText }}</el-button
            >
      </div>
</div>

data数据:

 data() {
    return {
      fullscreen: false,
      fullScreenText: "全屏显示",
    }
},

methods方法:

methods: {
    
/** 全屏显示 */
    toggleFullscreen(state) {
      this.fullscreen = true;//设置全屏状态标识
      if (this.fullScreenText === "全屏显示") {
        if(state){//如果是点击按钮才执行此全屏事件,否则如果是f11的话会报错!     
          document.documentElement.requestFullscreen(); 
        }//开启全屏
        this.fullScreenText = "退出全屏";
        //改成全屏样式
        this.mapMain = {
          position: "fixed",
          left: 0,
          top: 0,
          width: "100%",
          height: "100vh",
          zIndex: 1002,
        };
      } else {
        if(state){//如果点击按钮才执行此退出全屏事件,否则如果是f11的话会报错!   
            document.exitFullscreen(); 
        }//关闭全屏
        this.fullScreenText = "全屏显示";
        this.mapMain = {};//改回默认样式
      }
      this.$nextTick(() => {
        this.map.checkResize(); //重新调整地图大小;
      });
      
    },
/** 监听全屏相关事件 */
    listenScreenfull() {
      /** 监听按键事件 */
      window.addEventListener("keydown", (event)=>{
          if (event.key === "F11") {
            this.toggleFullscreen();//执行全屏事件
          }
      }, true);
      
      /** 监听窗口变化事件, 由于按键f11事件无法监听到退出状态,所以需要此监听事件来处理退出全屏的事务 */
      window.onresize = () => {
        if (!this.fullscreen) {//根据此开关来判断当前是否在全屏状态,网上搜了很多都不靠谱,所以用开关方法实现检测全屏状态否
          this.fullScreenText = "全屏显示";
          this.mapMain = {}; //改回默认样式
          this.$nextTick(() => {
            this.map.checkResize(); //重新调整地图大小;
          });
        }
        //改回非全屏状态
        this.fullscreen = false;    
      };
    },   
   

}

 mounted 函数:

 mounted() {
    this.listenScreenfull();
    window.scrollTo(0,0); //页面打开以后需要激活当前页面,否则按f11 捕捉不到f11按键事件
  },

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值