vue 使用screenfull 实现全屏展示,全局水印实现, 以及全屏放大后部分组件无法使用,水印无法全屏显示问题的解决
创始人
2024-01-28 23:49:18
0

需求:1. web项目中看板页面需要单独全屏显示 2. 项目全局增加水印,水印文字为当前用户登录姓名,登录页不显示水印

出现问题描述

  • 单页面进行全屏显示,下拉,时间选择器,抽屉等组件被 全屏覆盖到下一层,无法显示在全屏后页面的上一层
  • 单页面进行全屏展示,放大全屏后,水印消失

一、页面全屏展示

1. 下载screenfull

npm install screenfull@4.2.0 --save

直接使用 npm install screenfull --save 会报错,不支持最新版本

2. 页面引入组件,并使用

3. 全屏后相关组件无法使用,被覆盖问题解决

问题1 : 抽屉组件无法在全屏后展示,被覆盖

解决: 将抽屉组件添加进q需要全屏的div,修改methods

在这里插入图片描述

   methods:{fullScreenButton() { if(screenfull.enabled) { this.$refs.scrollBox.appendChild(document.getElementById("drawerId"))    let elementById = document.getElementById('embedContainer');screenfull.toggle(elementById)}}}

问题2 : 下拉组件无法在全屏后展示,被覆盖

解决: 加上 :popper-append-to-body=“false”

 

加上 :popper-append-to-body=“false” 后 el-select 下拉文字会肯会出现没有对齐情况

加上 popper-class=“select-popper”

在这里插入图片描述

>>> .select-popper {.el-select-dropdown__item{text-align: left;}}

问题3 : 级联选择器组件无法在全屏后展示,被覆盖

解决:加上 :append-to-body=“false”

         

问题4 : 时间选择器组件无法在全屏后展示,被覆盖

解决: 加上 :append-to-body=“false”

     

二. 项目全局添加水印 (水印文字为当前用户登录姓名)

1. 新建 waterMark.js 文件

//waterMark.js文件let watermark = {}let setWatermark = (str) => {let id = '1.23452384164.123412416';if (document.getElementById(id) !== null) {document.body.removeChild(document.getElementById(id));}//创建一个画布let can = document.createElement('canvas');//设置画布的长宽can.width = 120;can.height = 120;let cans = can.getContext('2d');//旋转角度cans.rotate(-15 * Math.PI / 180);cans.font = '18px Vedana';//设置填充绘画的颜色、渐变或者模式cans.fillStyle = 'rgba(200, 200, 200, 0.40)';//设置文本内容的当前对齐方式cans.textAlign = 'left';//设置在绘制文本时使用的当前文本基线cans.textBaseline = 'Middle';//在画布上绘制填色的文本(输出的文本,开始绘制文本的X坐标位置,开始绘制文本的Y坐标位置)cans.fillText(str, can.width / 8, can.height / 2);let div = document.createElement('div');div.id = id;div.style.pointerEvents = 'none';div.style.top = '30px';div.style.left = '0px';div.style.position = 'fixed';div.style.zIndex = '100000';div.style.width = document.documentElement.clientWidth + 'px';div.style.height = document.documentElement.clientHeight + 'px';div.style.background = 'url(' + can.toDataURL('image/png') + ') left top repeat';document.body.appendChild(div);return id;
}// 该方法只允许调用一次
watermark.set = (str) => {let id = setWatermark(str);setInterval(() => {if (document.getElementById(id) === null) {id = setWatermark(str);}}, 500);window.onresize = () => {setWatermark(str);};
}export default watermark;

2. 在 main.js 中引入

import watermark from ".utils/watermark"   //去除登录页面
router.afterEach((item) =>{ 
//如果不为登录界面,显示水印if (item.name !=='login') { //获取存储store中的数据watermark.set(store.state.name)}
})

3. store 数据存储

以当前(水印为当前登录用户姓名)场景为例,用户登录成功将用户姓名存储进store

  • store 下 index.js文件 添加相关信息
 state:{name:''},mutations:{SET_USER(state,name){state.name=name}},actions: {SET_USER(context,name) {context.commit("SET_USER",name)}}
  • login.vue 用户登录成功后进行存储操作
   this.$store.dispatch("SET_USER", res.data.data.userInfo.name)
  • 解决刷新页面后,store数据消失问题,在App.vue全局监听,刷新前先将数据存储sessionStorage,刷新后数据恢复store
