前端實(shí)現(xiàn)添加水印功能的四種方法
實(shí)現(xiàn)添加水印功能常見(jiàn)的方法包括使用 CSS、Canvas 和 SVG 等。
方法 1: 使用 CSS 實(shí)現(xiàn)水印
通過(guò) CSS 可以簡(jiǎn)單地實(shí)現(xiàn)全局水印,即給需要添加水印的元素添加背景圖。這種方式比較簡(jiǎn)單方便,適合靜態(tài)頁(yè)面,但靈活性和防篡改能力較差。
具體的實(shí)現(xiàn)示例:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>CSS水印示例</title>
<style>
.watermark {
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
z-index: 1000;
pointer-events: none;
opacity: 0.2;
background: url('data:image/svg+xml,<svg xmlns="http://www.w3.org/2000/svg" width="200" height="200" viewBox="0 0 200 200"><text x="50%" y="50%" dominant-baseline="middle" text-anchor="middle" font-size="30" fill="rgba(0,0,0,0.1)">水印文本</text></svg>') repeat;
}
</style>
</head>
<body>
<div class="watermark"></div>
<div>
<h1>內(nèi)容區(qū)域</h1>
<p>這是需要加水印的內(nèi)容</p>
</div>
</body>
</html>
方法 2: 使用 Canvas 實(shí)現(xiàn)水印
使用 Canvas 可以生成更復(fù)雜的水印圖案,適合動(dòng)態(tài)內(nèi)容,并且相對(duì)難以篡改。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Canvas水印示例</title>
<style>
.watermark {
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
z-index: 1000;
pointer-events: none;
opacity: 0.2;
}
</style>
</head>
<body>
<canvas id="watermarkCanvas" class="watermark"></canvas>
<div>
<h1>內(nèi)容區(qū)域</h1>
<p>這是需要加水印的內(nèi)容</p>
</div>
<script>
window.onload = function() {
var canvas = document.getElementById('watermarkCanvas');
var ctx = canvas.getContext('2d');
canvas.width = window.innerWidth;
canvas.height = window.innerHeight;
var text = '水印文本';
var width = canvas.width;
var height = canvas.height;
ctx.font = '30px Arial';
ctx.fillStyle = 'rgba(0, 0, 0, 0.1)';
ctx.textAlign = 'center';
ctx.textBaseline = 'middle';
// 旋轉(zhuǎn)并重復(fù)繪制水印文本
for (var x = 0; x < width; x += 200) {
for (var y = 0; y < height; y += 200) {
ctx.save();
ctx.translate(x, y);
ctx.rotate(- Math.PI / 4);
ctx.fillText(text, 0, 0);
ctx.restore();
}
}
};
</script>
</body>
</html>
方法 3: 使用 SVG 實(shí)現(xiàn)水印
SVG 也是一種實(shí)現(xiàn)水印的有效方式,容易實(shí)現(xiàn)和修改,具備良好的圖形渲染能力。性能不如 canvas 好,但是dom更友好
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>SVG水印示例</title>
<style>
.watermark {
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
z-index: 1000;
pointer-events: none;
opacity: 0.2;
}
</style>
</head>
<body>
<div class="watermark">
<svg width="100%" height="100%">
<text x="50%" y="50%" dominant-baseline="middle" text-anchor="middle" font-size="30" fill="rgba(0,0,0,0.1)" transform="rotate(-45, 50, 50)">水印文本</text>
</svg>
</div>
<div>
<h1>內(nèi)容區(qū)域</h1>
<p>這是需要加水印的內(nèi)容</p>
</div>
</body>
</html>
方法 4: 動(dòng)態(tài)生成水印圖像
更靈活的方式是通過(guò) JavaScript 動(dòng)態(tài)生成水印圖像。相對(duì)其他方式,最高的靈活性,可以在運(yùn)行時(shí)生成任意圖案的水印。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>動(dòng)態(tài)水印示例</title>
<style>
.watermark {
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
z-index: 1000;
pointer-events: none;
background-repeat: repeat;
opacity: 0.2;
}
</style>
</head>
<body>
<div id="watermarkContainer"></div>
<div>
<h1>內(nèi)容區(qū)域</h1>
<p>這是需要加水印的內(nèi)容...</p>
</div>
<script>
function createWatermark(text) {
var canvas = document.createElement('canvas');
canvas.width = 200;
canvas.height = 200;
var ctx = canvas.getContext('2d');
ctx.font = '30px Arial';
ctx.fillStyle = 'rgba(0, 0, 0, 0.1)';
ctx.translate(100, 100);
ctx.rotate(- Math.PI / 4);
ctx.textAlign = 'center';
ctx.textBaseline = 'middle';
ctx.fillText(text, 0, 0);
return canvas.toDataURL('image/png');
}
window.onload = function() {
var watermarkContainer = document.getElementById('watermarkContainer');
watermarkContainer.classList.add('watermark');
watermarkContainer.style.backgroundImage = 'url(' + createWatermark('水印文本') + ')';
};
</script>
</body>
</html>總結(jié)
到此這篇關(guān)于前端實(shí)現(xiàn)添加水印功能的四種方法的文章就介紹到這了,更多相關(guān)前端添加水印功能內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
VSCode中ESLint格式化不生效問(wèn)題解決辦法(新手也能看懂的配置指南)
vscode代碼格式化失效通常因工具未安裝、未正確配置或被干擾項(xiàng)屏蔽,這篇文章主要介紹了VSCode中ESLint格式化不生效問(wèn)題解決辦法的相關(guān)資料,文中通過(guò)代碼介紹的非常詳細(xì),需要的朋友可以參考下2026-03-03
微信小程序?qū)崿F(xiàn)簡(jiǎn)單評(píng)論功能
這篇文章主要為大家詳細(xì)介紹了微信小程序?qū)崿F(xiàn)簡(jiǎn)單評(píng)論功能,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-11-11
uniapp開(kāi)發(fā)微信小程序遇到的問(wèn)題筆記
這篇文章主要給大家介紹了關(guān)于uniapp開(kāi)發(fā)微信小程序遇到的問(wèn)題的相關(guān)資料,比較適合第一次使用uniapp?開(kāi)發(fā)微信小程序的伙伴,或者沒(méi)有過(guò)實(shí)戰(zhàn)經(jīng)驗(yàn)的小伙伴參考,需要的朋友可以參考下2023-01-01
關(guān)于base64編碼和解碼的js工具函數(shù)
這篇文章主要介紹了關(guān)于base64編碼和解碼的js工具函數(shù),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-02-02
微信小程序列表渲染功能之列表下拉刷新及上拉加載的實(shí)現(xiàn)方法分析
這篇文章主要介紹了微信小程序列表渲染功能之列表下拉刷新及上拉加載的實(shí)現(xiàn)方法,結(jié)合實(shí)例形式分析了微信小程序列表下拉刷新及上拉加載的相關(guān)實(shí)現(xiàn)方法與技巧操作,需要的朋友可以參考下2017-11-11
Javascript如何實(shí)現(xiàn)對(duì)象扁平化實(shí)例詳解
這篇文章主要給大家介紹了關(guān)于Javascript如何實(shí)現(xiàn)對(duì)象扁平化的扁平化處理簡(jiǎn)而言之就是對(duì)對(duì)象中的對(duì)象提取出來(lái),放在一個(gè)對(duì)象里面,形象的說(shuō)就是把兒子的后代當(dāng)成自己的兒子,下面相關(guān)資料,需要的朋友可以參考下2022-11-11
使用canvas實(shí)現(xiàn)鯉魚(yú)躍龍門(mén)的動(dòng)畫(huà)效果
這篇文章主要給大家介紹了使用canvas實(shí)現(xiàn)鯉魚(yú)躍龍門(mén)的動(dòng)畫(huà)效果,文中通過(guò)代碼示例給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作有一定的幫助,感興趣的小伙伴可以自己動(dòng)手嘗試一下2024-02-02
Firefox中通過(guò)JavaScript復(fù)制數(shù)據(jù)到剪貼板(Copy to Clipboard 跨瀏覽器版)
這篇文章主要介紹了irefox中通過(guò)JavaScript復(fù)制數(shù)據(jù)到剪貼板的方法,可以跨瀏覽器使用,大家可以使用看看2013-11-11

