element-ui导航实现全屏/取消全屏功能
先上效果图
html部分代码:
<!-- 全屏 --> <span class="user" @click="togglefullscreen"> <el-tooltip class="item" effect="dark" :content="isfullscreen ? '退出全屏':'全屏'" placement="bottom"> <i :class="isfullscreen ? 'el-icon-aim':'el-icon-full-screen'" style="width: 1.6rem;height: 1.6rem;vertical-align:middle;margin-right: .6rem;margin-bottom: .5rem;font-size:2rem"></i> </el-tooltip> </span>
data()定义部分:
return{ isfullscreen: false, //全屏开关 }
js方法:
//全屏设置 togglefullscreen () { if (this.canfullscreen) { if (this.isfullscreen) { // 关闭全屏 this.exitfullscreen() this.isfullscreen = false } else { // 打开全屏 this.requestfullscreen(document.body) this.isfullscreen = true } } else { this.$message.warning({ content: '当前浏览器暂不支持全屏模式,请切换浏览器后重新尝试!', duration: 3 }) } }, requestfullscreen (element) { // 判断各种浏览器,找到正确的方法 const requestmethod = element.requestfullscreen || // w3c element.webkitrequestfullscreen || // chrome, safari element.mozrequestfullscreen || // firefox element.msrequestfullscreen // ie11 if (requestmethod) { requestmethod.call(element) } }, exitfullscreen () { var exitmethod = document.exitfullscreen || // w3c document.mozcancelfullscreen || // firefox document.webkitexitfullscreen || // chrome等 document.msexitfullscreen // ie11 if (exitmethod) { exitmethod.call(document) } }, addfullscreenlistener () { const self = this document.onkeydown = function (e) { if (e && e.keycode === 122) { // 捕捉f11键盘动作 e.preventdefault() // 阻止f11默认动作 self.togglefullscreen() } } // 监听不同浏览器的全屏事件,并件执行相应的代码 switch (self.browserkernel) { case 'webkit': document.onwebkitfullscreenchange = function () { if (document.webkitisfullscreen) { self.isfullscreen = true } else { self.isfullscreen = false } } break case 'gecko': document.onmozfullscreenchange = function () { if (document.mozfullscreen) { self.isfullscreen = true } else { self.isfullscreen = false } } break case 'trident': document.onmsfullscreenchange = function () { if (document.msfullscreenelement) { self.isfullscreen = true } else { self.isfullscreen = false } } break case 'others': document.onfullscreenchange = function () { if (document.fullscreen) { self.isfullscreen = true } else { self.isfullscreen = false } } break default: break } },
优化方案
在页面初始化时判断浏览器是否支持全屏操作
// 检查浏览器是否支持全屏 this.canfullscreen = document.fullscreenenabled || document.webkitfullscreenenabled || document.mozfullscreenenabled || document.msfullscreenenabled if (document.webkitfullscreenenabled) { this.browserkernel = 'webkit' } else if (document.mozfullscreenenabled) { this.browserkernel = 'gecko' } else if (document.msfullscreenenabled) { this.browserkernel = 'trident' } else if (document.fullscreenenabled) { this.browserkernel = 'others' } if (this.canfullscreen) { this.addfullscreenlistener() }
最后在销毁页面时移除监听:
destroyed(){ document.onkeydown = null switch (this.browserkernel) { case 'webkit': document.onwebkitfullscreenchange = null break case 'gecko': document.onmozfullscreenchange = null break case 'trident': document.onmsfullscreenchange = null break case 'others': document.onfullscreenchange = null break default: break } }
如果想换图标可以自动定义 :
也可以用svg 图标引进来:
<i :class="isfullscreen ? 'el-icon-aim':'el-icon-full-screen'" ><i/>
总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持代码网。
发表评论