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

湖北网站建设平台怎么做app视频教程

湖北网站建设平台,怎么做app视频教程,升级不了wordpress,北京值得去的互联网公司最近公司需要在管理后台加一个水印方案~ 项目用的umi方案,以为就是改一个配置的问题,后来发现坑点还蛮多~ 希望此稳定能帮助到用umi 的你们. 一. 先来说说心路历程 坑点1 umi的水印适配只能在layout中进行配置,也就是路由配置中layout为false的页面无法配置水印,比如说登录页…

最近公司需要在管理后台加一个水印方案~ 项目用的umi方案,以为就是改一个配置的问题,后来发现坑点还蛮多~ 希望此稳定能帮助到用umi 的你们.

一. 先来说说心路历程

坑点1

umi的水印适配只能在layout中进行配置,也就是路由配置中layout为false的页面无法配置水印,比如说登录页~
在这里插入图片描述

坑点2

就算只对layout配置也会有问题,如下是配置与效果
请添加图片描述
可以看到头部区域,菜单区域以及空白区域适配不到.
请添加图片描述

坑点3

既然配置不好处理,而umi用的是react的ant组件,那是不是可以用ant的水印组件Watermark去包裹根组件达到效果呢?
想法是好的. 实际情况是umi的app.tsx只是一个配置文件,它并没有暴露根组件,也就是说我们只能用原生js拿到根节点~ 但就算拿到根节点,你又如何去适配Watermark组件呢? 原生与jsx如何进行写法上的兼容?
请添加图片描述

坑点4

因为以上诸多不便,我不得不尝试寻找其它可替代方案. 比如去github上寻找原生相关的水印方案库~ 反复查找下锁定了一个start比较多的开源水印库:watermark-dom
这个库的优点是简单易用,对水印有保护策略的加持; 缺点是最新版本更新与2019年,对ts的兼容性不是很好,水印内容只能文本不能是图片,且适配不是很好,不能随着内容变化而变化,还会出现滚动条等问题~
所以这个库我们只能作为备选方案…

心路总结

基于以上心路,最后决定还是回到坑点3,尝试手动适配

二. 核心解决思路

  1. 通过react18的createRoot,render出水印组件对应的dom
  2. 通过MutationObserver监听dom的变化,并在异步回调中做处理
  3. 拿到水印dom之后将其append到masteroot根节点之中
  4. 存储水印文案,判断是否变化.
  5. 变化了的话重复1步骤render创建水印,删除旧的水印,append新的水印dom
  6. 最后通过observer.disconnect()注销监听

三. 实现代码

如下是我的最终调试代码,在app.tsx文件中调用即可

import { Watermark } from 'antd';
import { createRoot } from 'react-dom/client';
let oldval: string = '';
const creatWatermark = (content: string) => {console.log(oldval, content);if (oldval && oldval === content) return;const opt = {content: content,fontColor: 'red',fontStyle: 'normal',fontSize: 23,gapX: [30, 30],rotate: 10,};oldval = content;// 选择需要观察变动的节点const targetNode = document.createElement('div');// 解析AST&挂载(是异步,所以后续需要监听节点变化再做处理)createRoot(targetNode).render(<Watermark {...opt} />);// 观察器的配置(需要观察什么变动, childList只能向下观察到一级, subtree可多级 )const config = { childList: true, subtree: true };// 当观察到变动时执行的回调函数const callback = (mutationsList: MutationRecord[],observer: MutationObserver,) => {for (let mutation of mutationsList) {if (mutation.type === 'childList') {const rootMaster = document.getElementById('root-master',) as HTMLElement;const newDom = targetNode?.childNodes[0]?.childNodes[0] as HTMLElement;if (newDom) {document.getElementById('watermark')?.remove();newDom.id = 'watermark';rootMaster.appendChild(newDom);observer.disconnect(); // 注销}}}};// 创建一个观察器实例并传入回调函数 MutationObserver的回调是微任务const observer = new MutationObserver(callback);// 以上述配置开始观察目标节点observer.observe(targetNode, config);// 方案二: 用动画帧刷新也可以(弃用)// const getFormRefLoop = () => {//   window.requestAnimationFrame(() => {//     const rootMaster = document.getElementById('root-master') as HTMLElement;//     const w = root?.childNodes[0]?.childNodes[0] as HTMLElement;//     if (rootMaster && w) {//       const old = document.getElementById('root');//       if (old) old.remove();//       w.id = 'root';//       rootMaster.appendChild(w);//     } else {//       getFormRefLoop();//     }//   });// };// getFormRefLoop();
};export default creatWatermark;

小结

demo地址
原创不易,转载请注明来源. 如果对你有帮助,收藏关注加点赞哦😝 当然如果大家有更好的解决方案,欢迎评论哦

http://www.yayakq.cn/news/494/

相关文章:

  • wordpress付费站内搜索3g门户网站官网
  • 企业进行网站建设的方式有( )wordpress添加时间轴
  • 济南网站建设 unzz怎样在亚马逊上开自己的店铺
  • 网站怎么做好网站搭建公司排行
  • 怎么上传网站模板wordpress 文章页 模板
  • 网站设计的难点怎么用wordpress做模板
  • 哪些公司做网站改造网站建设主要职责
  • 班级介绍网页制作模板google优化师
  • 好项目推荐平台无锡seo网站排名
  • 什么是网站被黑全网引擎搜索
  • 手机网站排名优化江门平台入口
  • 高新公司网站建设哪家好做网站卖产品要注册公司吗
  • 女孩学网站开发与运营方向怎么样建立内部网站需要多少钱
  • 秦皇岛 网站制作郑州达云通网站建设公司
  • 用ps做网站画布一般建多大wordpress要的留邮箱
  • 网站建站公司广州9951026企业邮箱
  • 判断网站模板版本建设工程规范发布网站
  • 明星 卡片网站该怎么做天津手网站开发
  • 网站建设公司销售技巧石家庄做外贸的网站推广
  • 建设政务网站wordpress域名授权破解版
  • 网站模板 整站源码小白怎样建设公司网站
  • 教育网站建设平台做品牌折扣的网站
  • 广州建设网站专家wordpress頂部公告插件
  • 唐山做网站优化公司中介房产管理软件推荐
  • 企业网站 批量备案住房城乡建设部网站通报
  • 厦门 网站建设 网站开发 未来网络做网站应该画什么图
  • 网站建设遇到哪些问题网站建设实训心得体会
  • 基本建筑网站自己做网站要哪些东西
  • 网站没有域名开发网站公司排行榜
  • 网站开发合同是否要交印花税制作公司网页哪个公司好