问题描述
目录
全屏功能 - 后管常用的功能
全屏功能的实现逻辑:创建并使用全屏组件
思路
在顶部的工具栏中补充一个按钮,点击这个按钮之后它就会进行一个全屏展示,为了方便复用此功能,我把它注册成一个全局组件
具体实现
一 组件创建
1.创建组件
新建一个文件
src / components / ScreenFull / index.vue
里面的代码为
<template>
<!-- 放置一个图标 -->
<div style="display:inline-block">
<svg-icon icon-class="fullscreen" class="fullscreen" />
</div>
</template>
<script>
export default {
name: 'ScreenFull'
}
</script>
<style lang="scss" scoped>
.fullscreen {
width: 20px;
height: 20px;
color: #fff;
cursor: pointer;
}
</style>
提示下:要想这个里面的图片能正确显示,还必须在 src\icons\svg
下有对应的fullscreen.svg文件 svg是矢量图
2.注册全局组件
在 components/index.js
中,引入组件,并注册成全局
import ScreenFull from '@/components/ScreenFull.index.vue'
注册
export default {
install(Vue) {
Vue.component(ScreenFull,ScreenFull)
}
}
3.使用全局组件
Layout/NavBar/index.vue
<div class="right-menu">
<lang class="right-menu-item" />
// 全屏组件
<ScreenFull class="right-menu-item" />
<el-dropdown class="avatar-container right-menu-item" trigger="click">
<style>
.right-menu-item {
vertical-align: middle;
}
</style>
二 实现全屏逻辑
浏览器中自带全屏功能 document.documentElement.webkitRequestFullScreen()
,不过有兼容性问题,所以改用插件。
使用screenFull插件来提供全屏功能
安装插件
npm i [email protected]
使用插件
在全屏组件中引入
import screenfull from 'screenfull'
给icon 添加点击事件,在回调中使用使用插件的核心api toggle 切换的方法
<svg-icon
icon-class="fullscreen"
class="fullscreen"
+ @click="toggleScreen"
/>
回调函数 toggle插件api
toggleScreen () {
screenfull.toggle()
}
小结
- 了解一个有兼容性问题的api (requestFullScreen)
- caniuse 去查兼容性
- fullscreen.toggle()切换全屏
三 图标切换
让处于全屏状态和非全屏状态时的图标是不同的
思路
补充数据项:isFullscreen
- 在全屏切换时更改它的值
- 在显示图标时给出不同的class
补充数据项
data () {
return {
isFullscreen: false
}
}
在全屏切换时更改它的值
toggleScreen () {
screenfull.toggle()
+ this.isFullscreen = !this.isFullscreen
}
图标切换
exit-fullscreen退出全屏
<svg-icon
+ :icon-class="isFullScreen ? 'exit-fullscreen' : 'fullscreen'"
class="fullscreen"
@click="toggleScreen"
/>
要提前准备两个图片。
处理ESC按键
除了点击图标切换外 还有按 ESC切换图标 修改图标
如果当前是全屏状态,按下ESC会恢复到普通状态,而此时组件中的数据项却没有变成false,所以导致图标没有及时修改过来。
解决方案:使用screenfull的事件监听
// 监听全屏状态的变化 在 created里监听
created() {
// ESC会改变当前的全屏状态
// screenfull是插件,它自带事件监听 on
// screenfull.isFullscreen :插件自带的属性,表示当前是否处于全屏状态
screenfull.on('change', () => {
console.log('当前是否是全屏', screenfull.isFullscreen)
// 本地状态 接收插件本身里面的状态
this.isFullscreen = screenfull.isFullscreen
})
}
有两种状态修改图标 因此要使用 screenfull.on 的内置方法去监听状态
插件使用地址
组件 总代码
<template>
<!-- 放置一个图标 -->
<div style="display:inline-block">
<svg-icon
:icon-class="isFullScreen ? 'exit-fullscreen' : 'fullscreen'"
class="fullscreen"
@click="toggleScreen"
/>
</div>
</template>
<script>
import screenfull from 'screenfull'
export default {
name: 'ScreenFull',
data () {
return {
isFullscreen: false
}
},
created() {
// ESC会改变当前的全屏状态
// screenfull是插件,它自带事件监听 on
// screenfull.isFullscreen :插件自带的属性,表示当前是否处于全屏状态
screenfull.on('change', () => {
console.log('当前是否是全屏', screenfull.isFullscreen)
this.isFullscreen = screenfull.isFullscreen
})
},
methods:{
// 点击 切换 toggle插件自带的属性
toggleScreen () {
screenfull.toggle()
this.isFullscreen = !this.isFullscreen
}
}
}
</script>
<style lang="scss" scoped>
.fullscreen {
width: 20px;
height: 20px;
color: #fff;
cursor: pointer;
}
</style>
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)