waterMarker.ts 1.4 KB

123456789101112131415161718192021222324252627282930313233343536
  1. /*
  2. 需求:给整个页面添加背景水印。
  3. 思路:
  4. 1、使用 canvas 特性生成 base64 格式的图片文件,设置其字体大小,颜色等。
  5. 2、将其设置为背景图片,从而实现页面或组件水印效果
  6. 使用:设置水印文案,颜色,字体大小即可
  7. <div v-waterMarker="{text:'版权所有',textColor:'rgba(180, 180, 180, 0.4)'}"></div>
  8. */
  9. import type { Directive, DirectiveBinding } from "vue";
  10. const addWaterMarker: Directive = (str: string, parentNode: any, font: any, textColor: string) => {
  11. // 水印文字,父元素,字体,文字颜色
  12. let can: HTMLCanvasElement = document.createElement("canvas");
  13. parentNode.appendChild(can);
  14. can.width = 205;
  15. can.height = 140;
  16. can.style.display = "none";
  17. let cans = can.getContext("2d") as CanvasRenderingContext2D;
  18. cans.rotate((-20 * Math.PI) / 180);
  19. cans.font = font || "16px Microsoft JhengHei";
  20. cans.fillStyle = textColor || "rgba(180, 180, 180, 0.3)";
  21. cans.textAlign = "left";
  22. cans.textBaseline = "Middle" as CanvasTextBaseline;
  23. cans.fillText(str, can.width / 10, can.height / 2);
  24. parentNode.style.backgroundImage = "url(" + can.toDataURL("image/png") + ")";
  25. };
  26. const waterMarker = {
  27. mounted(el: DirectiveBinding, binding: DirectiveBinding) {
  28. addWaterMarker(binding.value.text, el, binding.value.font, binding.value.textColor);
  29. }
  30. };
  31. export default waterMarker;