后台、报表、详情页经常要铺一层字,标明谁在看这份页。这版用 jQuery 1.9.1。核心是按页宽页高算出行列,每个格子一个 div,再旋转、调透明。
嵌入项目时,按后面「怎么嵌进后台,水印带上登录名」那节,把 watermark_txt 换成当前登录名。
文字水印用到哪些文件

jQuery 必须写在 textWatermark.js 前面,不然 $ 还没定义。textWatermark.js 包在 $(function () {}) 里,放 <head> 也会等 DOM 好了再铺。

业务就这几个名字,后面会反复碰到:
1、watermark(settings):按配置往页面上铺一层字
2、watermark_txt:水印文案
3、.page-watermark:这一整组水印的容器,重绘前先拿掉它
4、waterOpts:onload 和 resize 共用的那份配置
行列、间距、倾斜角度怎么配
watermark() 先拿页宽页高:scrollWidth / clientWidth 取大的当宽,高同理。默认行、列都写成 20,格子再加间距,总宽超过页面就按页宽重算列数和横向间距;总高超了就重算行数和纵向间距。列或行写成 0,也走这套按页面重算。
我第一次看也卡了一下。说白了吧:不是先画 20×20 再裁切,是先问「这一屏塞得下几列几行」,再按算出来的数去铺。窗口窄,列就少;窗口高,行就多。
每个格子一个 div,文案是 watermark_txt。位置:
1、第 i 行:top = watermark_y + (watermark_y_space + watermark_height) * i
2、第 j 列:left = watermark_x + (watermark_width + watermark_x_space) * j
字要斜着,靠 transform: rotate(-Ndeg),N 就是 watermark_angle。本例 15,负号表示逆时针。opacity 用 watermark_alpha,本例 0.3,太实会盖住正文,太浅截图上看不清是谁的页。
水印在最上层(z-index: 9999),但格子和容器都写了 pointer-events: none。忘了这句,下面按钮全点不了,这坑我见过不止一次。user-select: none 也要带上,不然字能被选中、复制走。
窗口缩放后水印怎么重绘
铺的时候先 $(".page-watermark").remove(),再按当时的页宽页高算一遍行列,挂一组新的。load 和 resize 用同一份 waterOpts,文案、宽度不要各写各的。

说白了:旧节点不拿掉,每拉一次窗口就叠一层,字会越来越黑。resize 很勤,必须先清再画。事件用 $(window).on("resize", ...),别直接写 window.onresize,后面要卸掉也好卸。
怎么嵌进后台,水印带上登录名
接入项目时:watermark() 不用改,只是文案改成当前登录名。先调后端拿用户信息,成功后再铺;接口挂了可以先铺一句「内部资料」,别让页上空白干瞪眼。jQuery 这套建议用 Layui 的 layer.msg 做提示,具体按实际项目来定。
resize 还是走同一份配置。登录名变了(比如切账号),再调一次 paintWatermark 就行。
接入后端接口的完整示例
样式还用原来的 textWatermark.css。接口地址和 res.code 换成项目里的约定。

$(window).off("resize.watermark") 再 on,是怕 paintWatermark 调两次时 resize 叠两份。命名空间 .watermark 只卸自己,别把页面上别的 resize 清掉。
文案、透明度和角度改哪里
1、文案:本例 watermark_txt 写成「超级管理员」,方便立刻看见效果;业务里换成登录名,常见是姓名 + 工号。
2、字号:本例 50px,一打开就看见;后台页一般改成 16px~20px,格子宽 watermark_width 跟着收,不然字挤在一起。
3、透明度:watermark_alpha 本例 0.3。再低截图上看不清是谁的页,再高正文难读。
4、角度:watermark_angle 本例 15。角度太小像一行行正文,太大字不好认。
5、颜色:watermark_color 默认 #000000,深色后台改浅灰。
6、行列:watermark_cols / watermark_rows 写成 0,按当前页宽页高自动算。
接入时这几处别漏:pointer-events: none、重绘前先 $(".page-watermark").remove()、load 和 resize 共用一份配置。jQuery 这套建议用 Layui 做提示,具体按实际项目来定。