vue项目实现全屏,可监听是否全屏而更改图标呦

vue项目实现全屏不难,只要使用screenfull 插件即可实现,但实现全屏功能后,我们还需要更新全屏和退出全屏的图标,我在图标切换这可是苦恼了很久…

问题:
因为,我们退出全屏的方式很多,有通过点击退出全屏按钮,有按Esc键,还有鼠标移动到中间顶部显示的那个关闭按钮,这时,我们不仅要监听点击按钮事件,Esc事件,还要监听是否按了那个关闭按钮,前两者还好办,最后一个难倒我了。

解决方法:监听屏幕变化,一旦变化变判断是否全屏,从而实现图标正常切换。

一:下载引入screenfull 插件

npm install screenfull --save

//在调用全屏功能的组件中引入
import screenfull from 'screenfull'  

二:定义全屏切换函数

toggleFullscreen () {
  if(!screenfull.isEnabled){     //判断一下浏览器是否支持全屏显示
    this.$message({
      message:'浏览器不能全屏',
      type:'warning'
    })
    return false
  }
  screenfull.toggle()  //进行全屏切换         
},

三:调用切换全屏函数

<template>
  <div class="my_icon">
    <img src="./imgs/fullscreen.png" alt="" @click="toggleFullscreen" v-if="!isScreenFull">
    <img src="./imgs/outscreen.png" alt="" @click="toggleFullscreen" v-else>
  </div>
</template>

四:监听窗口大小变化,判断是否全屏

// 监听窗口大小改变,screenfull.isFullscreen的值为是否全屏,若是则true,反之false
	 window.onresize = () => {
	   this.isScreenFull = screenfull.isFullscreen
	 }

完整代码:

<template>
  <div class="my_icon">
    <img src="./imgs/fullscreen.png" alt="" @click="toggleFullscreen" v-if="!isScreenFull">
    <img src="./imgs/outscreen.png" alt="" @click="toggleFullscreen" v-else>
  </div>
</template>

<script>
  import screenfull from 'screenfull'  //全屏功能
  export default {
    data () {
      return {
        isScreenFull:false        //是否全屏
      }
    },
    mounted () {
      // 监听窗口大小改变,screenfull.isFullscreen的值为是否全屏,若是则true,反之false
      window.onresize = () => {
        this.isScreenFull = screenfull.isFullscreen
      }
    },
    methods: {
      toggleFullscreen () {
        if(!screenfull.isEnabled){     //判断一下浏览器是否支持全屏显示
          this.$message({
            message:'浏览器不能全屏',
            type:'warning'
          })
          return false
        }
        screenfull.toggle()           
      },
    },
  }
</script>
  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Vue中,要监听esc事件可以使用Vue的事件修饰符和自定义指令的方式。 1. 使用事件修饰符: 在模板中,可以使用`@keydown.esc`来监听键盘的esc键按下事件。例如: ```html <template> <div @keydown.esc="handleEsc"></div> </template> ``` 然后在Vue实例中定义`handleEsc`方法来处理esc键按下事件。例如: ```javascript <script> export default { methods: { handleEsc() { // 处理esc键按下事件的逻辑 } } } </script> ``` 当esc键被按下时,`handleEsc`方法会被调用。 2. 使用自定义指令: 可以通过自定义指令的方式来监听esc键按下事件。 ```javascript Vue.directive('esc', { bind: function(el, binding, vnode) { el.__handleEsc__ = function(event) { if (event.keyCode === 27) { binding.value() // 调用指令绑定的回调函数 } } document.addEventListener('keydown', el.__handleEsc__) }, unbind: function(el) { document.removeEventListener('keydown', el.__handleEsc__) delete el.__handleEsc__ } }) ``` 然后在模板中使用`v-esc`指令来将esc键事件绑定到元素上。例如: ```html <template> <div v-esc="handleEsc"></div> </template> ``` 在Vue实例中定义`handleEsc`方法来处理esc键按下事件。例如: ```javascript <script> export default { methods: { handleEsc() { // 处理esc键按下事件的逻辑 } } } </script> ``` 同样,当esc键被按下时,`handleEsc`方法会被调用。 以上是两种常见的在Vue监听esc事件的方式,根据具体情况选择适合的方式即可。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值