给原生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 相关文章推荐
gridpanel动态加载数据的实例代码
Jul 18 Javascript
JavaScript加入收藏夹功能(兼容IE、firefox、chrome)
May 05 Javascript
jquery实现点击展开列表同时隐藏其他列表
Aug 10 Javascript
jQuery平滑旋转幻灯片特效代码分享
Sep 07 Javascript
仅30行代码实现Javascript中的MVC
Feb 15 Javascript
Vue.js每天必学之Class与样式绑定
Sep 05 Javascript
HTML Table 空白单元格补全的简单实现
Oct 13 Javascript
基于webpack.config.js 参数详解
Mar 20 Javascript
JS中判断某个字符串是否包含另一个字符串的五种方法
May 03 Javascript
javascript判断一个变量是数组还是对象
Apr 10 Javascript
vue input标签通用指令校验的实现
Nov 05 Javascript
基于canvasJS在PHP中制作动态图表
May 30 Javascript
html实现随机点名器的示例代码
如何利用JavaScript实现二叉搜索树
(开源)微信小程序+mqtt,esp8266温湿度读取
Javascript中的解构赋值语法详解
Apr 02 #Javascript
Ajax实现局部刷新的方法实例
前端学习——JavaScript原生实现购物车案例
JavaScript中关于预编译、作用域链和闭包的理解
You might like
php中count获取多维数组长度的方法
2014/11/03 PHP
Smarty foreach控制循环次数的一些方法
2015/07/01 PHP
详解PHP实现执行定时任务
2015/12/21 PHP
使用PHPWord生成word文档的方法详解
2019/06/06 PHP
showModalDialog 和 showModelessDialog
2007/01/22 Javascript
比较详细的javascript对象的property和prototype是什么一种关系
2007/08/06 Javascript
Discuz! 6.1_jQuery兼容问题
2008/09/23 Javascript
JavaScript面向对象程序设计三 原型模式(上)
2011/12/21 Javascript
JavaScript中setUTCFullYear()方法的使用简介
2015/06/12 Javascript
九种原生js动画效果
2015/11/11 Javascript
微信小程序 wx.uploadFile在安卓手机上面the same task is working问题解决
2016/12/14 Javascript
Extjs让combobox写起来简洁又漂亮
2017/01/05 Javascript
AngularJS表单基本操作
2017/01/09 Javascript
JavaScript实现隐藏省略文字效果的方法
2017/04/27 Javascript
Vue2 使用 Echarts 创建图表实例代码
2017/05/18 Javascript
vue小图标favicon不显示的解决方案
2017/09/19 Javascript
基于element-ui组件手动实现单选和上传功能
2018/12/06 Javascript
深入理解JS异步编程-Promise
2019/06/03 Javascript
element-ui树形控件后台返回的数据+生成组织树的工具类
2020/03/05 Javascript
javascript实现移动端上传图片功能
2020/08/18 Javascript
python中xrange和range的区别
2014/05/13 Python
python实现可以断点续传和并发的ftp程序
2016/09/13 Python
详解Django解决ajax跨域访问问题
2018/08/24 Python
Django框架之登录后自定义跳转页面的实现方法
2019/07/18 Python
python DataFrame转dict字典过程详解
2019/12/26 Python
Pycharm和Idea支持的vim插件的方法
2020/02/21 Python
美国电视购物:QVC
2017/02/06 全球购物
微软瑞士官方网站:Microsoft瑞士
2018/04/20 全球购物
如何获得EntityManager
2014/02/09 面试题
采购类个人求职的自我评价
2014/02/18 职场文书
公司中层干部的自我评价分享
2014/03/01 职场文书
质量承诺书怎么写
2014/05/24 职场文书
社区个人对照检查材料(群众路线)
2014/09/26 职场文书
2014年度个人工作总结范文
2015/03/09 职场文书
SpringBoot 整合mongoDB并自定义连接池的示例代码
2022/02/28 MongoDB
Python Django / Flask如何使用Elasticsearch
2022/04/19 Python