created () {if (sessionStorage.getItem('user')) {this.$store.dispatch("SET_USER",sessionStorage.getItem('user'))}window.addEventListener('beforeunload',()=>{sessionStorage.setItem('user',this.$store.state.name)})
}

4. 点击登出到登录界面,水印依然存在的问题

登出方法中,将水印文字设置为空就好

import watermark from ".utils/watermark"  //登出方法handleLoginout() {this.$cookie.set("token", '');//水印设置为空watermark.set("")this.$router.push('/')}

5. 全屏显示时,全屏的页面水印消失问题

  • 在全屏按钮方法中重新绘制一个水印画布

5. 解决点击全屏,取消全屏(反复操作)水印文字慢慢变深问题

监听是否全屏,未全屏,移除水印节点

mounted() {window.onresize = () => {if (!screenfull.isFullscreen) {let elementById = document.getElementById("water");elementById.parentNode.removeChild(elementById)}}
}

相关内容

热门资讯

一封信的作文450字 一封信的作文450字(通用35篇)  无论在学习、工作或是生活中,大家都跟作文打过交道吧,作文是通过...
开学计划作文 开学计划作文(集锦15篇)  人生天地之间,若白驹过隙,忽然而已,我们的工作又进入新的阶段,为了在工...
游西湖 游西湖今天,我看到了真正的西湖。西湖真的很美!     如课文所说,西湖的南北西三面只有山峦,没有碧...
除夕的作文400字 【实用】除夕的作文400字三篇  在日常生活或是工作学习中,说到作文,大家肯定都不陌生吧,作文根据写...
借书作文 借书作文借书《作文:借书》一个星期五的晚上,老师给我们留了一个作业,让我们寻找一些关于雷锋生前的资料...
生活处处是课堂作文 生活处处是课堂作文(精选54篇)  在日常学习、工作抑或是生活中,大家都接触过作文吧,作文是从内部言...
人间真情作文600字 人间真情作文600字(通用24篇)  在日常学习、工作和生活中,大家都不可避免地会接触到作文吧,通过...
满分作文 满分作文(精选23篇)  在我们平凡的日常里,大家都接触过作文吧,作文是一种言语活动,具有高度的综合...
莎士比亚的失误的历史典故 莎士比亚的失误的历史典故  莎士比亚可以说是世界最为著名的大文豪,人们称其为语言大师、文学巨匠。他的...
美丽的地球作文 美丽的地球作文  我们生活在美丽的地球,地球是人类的大家园。太阳和月亮是地球的好朋友。下面是美丽的地...
一片叶子 一片叶子一片叶子1  一片落叶,从前长在一棵树上。它是一片叶子,一片弱小的叶子,风一吹,好怕一不小心...
描写风景的作文150字 描写风景的作文150字  风景是由光对物的反映所显露出来的一种景象。犹言风光或景物、景色等,含义至为...
一闪而逝的流星作文 -小学生...   漆黑的夜空中,一颗流星一闪而逝,一闪而逝的流星作文。灯光下,一个十三岁的少女正对着一张照片发呆。...
做实验的作文 做实验的作文(通用25篇)  在日常学习、工作或生活中,大家都尝试过写作文吧,作文是人们以书面形式表...
意味深长的赛场作文 -小学生... 意味深长的赛场我是一个篮球迷,每个周日上午8:10,我家的电视准时来到cctv5,那里有我最喜欢看的...
扭秧歌作文 扭秧歌作文  在平时的学习、工作或生活中,大家都有写作文的经历,对作文很是熟悉吧,根据写作命题的特点...
以假期的红与黑为题的作文   假期的红与黑  有人说,人生是一部大书。那么,假期就一定是这部书中最快乐、精彩的一章,可是假期中...
微微一笑作文 微微一笑作文  在日常的学习、工作、生活中,大家都写过作文吧,通过作文可以把我们那些零零散散的思想,...
成长足迹作文400字 成长足迹作文400字开精美的相册,美好的童年往事真叫人流连忘返。瞧!这张是我四岁生日时的情形。头顶着...
写父亲像大树作文 写父亲像大树作文范文  在我们平凡的日常里,许多人都有过写作文的经历,对作文都不陌生吧,借助作文人们...