美文网首页WEB前端笔记本
几行代码搞定vue项目中的水印功能

几行代码搞定vue项目中的水印功能

作者: 流泪手心_521 | 来源:发表于2021-01-11 16:53 被阅读0次

给项目加水印是一个极其普遍的需求,下面就分2种方法用几行代码搞定!

方法一:非canvas实现

公共的js
可以在那个页面中用就在那个页面中引入

/**
     * @description: createWaterMark.js 加水印功能
     */
    let waterMarkDOM;

    let clearWaterMark = () => {
        if (waterMarkDOM) waterMarkDOM.remove();
    };
    /**
     * @description: 创建水印
     * @param {String} contentText 水印内容
     */
    export default function createWaterMark(waterMarkName) {
    clearWaterMark();
    if (!waterMarkName) {
        return;
    }
    let width = window.parseInt(document.body.clientWidth);
    let canvasWidth = width / window.parseInt(width / 320);
    let fontFamily = window.getComputedStyle(document.body)['font-family'];
    const fragment = document.createDocumentFragment();
    waterMarkDOM = document.createElement('div');
    waterMarkDOM.className = 'water-mark-wrap';
    let spanStr = '';
    for (let i = 0; i < 100; i++) {
        spanStr += `<span class="water-word" style=width:${canvasWidth}px;height:200px;font: ${fontFamily}>${waterMarkName}</span>`;
    }
    waterMarkDOM.innerHTML = spanStr;
    fragment.appendChild(waterMarkDOM);
    document.body.appendChild(fragment);
}

在App.vue文件中加上相关样式并且调用就大功告成啦,或者那个页面中引入

import WaterMark from '文件路径/waterMark.js';
    .....
    mounted() {
        WaterMark('这是水印');
    }
    <style>
    .water-mark-wrap {
        position: absolute;
        width: 100%;
        height: 100%;
        z-index: 9999;
        pointer-events: none;
        top: 0;
        left: 0;
        display: flex;
        overflow: hidden;
        flex-wrap: wrap;
    }
    .water-word {
        display: flex;
        align-items: center;
        justify-content: center;
        font-size: 18px;
        color: rgba(8, 8, 8, 0.1);
        transform: rotate(-45deg);
        user-select: none;
    }
    </style>

方法二:使用canvas

let style;
let clearWaterMark = () => {
    if (style) style.remove();
};
export default function createWaterMark(userName) {
    clearWaterMark();
    if (!userName) {
        return;
    }
    let width = window.parseInt(document.body.clientWidth);
    let canvasWidth = width / window.parseInt(width / 320);
    let fontFamily = window.getComputedStyle(document.body)["font-family"];
    let canvas = document.createElement("canvas");
    canvas.width = canvasWidth;
    canvas.height = 200;
    let ctx = canvas.getContext("2d");
    ctx.rotate((-20 * Math.PI) / 180);
    ctx.font = `18px ${fontFamily}`;
    ctx.fillStyle = "rgba(8,8,8,.1)";
    ctx.fillText(userName, 50, 200);
    let imgSrc = canvas.toDataURL("image/png");
    style = document.createElement("style");
    style.innerHTML = `.with-watermark:before{
        content: "";
        width: 100%;
        height: 100%;
        display: block;
        position: absolute;
        z-index: -1;
        background-image: url("${imgSrc}");
    }`;
    (document.head.append || document.head.appendChild).apply(document.head, [style]);
}

调用,在App.vue中,引入文件,并加上类名: with-watermark,然后调用方法传入水印显示的内容即可

<template>
    <div id="app" class="with-watermark"></div>
</template>

import WaterMark from '文件路径/waterMark.js';

mounted() {
   waterMark("这是水印");
}

相关文章

  • 几行代码搞定vue项目中的水印功能

    给项目加水印是一个极其普遍的需求,下面就分2种方法用几行代码搞定! 方法一:非canvas实现 公共的js可以在那...

  • DEBUG和RELEASE要分开,RELEASE时log打印要取

    方法一:简单直接,用几行代码搞定,简洁但功能少 #ifdef DEBUG #define NSLog(...) N...

  • Android 上传图片添加水印功能

    近期项目中有给上传的图片添加水印功能,如下图所示 水印图片如下 项目中用到的是的水印覆盖到全部图片的效果,对水印图...

  • iOS开发常用小功能

    小功能简介 iOS中的很多小功能都是非常简单的,几行代码就搞定了,比如打电话、打开网址、发邮件、发短信等 应用评分...

  • Vue中通过highlight.js实现代码高亮

    项目中,我们经常会有代码高亮的需求!那么,在Vue项目中,如实实现代码高亮功能呢?highlight.js是非常不...

  • 清除程序缓存

    最近项目中用到了一个功能,叫做清除缓存,老规矩,代码分享给大家 OK,搞定

  • iOS如何给图片加水印

    想要给图片加水印其实很简单.只需要如下代码便可轻松搞定。 /**iOS图片加水印 @param useImage ...

  • 几行代码搞定设置界面

    军哥用了好长时间给大家写了一个设置界面,目前还是1.0版本,只有基本功能,后面会上新功能,废话不多说先来看效果gi...

  • 控件基础应用

    Android 5.0以上系统常用控件着色指南 通用PopupWindow,几行代码搞定PopupWindow弹窗

  • Vue中使用keep-alive导致mounted和before

    最近在 Vue 项目中给页面加水印,发现了一个比较奇怪的现象,有的页面水印颜色深,有的页面水印颜色浅,特别是在主题...

网友评论

    本文标题:几行代码搞定vue项目中的水印功能

    本文链接:https://www.haomeiwen.com/subject/auvdaktx.html