Vue F11监听切大屏

2023-10-30

用Datav插件做大屏可视化时,有一个全屏需求,我的想法是监听F11键,然后触发浏览器的大屏功能API。百度一下,竟有插件,大喜。插件的好处大家都知道,时间熬出来的,并且BUG极少,代码精简,做了全浏览器兼容。

Rec 0001

步骤

1.插件

npm install --save screenfull

2.引入(可全局,也可需要的文件中引入)

import screenfull from 'screenfull'

3.datav的全屏(这个全屏是做了页面级的全屏处理,如不是单页布局不结合这个用会有问题)

  <dv-full-screen-container style="background-color: rgb(11, 8, 53);">
</dv-full-screen-container>

4.html的放大按钮

 <el-button
                          style="font-size:20px;"
                          type="text"
                          size="mini"
                          icon="el-icon-full-screen"
                          @click="clickFullscreen()"
                        ></el-button>

5.全屏插件结合datav的全屏js代码

 data() {
    return {
      show_big: false,
      fullscreen:false

    }
  },
  computed: {
  },
  watch: {
    fullscreen(newvalue, oldvalue) {
      if (newvalue != oldvalue) {
        // 进行退出全屏的后的事件
        console.log('退出全屏')
      }
    }
  },
  mounted() {
    const that = this
    window.addEventListener('keydown', this.KeyDown, true)
    window.onresize = () => {
      // 调用判断全屏的方法,用来监听
      that.checkFull()
    }
  },
  created() {
  },
  beforeDestroy() {
  },
  methods: {

    KeyDown(event) {
      if (event.keyCode === 122) {
        event.returnValue = false
        this.clickFullscreen() // 触发全屏的按钮
      }
    },

    clickFullscreen() {
      screenfull.toggle()	// 全屏状态切换
      this.fullscreen = !this.fullscreen
      this.show_big = !this.show_big
    },
    checkFull() {
      const fullscreen = window.fullScreen || document.webkitIsFullScreen
      this.fullscreen = fullscreen
      return fullscreen
    }
  }

大功就告成了

================================如果遇到问题==========================

vue screenfull全屏插件 安装之后 npm run serve报错
 Module parse failed: Unexpected token (55:42) You may need a

解决办法,用低版本插件,执行如下

npm install --save-dev screenfull@5.1.0

想看我的全部代码,贴上

