给原生html中添加水印遮罩层的实现示例


Posted in Javascript onApril 02, 2021

效果图

给原生html中添加水印遮罩层的实现示例

代码

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>水印遮罩</title>
</head>
<style>
    .watermark_mask {
        position: fixed;
        top: 10px;
    }

    .hello {
        width: 500px;
        height: 2048px;
        margin: 0 auto;
        background-color: pink;
    }
</style>
<body>
    <div class="hello">
        Hello World

        <div style="margin-top: 600px;">Hello World 2</div>
        <div style="margin-top: 1200px;">Hello World 3</div>
    </div>
    <div id="watermarkId" class="watermark_mask"></div>
    <script>
        const watermarkId = "watermarkId";

        // 水印遮罩函数
        function watermarkUtils(settings, id) {
            //默认设置
            var defaultSettings={
                watermark_txt: "text",
                watermark_x: 10,//水印起始位置x轴坐标
                watermark_y: 20,//水印起始位置Y轴坐标
                watermark_rows: 55,//水印行数
                watermark_cols: 55,//水印列数
                watermark_x_space: 10,//水印x轴间隔
                watermark_y_space: 10,//水印y轴间隔
                watermark_color: '#000000',//水印字体颜色
                watermark_alpha: 0.2,//水印透明度
                watermark_fontsize: '15px',//水印字体大小
                watermark_font: '微软雅黑',//水印字体
                watermark_width: 50,//水印宽度
                watermark_height: 20,//水印长度
                watermark_angle: 25//水印倾斜度数
            };

            //采用配置项替换默认值,作用类似jquery.extend
            if(typeof settings === "object") {
                var src = settings;
                for(let key in src) {
                    if(src[key] && defaultSettings[key] && src[key] === defaultSettings[key])
                    continue;
                    else if(src[key])
                    defaultSettings[key]=src[key];
                }
            }

            var oTemp = document.createDocumentFragment();
            // var oTemp = document.createElement("div");

            //获取页面最大宽度
            var page_width = Math.max(document.body.scrollWidth,document.body.clientWidth);
            //获取页面最大长度
            var page_height = Math.max(document.body.scrollHeight,document.body.clientHeight);

            //如果将水印列数设置为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));
            }
            var x;
            var y;
            for (var i = 0; i < defaultSettings.watermark_rows; i++) {
                y = defaultSettings.watermark_y + (defaultSettings.watermark_y_space + defaultSettings.watermark_height) * i;
                for (var j = 0; j < defaultSettings.watermark_cols; j++) {
                    x = defaultSettings.watermark_x + (defaultSettings.watermark_width + defaultSettings.watermark_x_space) * j;

                    var mask_div = document.createElement('div');
                    mask_div.id = 'mask_div' + i + j;
                    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";
                    //mask_div.style.border="solid #eee 1px";
                    mask_div.style.opacity = defaultSettings.watermark_alpha;
                    mask_div.style.fontSize = defaultSettings.watermark_fontsize;
                    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);
            try {
                // console.log(document.getElementById(id), "document.getElementById(id)");
                document.getElementById(id).appendChild(oTemp);
            } catch(error) {
                console.error(error, "遮罩异常");
            }
        };

        watermarkUtils({ watermark_txt: "9527", watermark_width: 60, watermark_fontsize: "14px" }, watermarkId);
    </script>
</body>
</html>

核心代码

const watermarkId = "watermarkId";

// 水印遮罩函数
function watermarkUtils(settings, id) {
    //默认设置
    var defaultSettings={
        watermark_txt: "text",
        watermark_x: 10,//水印起始位置x轴坐标
        watermark_y: 20,//水印起始位置Y轴坐标
        watermark_rows: 55,//水印行数
        watermark_cols: 55,//水印列数
        watermark_x_space: 10,//水印x轴间隔
        watermark_y_space: 10,//水印y轴间隔
        watermark_color: '#000000',//水印字体颜色
        watermark_alpha: 0.2,//水印透明度
        watermark_fontsize: '15px',//水印字体大小
        watermark_font: '微软雅黑',//水印字体
        watermark_width: 50,//水印宽度
        watermark_height: 20,//水印长度
        watermark_angle: 25//水印倾斜度数
    };

    //采用配置项替换默认值,作用类似jquery.extend
    if(typeof settings === "object") {
        var src = settings;
        for(let key in src) {
            if(src[key] && defaultSettings[key] && src[key] === defaultSettings[key])
            continue;
            else if(src[key])
            defaultSettings[key]=src[key];
        }
    }

    var oTemp = document.createDocumentFragment();
    // var oTemp = document.createElement("div");

    //获取页面最大宽度
    var page_width = Math.max(document.body.scrollWidth,document.body.clientWidth);
    //获取页面最大长度
    var page_height = Math.max(document.body.scrollHeight,document.body.clientHeight);

    //如果将水印列数设置为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));
    }
    var x;
    var y;
    for (var i = 0; i < defaultSettings.watermark_rows; i++) {
        y = defaultSettings.watermark_y + (defaultSettings.watermark_y_space + defaultSettings.watermark_height) * i;
        for (var j = 0; j < defaultSettings.watermark_cols; j++) {
            x = defaultSettings.watermark_x + (defaultSettings.watermark_width + defaultSettings.watermark_x_space) * j;

            var mask_div = document.createElement('div');
            mask_div.id = 'mask_div' + i + j;
            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";
            //mask_div.style.border="solid #eee 1px";
            mask_div.style.opacity = defaultSettings.watermark_alpha;
            mask_div.style.fontSize = defaultSettings.watermark_fontsize;
            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);
    try {
        // console.log(document.getElementById(id), "document.getElementById(id)");
        document.getElementById(id).appendChild(oTemp);
    } catch(error) {
        console.error(error, "遮罩异常");
    }
};

