页面水印效果的实现--新篇

这两天需要实现页面的水印效果,第一印象一直以为水印效果都是放张背景图,原谅我的孤陋寡闻..还可以放入动态的数据。

我在移动端和PC端都做了测试,在原来网上封装好的水印的方法基础上,自己有增加了动态获取数据的封装,现在把代码贴出来。大家有需要可以看一下,如果有什么错误,欢迎指正。

注意: 我在PC端测试的时候,始终是显示一列,第二列没有显示出来;还有就是在传入路径时,移动端的访问路径和PC端的路径是有所差别的。

           还有一个很重要的问题,就是在不刷新页面的基础上,我改变页面的大小,水印效果也会增加,但是之前的水印并没有消失,一直都有。这个问题暂未解决。

 

 附:

         今天在调用方法时,发现如果在移动端我找的选择器是可选的,且如果页面有上拉加载的时候,就需要改一下了。我处理的方法就是先在页面加载时调用一次该方法,然后增加页面滚动的监听,如果滚动的距离大于某个值,就再次渲染(这两次渲染是重复的,我暂时没办法消除上次渲染对页面的影响);接着就要解除绑定,否则页面会一直渲染水印效果,没办法自行消除。

监听的代码:

function scrollEve (){
   if(window.scrollY>($('body').height()/2)){
          getDataTxt ("body",url)
   }
}
function scrollEve2 (){
   if(window.scrollY>($('body').height()/1.9)){
         window.removwEventLisenter("scroll",scrollEve,false)
   }
}
window.addEventLisenter("scroll",scrollEve,false)
window.addEventLisenter("scroll",scrollEve2,false)

 

HTML代码
<!
DOCTYPE html> <html> <head> <meta charset="utf-8"> <meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, user-scalable=no" /> <title></title> <style type="text/css"> .list{ list-style: none; margin:0; padding: 0; } .list-item{ /*height:200px;*/ border:1px solid #DDDDDD; line-height: 200px; } </style> <script type="text/javascript"> document.addEventListener('plusready', function(){ //console.log("所有plus api都应该在此事件发生后调用,否则会出现plus is undefined。" }); </script> </head> <body> <ul class="list"> <li class="list-item">一、前言</li> <li class="list-item">二、前言</li> <li class="list-item">三、前言</li> <li class="list-item">四、前言</li> <li class="list-item">五、前言</li> <li class="list-item">六、前言</li> <li class="list-item">七、前言</li> <li class="list-item">八、前言</li> </ul> <script type="text/javascript" src="../js/jquery-2.1.3.min.js"></script> <script type="text/javascript" src="../js/shuiyin.js"></script> <script type="text/javascript"> getDataTxt ("body","http://127.0.0.1:8020/projectStudy/json/shuiyin.json"); //onresize时触发水印绘制 window.onresize = function () { getDataTxt ("body","http://127.0.0.1:8020/projectStudy/json/shuiyin.json"); }; </script> </body> </html>

JS代码

function getDataTxt (selector,waterUrl){
    var windowHeight = $(selector).height();
    console.log(windowHeight);
    var rows = Math.floor(windowHeight/100)-3;
    console.log(rows);
    var windowWidth = $('body').innerWidth();            
    console.log(windowWidth)
    var cols = Math.floor(windowWidth/140);
    console.log(cols);
    
    $.ajax({
        method:"GET",
        url:waterUrl,
        success:function(data){
//            alert(data.emplId);
            var emplId = data.emplId;
            console.log(emplId);
            watermark({ watermark_txt:emplId, watermark_rows:rows,watermark_cols:cols}) 
        }
    })
}

