zoukankan      html  css  js  c++  java
  • react 页面统一添加可换行水印

    1.组件

    const watermark = ({
      // 使用 ES6 的函数默认值方式设置参数的默认取值
      container = document.body,
      width = '250px',
      height = '160px',
      textAlign = 'left',
      textBaseline = 'bottom',
      font = '20px 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;
    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
    watermark(JSON.parse(JSON.stringify(args)))
    }
    })
    
    mo.observe(container, {
    attributes: true,
    subtree: true,
    childList: true
    })
    }
    
    }
    
    export default watermark
    

    2.入口文件引入

    import watermark from './utils/watermark'
    
    
    watermark({
      content: ‘水印内容’,
      container: document.querySelector('#root')
    })
    

      

  • 相关阅读:
    [Leetcode] Regular Expression Matching
    [Leetcode] Edit Distance
    计算机科学论文写作3-表、图、例子和其他类似的元素的使用
    计算机科学论文写作2-搜寻、阅读和引用文献
    灰度图与彩图的双边滤波
    opencv6.1-imgproc图像处理模块之平滑与形态学操作
    opencv5-objdetect之级联分类器
    opencv4-highgui之视频的输入和输出以及滚动条
    计算机科学论文写作1-引言
    lecture11-hopfiled网络与玻尔兹曼机
  • 原文地址:https://www.cnblogs.com/feng3037/p/14028780.html
Copyright © 2011-2022 走看看