<template>
  <div class="big-screen-container" @dblclick="clickFullscreen()">
    <div v-if="show_big">
      <dv-full-screen-container style="background-color: rgb(11, 8, 53);">
        <dv-border-box-11
          :title="$t('programModel.faceTempMonitor')"
          style="height:800px;width:100%;padding-top:60px;padding-left:22px;"
          background-color="transparent">
          <!-- <div style="text-align:right;margin-right:10px">
          <el-button
            style="font-size:15px;"
            type="text"
            size="mini"
            icon="el-icon-full-screen"
            @click="showBig()"
          ></el-button>
        </div> -->
          <el-row>
            <el-col :span="8">
              <el-row>
                <el-col>
                  <div style="margin-top:10px;">
                    <man-card :bean="bean"></man-card>
                  </div>
                </el-col>
              </el-row>
              <el-row>
                <el-col>
                  <div >
                    <acid-card :bean="bean"></acid-card>
                  </div>
                </el-col>
              </el-row>
              <el-row>
                <el-col>
                  <div >
                    <temp-card :bean="bean"></temp-card>
                  </div>
                </el-col>
              </el-row>
            </el-col>
            <el-col :span="8">
              <el-row style="margin:10px 10px 0px 10px;">
                <el-col>
                  <abnormal-card :bean="bean">
                  </abnormal-card>
                </el-col>
              </el-row>
              <el-row>
                <el-col>
                  <total-card :bean="bean">
                  </total-card>
                </el-col>
              </el-row>
              <el-row style="margin:0 10px 0 10px;">
                <el-col>
                  <device-card :bean="bean">
                  </device-card>
                </el-col>
              </el-row>
            </el-col>
            <el-col :span="8">
              <el-row style="margin:10px 25px 10px 0px ">
                <el-col>
                  <normal-img-card :bean="bean">
                  </normal-img-card>
                </el-col>
              </el-row>
              <el-row style="margin-right:25px">
                <el-col>
                  <abnormal-img-card :bean="bean">
                  </abnormal-img-card>
                </el-col>
              </el-row>
              <el-row style="margin-top:10px;margin-right:25px">
                <el-col>
                  <div class="img-abnormal-card" style="height:53px;width:100%;background-color:transparent;">
                    <dv-border-box-10 background-color="transparent" style="text-align:center;margin-right:20px">
                      <div style="display:flex;flex-dirction:row">
                        <div style="width:100%;line-height:50px;margin-right:20px;font-size:12px;color:#67C23A">
                          <span v-show="count >0">{{ count }}{{ $t('screenbig.afterFresh') }}</span>
                        </div>
                        <div style="line-height:60px;margin-right:20px;font-size:12px;color:#67C23A">
                          <el-button
                            style="font-size:20px;"
                            type="text"
                            size="mini"
                            icon="el-icon-full-screen"
                            @click="clickFullscreen()"
                          ></el-button>
                        </div>
                      </div>
                    </dv-border-box-10>
                  </div>
                </el-col>
              </el-row>
            </el-col>
          </el-row>
        </dv-border-box-11>
      </dv-full-screen-container>
    </div>
    <div v-else>

      <dv-border-box-11
        :title="$t('programModel.faceTempMonitor')"
        style="height:800px;width:100%;padding-top:60px;padding-left:22px;"
        background-color="transparent">
        <!-- <div style="text-align:right;margin-right:10px">
          <el-button
            style="font-size:15px;"
            type="text"
            size="mini"
            icon="el-icon-full-screen"
            @click="showBig()"
          ></el-button>
        </div> -->
        <el-row>
          <el-col :span="8">
            <el-row>
              <el-col>
                <div style="margin-top:10px;">
                  <man-card :bean="bean"></man-card>
                </div>
              </el-col>
            </el-row>
            <el-row>
              <el-col>
                <div >
                  <acid-card :bean="bean"></acid-card>
                </div>
              </el-col>
            </el-row>
            <el-row>
              <el-col>
                <div >
                  <temp-card :bean="bean"></temp-card>
                </div>
              </el-col>
            </el-row>
          </el-col>
          <el-col :span="8">
            <el-row style="margin:10px 10px 0px 10px;">
              <el-col>
                <abnormal-card :bean="bean">
                </abnormal-card>
              </el-col>
            </el-row>
            <el-row>
              <el-col>
                <total-card :bean="bean">
                </total-card>
              </el-col>
            </el-row>
            <el-row style="margin:0 10px 0 10px;">
              <el-col>
                <device-card :bean="bean">
                </device-card>
              </el-col>
            </el-row>
          </el-col>
          <el-col :span="8">
            <el-row style="margin:10px 25px 10px 0px ">
              <el-col>
                <normal-img-card :bean="bean">
                </normal-img-card>
              </el-col>
            </el-row>
            <el-row style="margin-right:25px">
              <el-col>
                <abnormal-img-card :bean="bean">
                </abnormal-img-card>
              </el-col>
            </el-row>
            <el-row style="margin-top:10px;margin-right:25px">
              <el-col>
                <div class="img-abnormal-card" style="height:53px;width:100%;background-color:transparent;">
                  <dv-border-box-10 background-color="transparent" style="text-align:center;margin-right:20px">
                    <div style="display:flex;flex-dirction:row">
                      <div style="width:100%;line-height:50px;margin-right:20px;font-size:12px;color:#67C23A">
                        <span v-show="count >0">{{ count }}{{ $t('screenbig.afterFresh') }}</span>
                      </div>
                      <div style="line-height:60px;margin-right:20px;font-size:12px;color:#67C23A">
                        <el-button
                          style="font-size:20px;"
                          type="text"
                          size="mini"
                          icon="el-icon-full-screen"
                          @click="clickFullscreen()"
                        ></el-button>
                      </div>
                    </div>
                  </dv-border-box-10>
                </div>
              </el-col>
            </el-row>
          </el-col>
        </el-row>
      </dv-border-box-11>
    </div>

  </div>
</template>