function watermark(settings) {
    //默认设置
    var defaultSettings = {
        watermark_txt: "text",
        watermark_x: 20, //水印起始位置x轴坐标
        watermark_y: 20, //水印起始位置Y轴坐标
        watermark_rows: 5, //水印行数
        watermark_cols: 2, //水印列数
        watermark_x_space: 40, //水印x轴间隔
        watermark_y_space: 50, //水印y轴间隔
        watermark_color: '#aaa', //水印字体颜色
        watermark_alpha: 0.4, //水印透明度
        watermark_fontsize: '15px', //水印字体大小
        watermark_font: '微软雅黑', //水印字体
        watermark_width: 140, //水印宽度
        watermark_height: 80, //水印长度
        watermark_angle: 15 //水印倾斜度数
    };
    //采用配置项替换默认值,作用类似jquery.extend
    if(arguments.length === 1 && typeof arguments[0] === "object") {
        var src = arguments[0] || {};
        for(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 page_width = Math.max(document.body.scrollWidth, document.body.clientWidth);
    var cutWidth = page_width * 0.0150;
    var page_width = page_width - cutWidth;
    //获取页面最大高度
    var page_height = Math.max(document.body.scrollHeight, document.body.clientHeight) + 450;
    // var page_height = document.body.scrollHeight+document.body.scrollTop;
    //如果将水印列数设置为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.className = 'mask_div';
            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'; //pointer-events: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.fontFamily = defaultSettings.watermark_font;
            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);
}

   在项目快要发版本的时候,发现有一个BUG,就是如果页面存在下拉加载数据的时候,包裹盒子的标签(div)就会被撑开,尤其是如果有切换功能时,且在切换后都有下载拉加载数据,且数据长度不等,在这种情况下呢,我们就要先清除水印,然后在数据加载的时候再重新渲染。现在想想,清除水印的方法其实很简单,一开始自己想的太复杂了,清除水印可以直接清除盛放水印的盒子,这样一来,水印就会清除了,用户在使用下拉加载很多时,重新加载。这样的话,这个BUG也就解决了。

 

转载于:https://www.cnblogs.com/bllx/p/8757064.html

Vue 实现页面背景加水印,图片添加水印 如果对 node.js 感兴趣,又想使用相当于 Vue 级别的 node.js 框架那么可以访问以下链接了解下 Nest.js,本文的自定义上传就是用的 Nest.js 写的 node 服务去实现的,默认上传直接使用的 Element-ui 的示例地址。Nest.js 中文文档Nest.js 项目源码Nest.js 开发文档 - 与项目源码对应的文档moogodb 数据库下载与基础语法文章<template><script>data () {return {}, 阅读详情

相关推荐

vue实现水印功能

在页面里添加水印,一种是特定页面加水印,那么本页面加水印功能即可,用CSS/JavaScript都可以实现,另一种是全局都加水印,这种可以考虑某些页面不需要加水印,在路由守卫或者其他地方去掉即可。 写在前面,水印的实现原理:创建一个canvas,画一个客户端高x客户端宽的画布,里面画满水印,并将其的层级z-index设置最高,使其一直显示在界面的最上方。

鹤渺的星球 5707

VUE页面添加水印

vue添加水印

qq_40231344的博客 2074

前端实现水印效果的多种方案

本文介绍了几种前端水印方案,大家可以根据具体项目选择适合的方法来实现水印效果。在这个示例中,我们创建了一个Canvas元素,并使用JavaScript来绘制水印。你可以根据需要配置水印的文本、字体、颜色等属性,并使用库提供的方法进行初始化和加载。这种方法适用于需要在整个页面或特定元素上添加水印的情况,且不需要通过Canvas来绘制水印。在这个示例中,我们使用SVG(可缩放矢量图形)来创建水印。使用CSS来添加重复水印的方法是将水印图片作为背景图片,并使用。在这个示例中,我们创建了一个包含水印的容器元素。

菜菜程序员 7262

前端实现水印效果

为了防止信息泄露或知识产权被侵犯,在web的世界里,对于页面和图片等增加水印处理是十分有必要的,水印的添加根据环境可以分为两大类,前端浏览器环境添加和后端服务环境添加,简单对比一下这两种方式的特点:前端浏览器加水印: 第一时间想到的方案是在页面上覆盖一个position:fixed的div盒子,盒子透明度设置较低,设置pointer-events: none;样式实现点击穿透,在这个盒子内通过js循环生成小的水印div,每个水印div内展示一个要显示的水印内容,简单实现这种方案需要要在js内循环创建多个do

lovecoding1的博客 3994

vue 项目实现水印效果

目录 (1)新建waterMark.js文件 (2)页面使用 (1)新建引入 waterMark.js文件 'use strict' let watermark = {} let setWatermark = (str) => { let id = '1.23452384164.123412415' if (document.getElementById(id) !== null) { document.body.removeChild(document.getE...

欢迎来到我的频道~ 2288

实现小程序页面水印

小程序的实现页面水印 html的代码 <view class='water_top'> <canvas canvas-id='myCanvas1' style='width:100%;height:1200rpx;'></canvas> </view> js代码 // 添加水印 drowsyUserInfo () { // var userInfo = wx.getStorageSync('userInfo'); // var

eiwqjeioqw的博客 1359

「前端添加水印」你真的了解全面吗?

大厂技术高级前端Node进阶点击上方程序员成长指北,关注公众号 回复1,加入高级Node交流群背景 在古茗日常业务中,经常会给加盟商下发各种资料,例如:奶茶的配方、设备的清洗、卫生的标准等等等。这些资料都是一些内部资料,从信息安全维度不能被泄露和盗取出去。所以会给下发的资料加上水印。这些资料可能是纯文本,也可能是文本加图片的。因此,我们要做好以下两个方面:通过对页面增加水印,可以从系统级...

程序员成长指北 1995

页面CSS水印

使用css对页面内容加载水印样式,防止复制、截屏、打印等非法获取页面内容。

vue水印效果实现指南

vue水印效果实现指南

希望看完文章的你能够带着答案离开。 6191

Linux内核4.14版本——drm框架分析(1)——drm简介

drm框架分析

yangguoyu8023的博客 1万+

银行卡密码键盘 SM4 ECB模式+ANSI X9.8 格式标准(带主账号信息)PIN 加解密示例

文章目录1.软加解密示例2.知识点①ANSI X9.8 格式标准②主密钥,工作密钥加解密基本概念:加密种类:3.密码键盘操作4.工具 1.软加解密示例 ————————————————————————————————————————————------ 已知数据: 银行测试主密钥TMK: 1234567890ABCDEFABCDEF0987654321 通过签到接口得到: 工作密钥密文KeyVal...

老孟嘚吧嘚 6639

前端基于DOM或者Canvas实现页面水印

我们会看到很多页面带有水印,但是怎么实现呢?当然可以有多种实现方式,本文主要讲解在vue项目中基于DOM或者Cavans实现水印效果,当然还有其他的实现方式,比如在原图片的基础上加上水印生成新的图片,但是这需要后端处理。因为要在vue项目中使用,所以我使用自定义指令可以直接对挂载的dom实现水印效果。

编码世界 7万+

光学仿真案例(1) 铌酸锂非线性波导仿真模拟 FDTD仿真

在过去几年里,许多集成光子学应用往往需要多个相干可调谐光源,而且从外部激光器引入额外的光输入增加了芯片封装的复杂性,如果使用基于III-V族、氮化硅(SiN)或铌酸锂(LNO)的集成光源又大大增加了制造复杂性和成本。然而,通过非线性谐波相互作用产生的光源不需要额外的制造工艺来产生增益、反馈和外部电路,即可支持许多应用。在下面的案例中,演示了一种基于Luo[1]的铌酸锂波导频率转换集成系统。该案例主要仿真了利用温度调制实现高效相位匹配的铌酸锂纳米光子波导的二次谐波产生。

q895235273的博客 4137

Android为页面添加水印

现在市面上,有很多APP在一些关键页面上会有水印,水印一般都是一些身份相关的信息,这样可以保证截屏后的图片具有识别性,能够知道这张截图是谁截取的。

Fantasy 1万+

Viobot使用教程总贴

使用教程总贴

weixin_66666206的博客 1405

空间数据库(1):Arcgis10.2连接PostgreSQL9.1,创建空间数据库,导入空间数据

1、arcgis的安装对于gis人员来说想必并不陌生,此处就不赘述了。那么就先从PostgreSQL说吧,我这里用的是跟Arcgis desktop 10.2所支持的9.1或者9.2版本,大家也可以用相对应的更高的版本来配置,注意的是版本一定要相互匹配,不仅是Arcgis与PostgreSQL的匹配,还有PostgreSQL与PostGIS匹配。 按道理desktop是32位的,应该用PostgreSQL的32位,但是我实在找不到32位的PostGIS9.1,所以就用64位的吧,后面配置部分可能需

XIAOHUA的博客 1312

使用JS给页面添加水印效果

原文:https://www.cnblogs.com/Miracle-ZLZ/p/9340249.html 此方法可以给整个页面或某个div添加水印效果。 1、普通使用方式: $(document).ready(function() { var watermark_txt = "测试效果" + getDate(); watermark({"watermarl...

默存 6288

用例设计:滴滴打车从轿车到完成支付如何测?

滴滴打车全流程测试用例设计从业务场景覆盖、功能逻辑分解、异常流验证三个维度展开,系统化地构建了测试方案。首先,业务流主干场景被分解为叫车、行程中、支付结算三个阶段,每个阶段都设计了核心测试用例,包括正向和异常用例,如定位准确性、车型选择逻辑、路径偏移监控、费用实时计算、多支付方式兼容等。专项测试补充了状态机验证、资损防控测试和性能测试,确保系统在不同情况下的稳定性和安全性。测试数据策略采用等价类划分设计,实战技巧包括流量回放技术、混沌工程注入和计费沙盒验证,以提高测试的覆盖率和准确性。最终输出交付物包括流程

海姐软件测试的博客 1518

React页面水印效果的实现简直不要太so easy

Web开发中实现页面水印的多种方法,包括原生Canvas、第三方库@pansy/watermark和watermarkjs。水印主要用于版权保护(防止盗用)、品牌宣传(展示Logo)和安全防护(追踪泄露)。文章详细展示了React组件实现方案,涵盖文字/图片水印、旋转角度、透明度等参数配置,并对比了不同技术方案的代码实现。所有示例代码均可免费获取,为开发者提供完整的页面水印解决方案。

前端开发-前端技术分享 985

【第07例】IPD体系进阶: 6 个技术评审点(TR)

TR技术评审点

产品线负责人 4391

Android SystemUI——车载CarSystemUI加载(八)

车载 CarSystemUI 是指专门为汽车环境设计的用户界面和用户体验(UI/UX),它通常与 Android Automotive OS 或其他嵌入式操作系统一起工作,为驾驶者和乘客提供安全、直观且高效的交互方式。Android Automotive OS 是 Google 专门为汽车开发的操作系统版本,它基于 Android 平台,并针对车辆内部的使用进行了优化。

小旭的专栏 2165

给jsp页面添加水印

给jsp页面添加水印 直接上代码,在jsp页面直接添加下面代码即可: <style type="text/css" media="screen"> body{background-color: #eef1f8;} #one{padding: 10px 15px;background-color: #FFFFFF;background-image: url(http://pic.58pi...

llb522628的博客 5779

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

vue项目在pc端实现页面水印效果

需求:   PC端和小程序。 思路: 列表页主要有标题、日期时间切换、列表表头在滚动的时候是不能动的,只有表体的数据内容可以区域滚动。表体的内容写在<scroll-view></scroll-view>组件里。 在列表页还可以切换到图表页;图表页的头部和列表共用,相当于筛选条件是一样的。图表需要滚动的也要放到<scroll-view></scroll-view>组件里。 问题: 列表页的区域滚动到最下方数据有遮挡;及图表的区域滚动最下方是有遮挡且图表不

guairena的博客 1018

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

Vue - 页面添加水印效果

Vue - 页面添加水印效果

技术共享,共同进步! 7998

JS为页面添加水印效果

<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>水印</title> <style> #water-div{pointer-events:none;position:fixed;top:0;left:0;right:0;bottom:0;} .mask_div{pointer-events:none...

rhx_1989的专栏 1446

前端实现页面水印

前端实现页面水印的思路,先将名称画到canvas上,再将canvas生成base64图片格式作为盒子的背景图追加到页面上,其中利用pointer-events: none属性实现点击穿透.

weixin_42839080的博客 1426
上一篇: angular实现表格的分页显示
下一篇: 下拉刷新,上拉加载功能--dropload.js的使用
ailong3046
博客等级 码龄11年 2粉丝 0原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值