// 使用
watermarkUtils({ watermark_txt: "9527", watermark_width: 60, watermark_fontsize: "14px" }, watermarkId);

到此这篇关于给原生html中添加水印遮罩层的实现示例的文章就介绍到这了,更多相关html添加水印遮罩层内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章,希望大家以后多多支持三水点靠木!

 
Javascript 相关文章推荐
JavaScript修改css样式style
Apr 15 Javascript
JavaScript游戏之是男人就下100层代码打包
Nov 08 Javascript
10个很棒的jQuery代码片段
Sep 24 Javascript
JS简单实现tab切换效果的多窗口显示功能
Sep 07 Javascript
JavaScript实现经典排序算法之冒泡排序
Dec 28 Javascript
socket.io学习教程之基本应用(二)
Apr 29 Javascript
vue.js整合vux中的上拉加载下拉刷新实例教程
Jan 09 Javascript
vue-router的HTML5 History 模式设置
Sep 08 Javascript
详解webpack打包后如何调试的方法步骤
Nov 07 Javascript
vue2.0+SVG实现音乐播放圆形进度条组件
Sep 21 Javascript
element-ui封装一个Table模板组件的示例
Jan 04 Javascript
小程序实现筛子抽奖
May 26 Javascript
html实现随机点名器的示例代码
如何利用JavaScript实现二叉搜索树
(开源)微信小程序+mqtt,esp8266温湿度读取
Javascript中的解构赋值语法详解
Apr 02 #Javascript
Ajax实现局部刷新的方法实例
前端学习——JavaScript原生实现购物车案例
JavaScript中关于预编译、作用域链和闭包的理解
You might like
PHP STRING 陷阱原理说明
2010/07/24 PHP
php中获取指定IP的物理地址的代码(正则表达式)
2011/06/23 PHP
php表单加入Token防止重复提交的方法分析
2016/10/10 PHP
Yii框架中sphinx索引配置方法解析
2016/10/18 PHP
PHP读取并输出XML文件数据的简单实现方法
2017/12/22 PHP
TP5(thinkPHP5框架)基于bootstrap实现的单图上传插件用法示例
2019/05/29 PHP
用jscript实现列出安装的软件列表
2007/06/18 Javascript
一个刚完成的layout(拖动流畅,不受iframe影响)
2007/08/17 Javascript
jquery 图片预加载 自动等比例缩放插件
2008/12/25 Javascript
JavaScript Timer实现代码
2010/02/17 Javascript
基于jQuery的图片剪切插件
2011/08/03 Javascript
javascript常见用法总结
2014/05/22 Javascript
js中各种类型的变量在if条件中是true还是false
2014/07/16 Javascript
JavaScript中数组的合并以及排序实现示例
2015/10/24 Javascript
JS中LocalStorage与SessionStorage五种循序渐进的使用方法
2017/07/12 Javascript
Vue.js学习笔记之修饰符详解
2017/07/25 Javascript
微信小程序picker组件下拉框选择input输入框的实例
2017/09/20 Javascript
HTML5+JS+JQuery+ECharts实现异步加载问题
2017/12/16 jQuery
爬虫利器Puppeteer实战
2019/01/09 Javascript
JS学习笔记之原型链和利用原型实现继承详解
2019/05/29 Javascript
原生JavaScript创建不可变对象的方法简单示例
2020/05/07 Javascript
[01:18:45]DOTA2-DPC中国联赛 正赛 DLG vs Dragon BO3 第三场2月1日
2021/03/11 DOTA
python从ftp下载数据保存实例
2013/11/20 Python
Python中endswith()函数的基本使用
2015/04/07 Python
利用Python2下载单张图片与爬取网页图片实例代码
2017/12/25 Python
pytorch程序异常后删除占用的显存操作
2020/01/13 Python
Python  word实现读取及导出代码解析
2020/07/09 Python
举例讲解Python装饰器
2020/12/24 Python
用python-webdriver实现自动填表的示例代码
2021/01/13 Python
HR喜欢的自荐信格式
2013/10/08 职场文书
2014年党课学习材料
2014/05/11 职场文书
品酒会策划方案
2014/05/26 职场文书
2014领导干部四风问题查摆思想汇报
2014/09/13 职场文书
中韩经贸翻译专业大学生职业生涯规划范文
2014/09/18 职场文书
Python学习之迭代器详解
2022/04/01 Python
使用Django框架创建项目
2022/06/10 Python