<script>
import screenfull from 'screenfull'
import {
  getAetMonitor
} from '@/api/user'
import manCard from './components/man-card'
import acidCard from './components/acid-card'
import tempCard from './components/temp-card'
import totalCard from './components/total-card'
import temperCard from './components/temper-card'
import deviceCard from './components/device-card'
import abnormalCard from './components/abnormal-card'
import abnormalImgCard from './components/abnormal-img-card'
import normalImgCard from './components/normal-img-card'
export default {
  name: 'Home',
  components: {
    manCard,
    normalImgCard,
    acidCard,
    temperCard,
    deviceCard,
    abnormalCard,
    abnormalImgCard,
    tempCard,
    totalCard
  },
  data() {
    return {
      show_big: false,
      bean: undefined,
      fullscreen:flase,
      timer: null,
      count: 10

    }
  },
  computed: {
  },
  watch: {
    fullscreen(newvalue, oldvalue) {
      if (newvalue != oldvalue) {
        // 进行退出全屏的后的事件
        console.log('退出全屏')
      }
    }
  },
  mounted() {
    const that = this
    window.addEventListener('keydown', this.KeyDown, true)
    window.onresize = () => {
      // 调用判断全屏的方法,用来监听
      that.checkFull()
    }
  },
  created() {
    clearInterval(this.timer)
    this.init()
    this.countDown(10)
  },
  beforeDestroy() {
    clearInterval(this.timer)
  },
  methods: {
    init() {
      getAetMonitor()
        .then(res => {
          this.bean = res.data
        })
        .catch(err => {
          console.log('err', err)
        })
    },
    countDown(count) {
      this.count = count
      this.timer = setInterval(() => {
        if (this.count > 0 && this.count <= count) {
          --this.count
        } else {
          this.count = 10
          this.init()
        }
      }, 1000)

      this.$once('hook:beforeDestroy', () => {
        clearInterval(this.timer)
      })
    },
    showBig(bool) {

    },
    KeyDown(event) {
      if (event.keyCode === 122) {
        event.returnValue = false
        this.clickFullscreen() // 触发全屏的按钮
      }
    },

    clickFullscreen() {
      screenfull.toggle()	// 全屏状态切换
      this.fullscreen = !this.fullscreen
      this.show_big = !this.show_big
    },
    checkFull() {
      const fullscreen = window.fullScreen || document.webkitIsFullScreen
      this.fullscreen = fullscreen
      return fullscreen
    }
  }

}
</script>

<style lang="scss" scoped>
.big-screen-container {
  margin:20px;
  height:800px;
  background-color: rgb(11, 8, 53);
  box-shadow: 0px 2px 5px rgba(18, 32, 231, 0.788);
}
</style>

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Vue F11监听切大屏 的相关文章

