watermark demo
HTML
<div id="info">
Information should not be distributed!
</div>
CSS
html,body {
height: 100%;
}
#info {
height: 100%;
}
JavaScript
let defaultOption = {
id: 'watermark-1',
width: 110,
preventTamper: false,
height: 80,
text: 'watermark',
font: '20px Times New Roman',
rotateDegree: 30 * Math.PI / 180,
style: {
'pointer-events': 'none',
width:'100%',
height: '100%',
top:0,
left:0,
position: 'fixed',
'z-index':1000
}
}
let container, observer, backgroundUrl
function remove() {
var elem = document.getElementById(defaultOption.id);
if(elem)
elem.parentNode.removeChild(elem);
}
//create image base64 url via canvas
function createImageUrl(options) {
var canvas = document.createElement('canvas');
var text = options.text;
canvas.width = options.width
canvas.height = options.height
var ctx = canvas.getContext('2d');
ctx.shadowOffsetX = 2; //X轴阴影距离,负值表示往上,正值表示往下
ctx.shadowOffsetY = 2; //Y轴阴影距离,负值表示往左,正值表示往右
ctx.shadowBlur = 2; //阴影的模糊程度
// ctx.shadowColor = 'rgba(0, 0, 0, 0.5)'; //阴影颜色
ctx.font = options.font
ctx.fillStyle = "rgba(204,204,204,0.45)"
ctx.rotate(options.rotateDegree);
ctx.translate(options.trax, options.tray);
ctx.textAlign = 'left';
ctx.fillText(text, 35, 32); //实体文字
return canvas.toDataURL('image/png')
}
function createContainer(options, forceCreate) {
let oldDiv = document.getElementById(options.id)
if(!forceCreate && oldDiv)
return container
let url = createImageUrl(options)
var div = oldDiv ? oldDiv : document.createElement('div');
div.id = options.id
let parentEl = options.preventTamper ? document.body : (options.parentEl || document.body)
if(typeof parentEl === 'string') {
if(parentEl.startsWith('#'))
parentEl = parentEl.substring(1)
parentEl = document.getElementById(parentEl)
}
let rect = parentEl.getBoundingClientRect()
options.style.left = (options.left || rect.left) + 'px'
options.style.top = (options.top ||rect.top) + 'px'
div.style.cssText = getStyleText(options)
div.setAttribute('class', '')
backgroundUrl = 'url(' +...