当前位置: 首页 > news >正文

实习随笔【前端技术实现全局添加水印】

        有一些数据比较重要的项目,往往需要对数据进行保护措施,本文介绍常见策略——全局添加水印。

1、创建水印组件
<template><div class="water-mark"><div class="water-mark-content"><span class="phone">{{ phone }}</span><span class="time">{{ time }}</span></div></div>
</template>
<script>
export default {name: 'WaterMark',props: {phone: {type: String,required: true,},time: {type: Number,required: true,},},
};
</script>
<style scoped>.water-mark {position: relative;width: 300px;height: 300px;background: url('../../assets/logo.png') no-repeat center;background-size: 80px;filter: brightness(0.7);pointer-events: none;color: rgba(26, 26, 26, 0.3);font-size: 10px;transform: rotate(-45deg);display: inline-block;opacity: 0.5;}.water-mark-content {position: absolute;top: 50%;left: 50%;transform: translate(-50%, -50%);text-align: center;}.phone {display: block;position: absolute;top: -15px;left: 50px;}.time {display: block;position: absolute;top: 0px;left: 50px;}
</style>
2、在公共组件使用水印组件 

        这里需要注意,水印的位置以及多少可由样式具体决定

<div class="water-wrap"><WaterMarkv-for="(item, index) in waterArr":key="`water-mark-${index}`":phone="userInfo.username":time="time.getTime()"/>
</div>// 水印内容——当前时间
time = new Date()// 水印数组控制水印数量
waterArr = Array(100).fill(1)// 水印样式控制水印显示区域
.water-wrap {position: fixed;bottom: 0;left: 0;top: 0;right: 0;overflow: hidden;z-index: 100000;pointer-events: none;}
3、对于不需要水印的页面(登录页)

        可以用计算属性来判断,并用v-if(vue)或&&(react)控制显隐

// 以下例子以登录页不显示水印为例
<div v-if="isLoginPage" class="water-wrap"><WaterMarkv-for="(item, index) in waterArr":key="`water-mark-${index}`":phone="userInfo.username":time="time.getTime()"/>
</div>computed: {isLoginPage() {// 检查当前路由路径是否包含 '/login'return !this.$route.path.includes('/login');},
},

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 【java深入学习第7章】用 Spring Boot 和 Java Mail 轻松实现邮件发送功能
  • 电脑远程开关机
  • 【找不到视图问题解决】@RestController 与 @Controller注解的使用区别
  • 大数据hive表和iceberg表格式
  • 【乐吾乐2D可视化组态编辑器】消息
  • 论文翻译:通过云计算对联网多智能体系统进行预测控制
  • notes for datawhale 2th summer camp NLP task1
  • JSqlParser 解析 sql
  • Linux介绍以及常用命令
  • html+js+css做的扫雷
  • 使用mybatis的statementHander拦截器监控表和字段并发送钉钉消息
  • Python面经
  • FlinkErr:org/apache/hadoop/hive/ql/parse/SemanticException
  • .Net Core 微服务之Consul(二)-集群搭建
  • Vue 接口用FormData() 提交数据
  • 时间复杂度分析经典问题——最大子序列和
  • 07.Android之多媒体问题
  • 2017届校招提前批面试回顾
  • 230. Kth Smallest Element in a BST
  • 8年软件测试工程师感悟——写给还在迷茫中的朋友
  • eclipse的离线汉化
  • Java小白进阶笔记(3)-初级面向对象
  • k个最大的数及变种小结
  • Promise面试题,控制异步流程
  • Python打包系统简单入门
  • SQLServer插入数据
  • Sublime text 3 3103 注册码
  • vuex 学习笔记 01
  • vue总结
  • 道格拉斯-普克 抽稀算法 附javascript实现
  • 对象管理器(defineProperty)学习笔记
  • 飞驰在Mesos的涡轮引擎上
  • 警报:线上事故之CountDownLatch的威力
  • 入职第二天:使用koa搭建node server是种怎样的体验
  • 时间复杂度与空间复杂度分析
  • 系统认识JavaScript正则表达式
  • 看到一个关于网页设计的文章分享过来!大家看看!
  • 如何在招聘中考核.NET架构师
  • ​​​​​​​STM32通过SPI硬件读写W25Q64
  • $分析了六十多年间100万字的政府工作报告,我看到了这样的变迁
  • (12)Hive调优——count distinct去重优化
  • (LNMP) How To Install Linux, nginx, MySQL, PHP
  • (ZT)出版业改革:该死的死,该生的生
  • (二十五)admin-boot项目之集成消息队列Rabbitmq
  • (六)Hibernate的二级缓存
  • (十一)c52学习之旅-动态数码管
  • (转)编辑寄语:因为爱心,所以美丽
  • .NET/C# 在 64 位进程中读取 32 位进程重定向后的注册表
  • .Net中wcf服务生成及调用
  • ??javascript里的变量问题
  • ??在JSP中,java和JavaScript如何交互?
  • @serverendpoint注解_SpringBoot 使用WebSocket打造在线聊天室(基于注解)
  • [ 2222 ]http://e.eqxiu.com/s/wJMf15Ku
  • [000-002-01].数据库调优相关学习
  • [AutoSAR系列] 1.3 AutoSar 架构