js and vue add watermark

Native js

  • use
<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Strategy for adding watermark in native JS</title>
    <!-- quote watermark -->
    <script src="./js/warterMarkJS.js"></script>
    <style>
    </style>
</head>

<body style="height: 600px">
    <!--Set watermark watermark container -->
    <div class="elementdiv"></div>
    <script>
        //Set watermark name
        watermark('Shuixiangmuyu', "SXMY")
    </script>
</body>

</html>

  • warterMarkJS.js
/*watermark configuration*/
function watermark(firstNode, secondNode) {
    //bind container
    var container = document. getElementsByClassName('elementdiv')
    if (container. length > 0) {
        for (var i = container. length - 1; i >= 0; i--) {
            document.body.removeChild(container[i])
        }
    }

    var elementWidth = document.documentElement.offsetWidth; //Returns the width of the element (including element width, inner margin and border, excluding outer margin)
    var elementHeight = document.documentElement.offsetHeight; //Returns the height of the element (including element height, inner margin and border, excluding outer margin)

    var intervalWidth = 340; //Set the interval width of the watermark
    var intervalheight = 200; //Set the interval height of the watermark

    var crosswise = (elementWidth - 60 - 200) / intervalWidth; //The horizontal number of watermarks
    var lengthways = (elementHeight - 60 - 80) / intervalheight; //The vertical number of watermarks

    //Watermark default configuration
    var watermarkConfiguration = {
        watermarkFont: 'Microsoft Yahei', //watermark font
        watermarkColor: 'red', //watermark font color
        watermarkFontsize: '18px', //watermark font size
        watermarkTransparency: 0.15, //watermark transparency
        watermarkWidth: 230, //watermark width
        watermarkHeight: 100, //watermark length
        watermark_angle: 20 //Watermark tilt degree
    };
    // Create document fragment node (key code)
    var _template = document. createDocumentFragment();
    //Traverse the number of horizontal lines in the outer layer
    for (var i = 0; i < crosswise; i ++ ) {
        //Traverse the inner vertical number
        for (var j = 0; j < lengthways; j ++ ) {

            var xaxis = intervalWidth * i + 26;
            var yaxis = intervalheight * j + 26;

            //Create watermark
            var watermarkDiv = document. createElement('div');

            watermarkDiv.id = 'watermarkDiv' + i + j;
            watermarkDiv.className = 'watermarkDiv';

            ///Node creation
            var spanFirst = document.createElement('div'); //first node
            var spanSecond = document.createElement('div'); //second node
            spanFirst.appendChild(document.createTextNode(firstNode));
            spanSecond.appendChild(document.createTextNode(secondNode));
            watermarkDiv.appendChild(spanFirst);
            watermarkDiv.appendChild(spanSecond);

            /*style configuration*/
            / / Set the watermark div tilt display
            watermarkDiv.style.webkitTransform = "rotate(-" + watermarkConfiguration.watermark_angle + "deg)"; // support for safari browser
            watermarkDiv.style.MozTransform = "rotate(-" + watermarkConfiguration.watermark_angle + "deg)";
            watermarkDiv.style.msTransform = "rotate(-" + watermarkConfiguration.watermark_angle + "deg)";
            watermarkDiv.style.OTransform = "rotate(-" + watermarkConfiguration.watermark_angle + "deg)";
            watermarkDiv.style.transform = "rotate(-" + watermarkConfiguration.watermark_angle + "deg)";
            watermarkDiv.style.opacity = watermarkConfiguration.watermarkTransparency; //watermark transparency
            watermarkDiv.style.fontSize = watermarkConfiguration.watermarkFontsize; //watermark font size
            watermarkDiv.style.fontFamily = watermarkConfiguration.watermarkFont; //watermark font
            watermarkDiv.style.color = watermarkConfiguration.watermarkColor; //watermark color
            watermarkDiv.style.width = watermarkConfiguration.watermarkWidth + 'px'; //watermark width
            watermarkDiv.style.height = watermarkConfiguration.watermarkHeight + 'px'; //watermark height
            watermarkDiv.style.visibility = ""; // invisible but tangible.
            watermarkDiv.style.position = "absolute"; //Watermark absolute positioning
            watermarkDiv.style.left = xaxis + 'px'; //Y axis
            watermarkDiv.style.top = yaxis + 'px'; //X axis
            watermarkDiv.style.overflow = "hidden";
            watermarkDiv.style.zIndex = "9999"; //Set priority
            watermarkDiv.style.pointerEvents = 'none'; //pointer-events:none Let the watermark not prevent interactive events
            watermarkDiv.style.textAlign = "center"; //Horizontally centered
            watermarkDiv.style.display = "block"; //display elements

            _template.appendChild(watermarkDiv); //Move elements from one element to another
        }
    }
    document.body.appendChild(_template);
}

vue.js

  • use
<script>
import Watermark from "./views/advanced/js/warterMarkVUE";
export default {
    //initial loading
  mounted() {
    Watermark.set("Shuixiangmuyu");//Add watermark name
  },
}
</script>

  • warterMarkJS.js
/*watermark configuration*/
// statement
let watermark = {}
//watermark configuration
let setWatermark = (str) => {
    let id = '1.23452384164.123412415'
    // Remove the watermark Judgment
    if (document. getElementById(id) !== null) {
        document.body.removeChild(document.getElementById(id))
    }

    // create canvas
    let createCanvas = document.createElement('canvas')
    // Set the canvas canvas size
    createCanvas.width = 250 //width
    createCanvas.height = 220 //height

    //Create a Context2D object as the context for 2D rendering.
    let Context2D = createCanvas. getContext('2d')
    /*Watermark style adjustment configuration*/
    Context2D.rotate(-20 * Math.PI / 100) // watermark rotation angle
    Context2D.font = '20px Vedana' //Watermark text size
    Context2D.fillStyle = '#fff' // watermark color HEX format, red or rgb format can be used
    Context2D.textAlign = 'center' //Watermark horizontal position
    Context2D.textBaseline = 'Middle' //Watermark vertical position
    Context2D.fillText(str, createCanvas.width / 3, createCanvas.height / 2)

    //Create elements
    let createDiv = document. createElement('div')
    createDiv.id = id
    //Watermark default settings
    createDiv.style.pointerEvents = 'none' //Watermark layer event penetration so that the watermark does not prevent interactive events
    createDiv.style.top = '70px' //Watermark top distance
    createDiv.style.left = '0px' // left distance of watermark
    createDiv.style.opacity = '0.15' // watermark transparency
    createDiv.style.position = 'fixed' //Watermark positioning
    createDiv.style.zIndex = '100000' //The watermark style is displayed first
    createDiv.style.width = document.documentElement.clientWidth - 100 + 'px' //watermark width
    createDiv.style.height = document.documentElement.clientHeight - 100 + 'px' //watermark height
    createDiv.style.background = 'url(' + createCanvas.toDataURL('image/png') + ') left top repeat' //Watermark display (key code)
    document.body.appendChild(createDiv) //Add a node after the last child node of the specified element node
    return id
}

// This method is only allowed to be called once
watermark.set = (str) => {
    let id = setWatermark(str)
    //set the interval
    setInterval(() => {
        if (document. getElementById(id) === null) {
            id = setWatermark(str)
        }
    }, 500)
    // Execute when the size is changed
    window.onresize = () => {
        setWatermark(str)
    }
}

export default watermark