This repository has been archived on 2025-09-14. You can view files and clone it, but cannot push or open issues or pull requests.
Files
handingkang-ohmyweb/static/useWatermark-64ce7126.js
2023-09-01 03:54:57 +00:00

2 lines
2.4 KiB
JavaScript

import{n as c}from"./element-4018b73c.js";import{r as z,z as x}from"./vue-2207505e.js";const R={defense:!0,color:"#c0c4cc",opacity:.5,size:16,family:"serif",angle:-20,width:300,height:200},W=z(document.body);function $(i=W){let u,d,r=null;const t={watermarkElMutationObserver:void 0,parentElMutationObserver:void 0,parentElResizeObserver:void 0},O=(e,a={})=>{if(!i.value){console.warn("请在 DOM 挂载完成后再调用 setWatermark 方法设置水印");return}u=e,d={...R,...a},f(),d.defense?m(i.value):p()},f=()=>{if(r){v();return}const e=document.createElement("div");e.style.pointerEvents="none",e.style.top="0",e.style.left="0",e.style.position="absolute",e.style.zIndex="99999",r=e;const{clientWidth:a,clientHeight:s}=i.value;v({width:a,height:s}),i.value.style.position="relative",i.value.appendChild(e)},v=(e={})=>{r&&(u&&(r.style.background=`url(${k()}) left top repeat`),e.width&&(r.style.width=`${e.width}px`),e.height&&(r.style.height=`${e.height}px`))},k=()=>{const{color:e,opacity:a,size:s,family:n,angle:h,width:g,height:E}=d,l=document.createElement("canvas");l.width=g,l.height=E;const o=l.getContext("2d");return o&&(o.fillStyle=e,o.globalAlpha=a,o.font=`${s}px ${n}`,o.rotate(Math.PI/180*h),o.fillText(u,0,E/2)),l.toDataURL()},b=()=>{!i.value||!r||(p(),i.value.removeChild(r),r=null)},w=c(()=>{b(),f(),m(i.value)},100),m=e=>{t.watermarkElMutationObserver||t.parentElMutationObserver||t.parentElResizeObserver||(y(e),M(e))},p=()=>{var e,a,s;(e=t.watermarkElMutationObserver)==null||e.disconnect(),t.watermarkElMutationObserver=void 0,(a=t.parentElMutationObserver)==null||a.disconnect(),t.parentElMutationObserver=void 0,(s=t.parentElResizeObserver)==null||s.disconnect(),t.parentElResizeObserver=void 0},y=e=>{const a=c(s=>{s.forEach(c(n=>{switch(n.type){case"attributes":n.target===r&&w();break;case"childList":n.removedNodes.forEach(h=>{h===r&&e.appendChild(r)});break}},100))},100);t.watermarkElMutationObserver=new MutationObserver(a),t.parentElMutationObserver=new MutationObserver(a),t.watermarkElMutationObserver.observe(r,{attributes:!0,childList:!1,subtree:!1}),t.parentElMutationObserver.observe(e,{attributes:!1,childList:!0,subtree:!1})},M=e=>{const a=c(()=>{const{clientWidth:s,clientHeight:n}=e;v({width:s,height:n})},500);t.parentElResizeObserver=new ResizeObserver(a),t.parentElResizeObserver.observe(e)};return x(()=>{b()}),{setWatermark:O,clearWatermark:b}}export{$ as u};