随机推荐

  • 内存带宽测试与AVX指令集读写内存

    一 内存理论带宽的计算 内存带宽计算公式 带宽 内存核心频率 内存总线位数 倍增系数 先容我从DDR的技术说起 DDR采用时钟脉冲上升 下降沿各传一次数据 1个时钟信号可以传输2倍于SDRAM的数据 所以又称为双倍速率SDRAM 它的倍增系
  • 知乎3000+赞,同事考上公务员后,抱怨“闲出了鸟”...

    番外篇 故事改编自知乎高赞回答 作者 陈大侠 链接 https www zhihu com question 266783359 answer 316889226 漫画原创公众号 不会笑青年 授权转载请联系微信 laughyouth369
  • Flutter应用开发,系统样式改不了?SystemChrome 状态栏、导航栏、屏幕方向……想改就改

    文章目录 开发场景 SystemChrome 介绍 SystemChrome的使用 导入 SystemChrome 包 隐藏状态栏 说明 改变状态栏的样式 注意事项 其他样式说明 锁定屏幕方向 锁定屏幕方向实例 注意事项 开发场景 开发AP
  • 爬虫学习笔记,从基础到部署。

    爬虫基础知识 笔记中出现的代码已经全部放到了github上https github com liangxs0 python spider save git 1 http基本原理 http 协议 在HTTP之上添加了安全协议的叫https s
  • js筛选对象中的空值

    如果对象中属性比较多 可以循环对象 let data id this equipmentID codeName this equipmentName equipmentInfo this equipmentSite pageSize thi
  • MySQL Index Condition小结

    什么是index Condition 索引下推 index condition pushdown 简称ICP 在Mysql5 6的版本上推出 用于优化查询 在不使用ICP的情况下 在使用非主键索引 又叫普通索引或者二级索引 进行查询时 存储
  • elementui的table复选框单选

  • 无线网卡插上电脑没反应的解决办法

    今天偶然切换WiFi时 网卡突然不能用了 右下角的网络连接标识一直都是显示的无网络 按照百度的方法试了 无非就是装驱动 插电脑后板 也没用 然后我就发现把无线网卡拔了重新插入的时候右下角显示了USB设备的标识 打开 我的电脑 也能发现有后面
  • 把一个表的查询结果当做另一个表的一个字段输出

    把一个表的查询结果当做另一个表的一个字段输出 CourseController java Controller GetMapping getPage number size ApiOperation value 分页查询课程表 含已更新章节
  • GlusterFS(GFS)分布式文件系统

    目录 一 文件系统简介 1 文件系统的组成 2 文件系统的作用 3 文件系统的挂载使用 二 GlusterFS概述 1 GlusterFS是什么 2 GlusterFS的特点 3 GlusterFS术语介绍 3 1 Brick 存储块 3
  • 【C#学习】设置TextBox组件的进度条并将接受到的数据展示在最下方

    设置TextBox组件的进度 将TextBox中的数据默认展示最下方 private void richTextBox2 TextChanged object sender EventArgs e 滚条设置在最下方 this richTex
  • sort自定义排序讲解

    问题 算法题当中对原始数据进行排序后 很大概率可以使得解题变得简单 一般情况下都是对 vector 等基本类型进行排序 这时直接使用 sort 函数即可 但是有时候我们想对自定义的结构体等类型进行排序 这时候直接调用sort就行不通了 需要
  • 《Python进阶系列》七:迭代器与生成器

    Python中的迭代器与生成器 quad quad 在Python中存在两种好用的功能 迭代器与生成器 以list容器为例 在使用该容器迭代一组数据时 必须事先将所有数据存储到容器中 才能开始迭代 而生成器却不同 它可以实现在迭代的同时生成
  • pwn 入门基础

    web狗的pwn生之路 系列文章目录 第一章 pwn 入门基础 第二章 pwn 栈题基础 待更新 文章目录 web狗的pwn生之路 系列文章目录 一 汇编基础 重点 笔记 二 Linux 基础 重点 笔记 三 调用约定 重点 笔记 四 EL
  • 移动OneNet——创建和调试

    进入Onenet官网 然后在控制台 创建产品 并在产品下创建设备 一 创建产品 选择多协议接入产品 然后创建一个MQTT协议的产品 创建产品界面参考如下 注意 务必选择MQTT协议 创建完毕后 我们点击查看具体的产品信息 注意 需要记录产品
  • 案例:规则引擎Drools解决汽水问题

    喝汽水问题 1 元钱一瓶汽水 喝完后两个空瓶换一瓶汽水 问 你有50元钱 最多可以喝到几瓶汽水 不能借空瓶 呵呵无商不奸 answer 如果有超过一元钱 则买一瓶汽水喝 此时 钱减少一元 同时拥有的空瓶增加一个 如果拥有至少两个空瓶 则两个
  • 把windows系统的默认编码改成UTF-8

    对于开发人员来说windows的编码的确是神一般的存在 windows老版本语言编码实际上是ascii和gbk编码混用 因此经常乱码 现在UTF 8国际化流行的阶段 windows这么多年 不知道耽误了多少程序员 老朱是linux服务器 数
  • Python数据分析库pandas ------ merge、concatenation 、pd.concat、combine_first、stack、unstack(0)、pivot、drop;合并...

    对于合并操作 熟悉SQL的读者可以将其理解为JOIN操作 它使用一个或多个键把多行数据 结合在一起 事实上 跟关系型数据库打交道的开发人员通常使用SQL的JOIN查询 用几个表共有的引用 值 键 从不同 的表获取数据 以这些键为基础 我们能
  • Java架构直通车——过滤器、拦截器、AOP的区别

    文章目录 过滤器 拦截器 AOP 面向切面 三者使用场景 过滤器 过滤器拦截的是URL Spring中自定义过滤器 Filter 一般只有一个方法 返回值是void 当请求到达web容器时 会探测当前请求地址是否配置有过滤器 有则调用该过滤
  • Vue F11监听切大屏

    用Datav插件做大屏可视化时 有一个全屏需求 我的想法是监听F11键 然后触发浏览器的大屏功能API 百度一下 竟有插件 大喜 插件的好处大家都知道 时间熬出来的 并且BUG极少 代码精简 做了全浏览器兼容 Rec 0001 步骤 1 插