用js實現(xiàn)html頁面水印
用js實現(xiàn)html頁面水印
要在 HTML 頁面中添加水印并防止截圖,可以使用 JavaScript。以下是實現(xiàn)的基本步驟:
1、在 HTML 中添加一個 div 元素作為水印容器,并設(shè)置其樣式。
2、使用 JavaScript 動態(tài)生成水印內(nèi)容,并將其添加到水印容器中。
3、通過 CSS 設(shè)置水印文本的樣式,例如顏色、字體大小等。
4、使用 CSS 將水印容器置于所有其他元素的最頂層,從而覆蓋整個頁面。
5、監(jiān)聽窗口的 resize 和 scroll 事件,以便及時更新水印位置。
6、使用 Canvas 繪制圖片或者使用 CSS 的 mix-blend-mode 屬性來實現(xiàn)防截圖效果。
下面是一個示例代碼片段:
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Watermark Example</title>
<style>
#watermark {
position: fixed;
top: 0;
left: 0;
width: 100%;
height: 100%;
z-index: 9999;
pointer-events: none;
}
#watermark span {
font-size: 24px;
color: #ccc;
position: absolute;
transform: rotate(-30deg);
padding:100px;
pointer-events: none;
}
</style>
</head>
<body>
<div id="watermark"></div>
<script>
function createWatermark() {
var watermark = document.getElementById('watermark');
var angle = -30;
var top = -30;
var text = 'My Watermark';
for (var i = 0; i < 10; i++) {
var span = document.createElement('span');
span.style.left = i * 200 + 'px';
span.style.top = i * top + 'px';
span.style.webkitTransform = 'rotate(' + angle + 'deg)';
span.style.MozTransform = 'rotate(' + angle + 'deg)';
span.style.msTransform = 'rotate(' + angle + 'deg)';
span.style.OTransform = 'rotate(' + angle + 'deg)';
span.style.transform = 'rotate(' + angle + 'deg)';
span.appendChild(document.createTextNode(text));
watermark.appendChild(span);
angle += 15;
top += 15;
}
}
createWatermark();
window.addEventListener('resize', function() {
createWatermark();
});
window.addEventListener('scroll', function() {
createWatermark();
});
// 防截圖
var canvas = document.createElement('canvas');
canvas.width = window.innerWidth;
canvas.height = window.innerHeight;
canvas.style.position = 'fixed';
canvas.style.top = 0;
canvas.style.left = 0;
canvas.style.pointerEvents = 'none';
canvas.style.mixBlendMode = 'multiply';
document.body.appendChild(canvas);
var ctx = canvas.getContext('2d');
ctx.fillRect(0, 0, canvas.width, canvas.height);
</script>
</body>
</html>
這個示例代碼添加了一個水印容器,并在其中添加了一些旋轉(zhuǎn)的文本。使用 CSS 將水印容器置于最頂層,并禁用了其指針事件,以防止干擾用戶操作。同時在窗口 resize 和 scroll 事件中更新水印位置,以適應(yīng)頁面變化。
如果想保護上面的JavaScript代碼邏輯,可以用JShaman進行JavaScript代碼混淆加密,加密后的代碼不可讀、可起到防分析的作用。
此外,這個示例代碼還使用 Canvas 繪制了一個與頁面大小相同的黑色矩形,并將其與水印容器疊加在一起。由于 mix-blend-mode 屬性的作用,截圖時就無法完整地復(fù)制水印文本,從而達到防截圖的效果。
效果:
