IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> JavaScript知识库 -> VUE页面添加水印 -> 正文阅读

[JavaScript知识库]VUE页面添加水印

let watermark = {};
let setWatermark = (text, sourceBody) => {
    let id = 'watermark_fjq_' + parseInt(Math.random() * 100000);
    if (document.getElementById(id) !== null) {
        document.body.removeChild(document.getElementById(id));
    }
    //水印图片
    let can = document.createElement('canvas');
    can.width = 373;// 单个水印大小
    can.height = 320;// 单个水印大小
    let cans = can.getContext('2d');
    cans.rotate(-20 * Math.PI / 180);
    cans.font = '14px Vedana';
    cans.fillStyle = '#DCDCDC';//水印颜色
    cans.textAlign = 'left';
    cans.textBaseline = 'Middle';
    cans.fillText(text, can.width / 20, can.height);//水印在画布的位置
    //设置插入div样式
    let water_div = document.createElement('div');
    water_div.id = id;
    water_div.style.pointerEvents = 'none';//水印层事件穿透 让水印不阻止交互事件
    water_div.style.overflow = 'hidden';
    water_div.style.background = 'url(' + can.toDataURL('image/png') + ') left top repeat';
    if (sourceBody) {
        sourceBody.style.position = 'relative';
        water_div.style.width = '100%';
        water_div.style.height = '100%';
        water_div.style.position = 'absolute';
        water_div.style.top = '0';
        water_div.style.left = '0';
        sourceBody.appendChild(water_div);
    } else {
        water_div.style.top = '3px';
        water_div.style.left = '0px';
        water_div.style.position = 'fixed';
        water_div.style.zIndex = '0';
        water_div.style.width = document.documentElement.clientWidth + 'px';
        water_div.style.height = document.documentElement.clientHeight + 'px';
        document.body.appendChild(water_div);
    }
    return id;
}

/**
 *  该方法只允许调用一次
 *  @param:
 *  @text == 水印内容
 *  @sourceBody == 水印添加在哪里,不传就是body
 * */
watermark.set = (text, sourceBody) => {
    setTimeout(() => {
        setWatermark(text, sourceBody);
    }, 1000);//延迟加载
}

export default watermark;

水印原理:前端水印的实现原理主要是利用canvas标签的一些属性,把水印图片作为div的背景图片

创建canvas元素
给canvas绘制文本,填充样式旋转角度、文字字体颜色等
将绘制好的canvas元素转换成base64格式的图片
动态创建一个div标签,相对位置属性为fixed,宽高设置为屏幕的可见大小,将上一步canvas转换的图片设置为div的背景图片并平铺满整个内部
最后将动态创建的div添加到body中sourceBody是添加的位置

注意点

好不容易在画布中绘制出酷炫的图形,应该把它保存起来吧。但不幸的是,画布中的这些图形本身不是真正的图片,不能直接保存。不幸中的万幸,Canvas API提供了toDataURL()方法,可以把画布中的图形转换为图片,

默认情况下,toDataURL()方法把图形转变成base64编码格式的png,然后返回Data URL数据。可以给toDataURL()传入MIME类型的参数,将画布转变成其它格式的图片。

有了Data URL数据后,就可将这些数据直接填充到<img>元素里,或者直接从浏览器里下载它们。这里通过一个实例,来说明如何使用toDataURL()方法,把整个画布保存为图片

局部页面使用:把warterMarkVUE.js文件引用到单页面内即可使用

全局使用:在App.vue中引用,

import watermark from "./warterMarkVUE";
mounted() {
    this.staffName =
      JSON.parse(sessionStorage.getItem("userInfo")) &&
      JSON.parse(sessionStorage.getItem("userInfo")).staffName
        ? JSON.parse(sessionStorage.getItem("userInfo")).staffName
        : "";
    this.staffCode =
      JSON.parse(sessionStorage.getItem("userInfo")) &&
      JSON.parse(sessionStorage.getItem("userInfo")).staffCode
        ? JSON.parse(sessionStorage.getItem("userInfo")).staffCode
        : "";
    var timer = this.dateFormat(new Date(), "yyyy-MM-dd hh:mm:ss");
    if (
      JSON.parse(sessionStorage.getItem("userInfo")) &&
      JSON.parse(sessionStorage.getItem("userInfo")).staffName
    ) {
      watermark.set(this.staffCode + " " + this.staffName + " " + timer); //设置水印名称
    }
  },

前端添加水印效果攻略【vue和原生js添加方式】_水香木鱼的博客-CSDN博客_前端页面使用js水印功能
vue实现为页面加水印 - 范斯 - 博客园
前端添加水印效果攻略【vue和原生js添加方式】_水香木鱼的博客-CSDN博客_前端页面使用js水印功能
前端页面添加水印_泡泡大怪兽的博客-CSDN博客_网页增加水印
vue实现给页面添加水印_前端搬砖王妹妹的博客-CSDN博客_vue页面添加水印
vue全局加水印(除登录页面)_陈噜啦的博客-CSDN博客_vue 加水印
?

  JavaScript知识库 最新文章
ES6的相关知识点
react 函数式组件 & react其他一些总结
Vue基础超详细
前端JS也可以连点成线(Vue中运用 AntVG6)
Vue事件处理的基本使用
Vue后台项目的记录 (一)
前后端分离vue跨域,devServer配置proxy代理
TypeScript
初识vuex
vue项目安装包指令收集
上一篇文章      下一篇文章      查看所有文章
加:2022-09-04 01:02:48  更:2022-09-04 01:04:19 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/23 10:42:25-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码