首页 > 其他分享 >VUE实现页面添加水印

VUE实现页面添加水印

时间:2024-09-14 17:51:19浏览次数:3  
标签:style VUE watermark 水印 div document id 页面

在网站开发中,为了防止用户截图或录屏暴露敏感信息,追踪用户来源,需要在网页中添加水印。

方式一:集成watermark组件

1、添加watermark-dom依赖

npm install watermark-dom

2、在AppMain.vue文件引入水印模块 

import watermark from "watermark-dom";

export default {
  name: "AppMain",
  mounted() {
    
    // 加载水印
    setInterval(() => {
        const username = "我的水印";
        const serviceTime = parseTime(new Date());
        const option = {
          watermark_txt: username + serviceTime, //水印的内容
          // watermark_font: '微软雅黑', //水印字体 默认微软雅黑 
          // watermark_color: "#777", //水印字体颜色
          // watermark_fontsize: "18px", //水印字体大小
          // watermark_alpha: 0.1, //水印透明度,要求设置在大于等于0.005 默认0.15
          // watermark_angle: 30, //水印倾斜度数
          // watermark_width: 300, //水印宽度
          // watermark_height: 100, //水印长度
          // watermark_x: 100, //水印起始位置x轴坐标
          // watermark_y: 0, //水印起始位置Y轴坐标
          // watermark_x_space: 100, //水印x轴间隔
          // watermark_y_space: 100, //水印y轴间隔
          // watermark_rows: 4, //水印行数
          // watermark_cols: 8, //水印列数
          // watermark_parent_width:0,      //水印的总体宽度(默认值:body的scrollWidth和clientWidth的较大值)
          // watermark_parent_height:0,     //水印的总体高度(默认值:body的scrollHeight和clientHeight的较大值)
          // watermark_parent_node:null     //水印插件挂载的父元素element,不输入则默认挂在body上
        };
        watermark.load(option);//加载水印
    }, 1000)
    // 缩放水印位置不变
    window.addEventListener('resize', this.loadMark);
  },
  computed: {
    
  },
  beforeDestory(){
    window.removeEventListener('resize', this.loadMark);
  },
};
//移除已加载水印
// watermark.remove();(不生效)
 watermark.load({
   watermark_txt: ' ' ,// 水印的内容 注意:不能是空字符串,必须是空格。
 })

3、访问页面,查看页面水印是否显示

方式二:使用canvas来画水印,防止水印信息被篡改

1、创建watermark.js

	/**  
	 *	水印添加方法  
	*/
  let setWatermark = (str1, str2) => {
    let id = 'watermark_id';
    if (document.getElementById(id) !== null) {
      document.body.removeChild(document.getElementById(id));
    }
    let can = document.createElement('canvas');
    // 设置canvas画布大小
    can.width = 250;
    can.height = 120;
    let cans = can.getContext('2d');
    cans.rotate(-20 * Math.PI / 180); // 水印旋转角度
    cans.font = '15px Vedana';
    cans.fillStyle = '#000000';
    cans.textAlign = 'center';
    cans.textBaseline = 'middle';
    cans.fillText(str1, can.width / 2, can.height) // 水印在画布的位置x,y轴
    cans.fillText(str2, can.width / 2, can.height + 22);
	
    let div = document.createElement('div')
    div.id = id;
    div.style.pointerEvents = 'none';
    div.style.top = '40px';
    div.style.left = '0px';
    div.style.opacity = '0.15';
    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;
  }

  // 添加水印方法
  export const setWaterMark = (str1, str2) => {
    let id = setWatermark(str1, str2);
    if (document.getElementById(id) === null) {
      id = setWatermark(str1, str2);
    }
  }

  // 移除水印方法
  export const removeWatermark = () => {
    let id = 'watermark_id';
    if (document.getElementById(id) !== null) {
      document.body.removeChild(document.getElementById(id))
    }
  }

2、在AppMain.vue文件引入

import { removeWatermark, setWaterMark } from '@/utils/watermark'

export default {
  name: 'AppMain',
  mounted() {
    // 加载水印
    setInterval(() => {
       setWaterMark("我的水印",parseTime(new Date()))
    }, 1000)
  },
  computed: {
    
  },
  beforeDestory(){
    removeWatermark();
  },
}

