美文网首页
js实现水印效果

js实现水印效果

作者: 北上广_d8bd | 来源:发表于2020-11-19 16:09 被阅读0次

首先预览一下成品效果

preview.png

接下来 贴代码 直接cv大法即可使用

export function watermark(settings) {
  //默认设置
  let defaultSettings={
  watermark_txt:"text",
  watermark_x:20,//水印起始位置x轴坐标
  watermark_y:20,//水印起始位置Y轴坐标
  watermark_rows:10,//水印行数
  watermark_cols:20,//水印列数
  watermark_x_space:100,//水印x轴间隔
  watermark_y_space:50,//水印y轴间隔
  watermark_color:'#aaa',//水印字体颜色
  watermark_alpha:0.4,//水印透明度
  watermark_fontsize:'20px',//水印字体大小
  watermark_font:'微软雅黑',//水印字体
  watermark_width:210,//水印宽度
  watermark_height:80,//水印长度
  watermark_angle:15//水印倾斜度数
  };
  Object.assign(defaultSettings, settings);
  let oTemp = document.createDocumentFragment();
  //获取页面最大宽度
  let p_width = Math.max(document.body.scrollWidth,document.body.clientWidth);
  let cutWidth = p_width*0.0150;
  let page_width=p_width-cutWidth;
  //获取页面最大高度
  let page_height = Math.max(document.body.scrollHeight,document.body.clientHeight)+450;
  // let page_height = document.body.scrollHeight+document.body.scrollTop;
  //如果将水印列数设置为0,或水印列数设置过大,超过页面最大宽度,则重新计算水印列数和水印x轴间隔
  if (defaultSettings.watermark_cols === 0 || (parseInt(defaultSettings.watermark_x + defaultSettings.watermark_width *defaultSettings.watermark_cols + defaultSettings.watermark_x_space * (defaultSettings.watermark_cols - 1)) > page_width)) {
  defaultSettings.watermark_cols = parseInt((page_width-defaultSettings.watermark_x+defaultSettings.watermark_x_space) / (defaultSettings.watermark_width + defaultSettings.watermark_x_space));
  defaultSettings.watermark_x_space = parseInt((page_width - defaultSettings.watermark_x - defaultSettings.watermark_width * defaultSettings.watermark_cols) / (defaultSettings.watermark_cols - 1));
  }
  //如果将水印行数设置为0,或水印行数设置过大,超过页面最大长度,则重新计算水印行数和水印y轴间隔
  if (defaultSettings.watermark_rows === 0 || (parseInt(defaultSettings.watermark_y + defaultSettings.watermark_height * defaultSettings.watermark_rows + defaultSettings.watermark_y_space * (defaultSettings.watermark_rows - 1)) > page_height)) {
  defaultSettings.watermark_rows = parseInt((defaultSettings.watermark_y_space + page_height - defaultSettings.watermark_y) / (defaultSettings.watermark_height + defaultSettings.watermark_y_space));
  defaultSettings.watermark_y_space = parseInt(((page_height - defaultSettings.watermark_y) - defaultSettings.watermark_height * defaultSettings.watermark_rows) / (defaultSettings.watermark_rows - 1));
  }
  let x;
  let y;
  for (let i = 0; i < defaultSettings.watermark_rows; i++) {
  y = defaultSettings.watermark_y + (defaultSettings.watermark_y_space + defaultSettings.watermark_height) * i;
  for (let j = 0; j < defaultSettings.watermark_cols; j++) {
  x = defaultSettings.watermark_x + (defaultSettings.watermark_width + defaultSettings.watermark_x_space) * j;
  let mask_div = document.createElement('div');
  mask_div.id = 'mask_div' + i + j;
  mask_div.className = 'mask_div';
  mask_div.appendChild(document.createTextNode(defaultSettings.watermark_txt));
  //设置水印div倾斜显示
  mask_div.style.webkitTransform = "rotate(-" + defaultSettings.watermark_angle + "deg)";
  mask_div.style.MozTransform = "rotate(-" + defaultSettings.watermark_angle + "deg)";
  mask_div.style.msTransform = "rotate(-" + defaultSettings.watermark_angle + "deg)";
  mask_div.style.OTransform = "rotate(-" + defaultSettings.watermark_angle + "deg)";
  mask_div.style.transform = "rotate(-" + defaultSettings.watermark_angle + "deg)";
  mask_div.style.visibility = "";
  mask_div.style.position = "absolute";
  mask_div.style.left = x + 'px';
  mask_div.style.top = y + 'px';
  mask_div.style.overflow = "hidden";
  mask_div.style.zIndex = "9999";
  mask_div.style.pointerEvents='none';//pointer-events:none 让水印不遮挡页面的点击事件
  mask_div.style.opacity = defaultSettings.watermark_alpha;
  mask_div.style.fontSize = defaultSettings.watermark_fontsize;
  mask_div.style.fontFamily = defaultSettings.watermark_font;
  mask_div.style.color = defaultSettings.watermark_color;
  mask_div.style.textAlign = "center";
  mask_div.style.width = defaultSettings.watermark_width + 'px';
  mask_div.style.height = defaultSettings.watermark_height + 'px';
  mask_div.style.display = "block";
  oTemp.appendChild(mask_div);
  };
  };
  document.body.appendChild(oTemp);
  }

所加位置 (根据自己项目实际需求来)

router.beforeEach((to, from, next) => {
 if(!document.querySelector('.mask_div')){ // 此判断为了防止多次append
      watermark({ watermark_txt: '北上广'});
    }
})

相关文章

  • JS实现水印效果

    实现代码如下 实现效果如下 欢迎打赏!感谢 本团队长期承接企业官网开发、电脑端和手机端的网页制作,团队有多年开发经...

  • js实现水印效果

    首先预览一下成品效果 接下来 贴代码 直接cv大法即可使用 所加位置 (根据自己项目实际需求来) 完

  • 原生JS实现Tab切换效果和模态框效果

    原生JS实现Tab切换效果 效果展示 原生JS实现模态框效果 效果展示

  • jQuery基础知识

    jQuery jQuery能实现的效果,js都能实现;js能实现的效果,jQuery未必能实现 jQuery大体分...

  • 札记丶20171016

    请假回家了几天,好累。。。 今日整理 1.JS变量 实现效果: 实现步骤: 2.JS实现 实现效果: 实现步骤: ...

  • Canvas<水印效果>

    本篇文章介绍的是如何实现 图片水印和页面水印 效果,想了解通过创建 html标签 实现的话,可参考 此篇文章 ~~...

  • vue svg 生成水印,MutationObserver防止水

    一、要实现的水印效果 二、使用svg 绘制 三、使用 MutationObserver 防止水印被删除 在moun...

  • Vue<简单设置页面水印效果>

    效果图: ?此处只是简单的实现了水印效果,具体的可根据自身需求加以延伸和修改 参数设置:水印数量 = 列数 * ...

  • 自定义水印 Drawable WaterMarkDrawabl

    偶然想到BimapShader 用法,发现实现水印功能,是分分钟的。所以不到十分钟,实现了,效果还不错。 啥是水印...

  • 开工啦!批量向PDF文件添加中文水印...

    可以通过设置批量PDF文件所在的路径及需要添加的水印名称可以实现批量添加PDF水印的效果。 实现思路是这样的,通过...

网友评论

      本文标题:js实现水印效果

      本文链接:https://www.haomeiwen.com/subject/gokliktx.html