首页 > 其他分享 >【React】自定义水印方法

【React】自定义水印方法

时间:2023-05-17 13:23:37浏览次数:27  
标签:__ canvas const 自定义 wm ctx 水印 React container

创建水印方法:

const setWaterwark = ({
    // 使用 ES6 的函数默认值方式设置参数的默认取值
    container = document.body,
    width = '250px',
    height = '160px',
    textAlign = 'left',
    textBaseline = 'bottom',
    font = '15px Microsoft Yahei',
    fillStyle = 'rgba(184, 184, 184, 0.4)',
    content = 'loading',
    content2 = 'time',
    rotate = '10',
    zIndex = 1000
} = {}, ...res) => {
    const args = res
    const canvas = document.createElement('canvas')

    canvas.setAttribute('width', width)
    canvas.setAttribute('height', height)
    const ctx = canvas.getContext('2d')

    ctx.textAlign = textAlign
    ctx.textBaseline = textBaseline
    ctx.font = font
    ctx.fillStyle = fillStyle
    ctx.rotate(Math.PI / 180 * rotate)
    // ctx.fillText(content, 30, parseFloat(height) / 2)
    ctx.fillText(content, 35, 15)
    ctx.fillText(content2, 10, 40)
    const base64Url = canvas.toDataURL()
    const __wm = document.querySelector('.__wm')
    const watermarkDiv = __wm || document.createElement('div')
    const styleStr = `
  position:absolute;
  top:0;
  left:0;
  width:100%;
  height:100%;
  z-index:${zIndex};
  pointer-events:none;
  background-repeat:repeat;
  background-image:url('${base64Url}')`

    watermarkDiv.setAttribute('style', styleStr)
    watermarkDiv.classList.add('__wm')

    if (!__wm) {
        container.style.position = 'relative'
        container.insertBefore(watermarkDiv, container.firstChild)
    }

    const MutationObserver = window.MutationObserver || window.WebKitMutationObserver
    if (MutationObserver) {
        let mo = new MutationObserver(function () {
            const __wm = document.querySelector('.__wm')
            console.log(__wm)
            // 只在__wm元素变动才重新调用 __canvasWM
            if ((__wm && __wm.getAttribute('style') !== styleStr) || !__wm) {
                // 避免一直触发
                mo.disconnect()
                mo = null
                setWaterwark(JSON.parse(JSON.stringify(args)))
            }
        })

        mo.observe(container, {
            attributes: true,
            subtree: true,
            childList: true
        })
    }

}

export default setWaterwark

根目录引入:

import setWatermark from '@/utils/waterwark'

<==========================================>

setWatermark({
    content: ' ‘水印内容’',
    container: document.querySelector('#root')
  })

 

标签:__,canvas,const,自定义,wm,ctx,水印,React,container
From: https://www.cnblogs.com/Esai-Z/p/17408448.html

相关文章

  • vue自定义组件——search-box
    github地址:https://github.com/lxmghct/my-vue-components组件介绍props:value/v-model:检索框的值,default:''boxStyle:检索框的样式,default:'position:fixed;top:0px;right:100px;'highlightColor:高亮颜色,default:'rgb(246,186,130)'......
  • 【React+Antd】可编辑表格
    importReact,{useContext,useState,useEffect,useRef}from"react";import{Table,Input,Button,Popconfirm,Form}from"antd";constEditableContext=React.createContext(null);constEditableRow=(props)=>{//编辑表格行let[f......
  • 【React+Antd】 可展开Table
    在antd基础上进行改造,抛弃之前的靠前面+进行展开的方式,在操作列进行点击展开  import{Table}from'antd';importReact,{useState}from'react';import'antd/dist/antd.css';import'./index.css';constAPP=()=>{const[expandedRowKeys,se......
  • 【React】定时器组件
    鼠标移入关闭定时器并清除,鼠标移出组件的时候打开定时器进行循环consttimer=useRef(null);useEffect(()=>{startLoop();},[]);conststartLoop=()=>{stopLoop();timer.current=window.setInterval(()=>{//要干的事},60*......
  • 【Echarts】tooltip自定义提示框
    1组件可直接使用。2tooltip:{3show:true,4trigger:'axis',5confine:true,6padding:0,7borderWidth:0,8backgroundColor:'rgba(1,1,1,0)',9//axisPointer:{10......
  • Linux- 环境变量和自定义配置
    环境变量查看查看当前用户的全部环境变量:env,可以结合env|grep筛选信息查看当前系统的全部环境变量:export查看指定环境变量:printenv$env_name或者echo$env_name清除指定环境变量的值:unset$env_name常用环境变量PATH可执行程序的搜索目录,可执行程序包括Linux......
  • AutoMagic设计思路简介及新增自定义关键字实例
    目录  简介  AutoMagic介绍  SeleniumKey介绍  自定义关键字简介AutoMagic是一个基于WebUI的自动化管理平台。为什么叫AutoMagic呢?因为自动化在执行起来的时候是一个很神奇的事情,它可以无人值守的模拟人的操作,就像魔术(Magic)一样。所以我给她取名叫AutoMagic。Aut......
  • ReactNative 配置路径别名
    1、安装依赖 babel-plugin-module-resolveryarnaddbabel-plugin-module-resolver-D 2、配置babel.config.jsmodule.exports={presets:['module:metro-react-native-babel-preset'],plugins:[['@babel/plugin-proposal-decorators......
  • Newtonsoft.JSON 自定义JsonConverter
    引用:https://www.cjavapy.com/article/2513/https://www.cnblogs.com/weihanli/p/11080531.htmlhttps://www.cnblogs.com/Lulus/p/16968656.htmlhttps://www.cjavapy.com/article/2513/https://www.cnblogs.com/net-sky/p/16563025.htmlpublicclassDecimalConver......
  • mybatis自定义类型转换器
    Mybatis类型转换介绍[url]http://haohaoxuexi.iteye.com/blog/1847854[/url]mybatis提供了对自定义的类型转换器(typeHandler)的支持,因此我们可以自己编写类型转换器来实现这一自动转换的功能。[b][color=red]注意:1.使用的时候,resultMap也select的SQL......