前端vue2 全局水印效果

这篇具有很好参考价值的文章主要介绍了前端vue2 全局水印效果。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

最近写项目遇到一个需求,全局显示水印,不管在哪个路由都要显示。

想要实现的效果:

前端vue2 全局水印效果,前端

新建shuiyin.js文件

// 定义水印函数
const addWatermark = ({
  container = document.body, // 水印添加到的容器,默认为 body
  width = "200px", // 水印 canvas 的宽度
  height = "100px", // 水印 canvas 的高度
  textAlign = "center", // 水印文字的对齐方式
  textBaseline = "middle", // 水印文字的基线
  font = "16px Microsoft Yahei", // 水印文字的字体
  fillStyle = "rgba(184, 184, 184, 0.6)", // 水印文字的填充样式
  content = "我是水印", // 水印文字的内容
  rotate = -30, // 水印文字的旋转角度
  zIndex = 10000, // 水印的 z-index 值
}) => {
  // 生成水印 canvas
  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, parseFloat(width) / 2, parseFloat(height) / 1);

  // 将 canvas 转换为 base64 URL
  const base64Url = canvas.toDataURL("image/png");
  console.log(base64Url);
  const __wm = document.querySelector(".__wm");
  const watermarkDiv = __wm || document.createElement("div");
  const styleStr = `
              position: fixed;
              top: 0;
              left: 0;
              bottom: 0;
              right: 0;
              width: 100%;
              height: 100%;
              z-index: ${zIndex};
              pointer-events: none;
              background: url('${base64Url}') left top repeat;
          `;
  watermarkDiv.setAttribute("style", styleStr);
  watermarkDiv.classList.add("__wm");
  // 则创建一个 div 并设置样式和类名

  if (!__wm) {
    container.style.position = "relative";
    container.insertBefore(watermarkDiv, container.firstChild);
  }
  // 监听容器变化,当容器发生变化时重新调用 addWatermark 函数
  const { MutationObserver } = window;
  if (MutationObserver) {
    let mo = new MutationObserver(function () {
      const __wm = document.querySelector(".__wm");
      // 只在__wm元素变动才重新调用__canvasWM
      if ((__wm && __wm.getAttribute("style") !== styleStr) || !__wm) {
        // 避免一直触发
        mo.disconnect();
        mo = new MutationObserver(() => {});

        addWatermark({
          container: document.getElementById("app"),
          width: "200px",
          height: "100px",
          textAlign: "center",
          textBaseline: "middle",
          font: "16px Microsoft Yahei",
          fillStyle: "rgba(184, 184, 184, 0.3 )",
          content,
          rotate: -30,
          zIndex: 10000,
        });
      }
    });

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

export default addWatermark;

main.js中全局注册文章来源地址https://www.toymoban.com/news/detail-609007.html

import addWatermark from "@/utils/shuiyin";
Vue.use(addWatermark);

到了这里,关于前端vue2 全局水印效果的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • vscode vue2 + volar 全局代码提示

    这几天更新vscode vetur的后  项目一直转loading加载不出来了,索性就直接换volar了。 一、基础配置 但是volar的配置在vue3和vue2里是不太一样的   需要一些额外的配置。记录一下踩坑。 首先vscode安装扩展 Vue Language Features (Volar) 、 TypeScript Vue Plugin (Volar)  并且卸载或者禁用掉原

    2024年02月16日
    浏览(31)
  • uniapp引入全局js,vue2/vue3不同方式引入

    Hi I’m Shendi uniapp引入全局js,vue2/vue3不同方式引入 最近写小程序,个人开发,选用了 uni-app 进行开发 选用的 vue3 版本 因为我用的 vue3 版本,在这里踩了没学过vue3的坑,用vue2引入全局js的方式使用,导致undefined… Vue2 版引入全局js的方法如下 将js放到项目内,一般放到自建的

    2024年02月03日
    浏览(30)
  • Github 用户查询案例【基于Vue2全局事件总线通信】

            本次案例是一个基于 Vue2 的全局事件总线通信的仿 Github 用户搜索模块,使用的接口是 Github 官方提供的搜索接口: https://api.github.com/search/users?q=xxx(发送请求时需要将输入的用户名称绑定替换掉xxx),如果对全局事件总线不太熟练的小伙伴可以看这篇文章: http:/

    2024年02月03日
    浏览(40)
  • Vue2封装一个全局通知组件并发布到NPM

    ✍🏼作者:周棋洛,计算机学生 ♉星座:金牛座 🏠主页:点击查看更多 🌐关键: vue2 组件封装 npm发包 你好!我是王子周棋洛,好久没写文了。 今天带大家 封装 一个类似 element-ui 的全局通知组件,并发布到 npm 后安装使用自己封装的组件。go,go,go🎉 原因1:现成UI组件

    2024年02月09日
    浏览(38)
  • 前端vue实现页面加水印文字 单个页面所有页面加水印 水印颜色

    前端vue实现页面加水印文字, 可以实现系统所有页面加水印,也可以单个页面加水印, 可更改水印颜色,  阅读全文下载完整代码请关注微信公众号: 前端组件开发 效果图如下:       #### 使用方法 ```使用方法 /* 给系统所有页面加水印*/ // 第一个参数:水印文字  第二个参数: 加

    2024年02月08日
    浏览(49)
  • 【vue2】element ui input全局默认去除前后空格

    全局去除复制文本的空格 页面组件:v-model加上.trim,可以去除输入的空格 element ui — el-input 去除输入value值的空格,最好是双管齐下

    2024年02月03日
    浏览(31)
  • 【VUE】前端实现防篡改的水印

    图片加水印的操作一般是由后端来完成,有些站点保护的知识产权的类型可能比较多,不仅仅是图片,可能还有视频、文字等等,对于不同类型的对象添加水印后端操作比较复杂,所有有些站点逐步的让前端去进行水印添加的操作。 如果用 React 框架来进行开发就比较简单,

    2024年02月14日
    浏览(28)
  • Vue2 - 延迟加载(requestAnimationFrame实现)+ 效果展示

    当一个页面需要加载较多个组件时,并且组件自身又比较复杂。如果一次性加载,可能等待时间较长,体验不好。 一种解决办法:分批次的来渲染子组件。 通过 requestAnimationFrame(callback) 实现,同时能够控制 按照指定顺序来渲染 。 简单理解为:浏览器会按照一定的频率来重

    2024年01月25日
    浏览(28)
  • vue 纯前端预览pdf,纯前端实现pdf加水印下载文件也带水印,防止pdf下载

      原理:主要是利用pdfh5这个插件来完成的   使用方法:   1.页面需要有一个容器例子:div id=\\\"demo\\\"/div   2.下载pdfh5插件 npm install pdfh5   (注意:webpack5之后不会下载polyfill 需要手动下载 所以引入pdfh5的时候会报错)   解决方案:下载 node-polyfill-webpack-plugin npm install node-polyfill-

    2024年04月15日
    浏览(43)
  • svg之全局组件,配合雪碧图解决vue2的svg优化问题

    这里是vue2中的svg的完整解决方案的另一篇。 这里这个就是全局的svg组件,代码来自于webpack - 懒人神器:svg-sprite-loader实现自己的Icon组件 - 好好写代码吧 - SegmentFault 思否 老师的代码则是写成 这样的形式。其实和上面一个意思

    2024年02月19日
    浏览(35)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包