3、访问页面,查看页面水印是否显示

标签:style,VUE,watermark,水印,div,document,id,页面
From: https://blog.csdn.net/zgs_888/article/details/142210915

相关文章

  • [Vue] computed、watch 和 watchEffect 的区别
    前言当依赖的数据发生改变,computed、watch和watchEffect都会被触发。但是它们之间又有自己的特点,使用场景也不一样。关于computed是什么,以及它和普通函数的区别、运用场景,查看我的另一篇博文:[Vue]computed和普通函数的区别。特性watchwatchEffectcomputed......
  • [Vue] v-once、v-memo 和 key 优化组件性能
    前言key、v-once和v-memo都是Vue提供的用于优化性能的工具,主要目的是减少不必要的渲染和更新操作,从而提升应用的性能。key相关的就不用多说了,[Vue]v-forkey用index会出现什么问题。v-once这个很简单,仅渲染元素和组件一次,并跳过之后的更新。在随后的重新渲染,元素/组......
  • Vue3 结合 Cesium 动态绘制矩形
    相关概念Viewer:newCesium.Viewer (container, options )介绍:用于构建应用程序的基本小部件。它将所有标准Cesium小部件组合到一个可重用的程序包中。Entity:newCesium.Entity ( options )介绍:实体实例将多种形式的可视化聚集到单个高级对象中。可以手动创建它们......
  • SpringBoot+Vue3项目邮箱验证码注册详细教程
    引言该篇文章是以SpringBoot+Vue3技术栈搭建的项目的邮箱注册登录流程,注册用户使用邮箱校验,使用qq邮箱发送验证码,并且把验证码存入Redis以备校验使用的详细介绍干货部分1.在SpringBoot项目的application.yaml文件中配置qq邮箱spring:#mail邮箱mail:#SMTP......
  • vue实现点击任意位置关闭侧滑显示
    需求:点击el-table列表展示侧滑框,再次点击列表中不同数据,刷新侧滑框中数据;点击外部任意位置关闭侧滑框思路:给整个页面加点击事件click,通过target判断点击的外层元素以及点击的位置,执行关闭侧滑框方法代码:mounted中监听click事件mounted(){letdoc=$("#app").get(0);......
  • vue2制作高复用页面
        记录一下页面搭建记录,利用vue2组件化开发的思想。这个页面适合于大部分信息管理系统~。模板固定,每次使用,直接修改表单表格参数,api接口等。     以上图页面为例,一个基础数据信息页面可以分为,分类(左侧),数据信息(右侧),搜索表单(右上),数据表格(右下),新增或编辑表......
  • 零基础快速上手HarmonyOS ArkTS开发5---从简单的页面开始2---使用List组件构建列表、G
    接着继续往下学习页面布局的知识。最近发现之前学习这一章节的内容在官方已经被下了,替换成了另外一个案例了(https://developer.huawei.com/consumer/cn/training/course/slightMooc/C101717497398588123):而且整个视频的风格也不一样了,先看看之前的这个美女讲师:再看看现在的:哇塞,档次......
  • vue2 antv x6 入门 (一)画布、节点、边
    安装#npmnpminstall@antv/x6--save#yarnyarnadd@antv/x6 1.初始化画布<divid="container"></div>import{Graph}from'@antv/x6'constgraph=newGraph({container:document.getElementById('container'......
  • Vue3中组件通信的几种方式
    Vue3组件通信和Vue2的区别:移出事件总线,使用mitt代替。vuex换成了pinia。把.sync优化到了v-model里面了。把$listeners所有的东西,合并到$attrs中了。$children被砍掉了。【1】props概述:props是使用频率最高的一种通信方式,常用与:父↔子。若父传子:属性值是非函数。若子传父:属性......
  • Vue3中Pinia存储和修改数据应用实践
    安装pinia:npminstallpiniamain.ts中使用pinia://引入createApp用于创建应用import{createApp}from'vue'//引入App根组件importAppfrom'./App.vue'//引入路由器importrouterfrom'./router'//创建一个应用constapp=createApp(App)//使用路由器app.use......