完结撒花啦

简介: 完结撒花啦

完结撒花

技术 react+antd+hooks

之前写过一个东西使用class写的,所以这次想试着换一下

结构:



代码结构
markJia
└─ mark123
├─ package-lock.json
├─ package.json
├─ public
│ ├─ favicon.ico
│ ├─ html.docx
│ ├─ index.html
│ ├─ logo192.png
│ ├─ logo512.png
│ ├─ manifest.json
│ ├─ robots.txt
│ └─ simple.docx
├─ README.md
└─ src
├─ another
│ └─ setupTests.js
├─ App.css
├─ App.js
├─ art-template
│ └─ template.js
├─ contentElement
│ ├─ profileFile
│ │ ├─ Profile.js
│ │ ├─ ProfileChildren
│ │ │ ├─ aboutAuthor.js
│ │ │ ├─ aboutSite.js
│ │ │ ├─ githubAuthor.js
│ │ │ └─ unkown.js
│ │ ├─ ProfileStyles.css
│ │ └─ projectData
│ │ └─ passageData.js
│ ├─ projectFile
│ │ ├─ passageDataJect
│ │ │ └─ passageDataJect.js
│ │ ├─ ProjectChildren
│ │ │ ├─ Alkaid.js
│ │ │ ├─ Flint.js
│ │ │ ├─ MacOs.js
│ │ │ ├─ Metallic.js
│ │ │ └─ Vue.js
│ │ ├─ Projects.js
│ │ └─ ProjectStyles.css
│ ├─ publicBao
│ ├─ textContent
│ │ ├─ profileText
│ │ │ ├─ aboutSite03.js
│ │ │ ├─ number01.js
│ │ │ ├─ number01Style.css
│ │ │ ├─ number02.js
│ │ │ ├─ undefinedFile.js
│ │ │ └─ undefinedStyles.css
│ │ └─ projectText
│ │ ├─ Alkaidcontent.js
│ │ ├─ Flintcontent.js
│ │ ├─ FlintStyles.css
│ │ ├─ MAcoScontent.js
│ │ ├─ Metalliccontent.js
│ │ └─ Vuecontent.js
│ └─ twoNavBao
│ └─ onClicbao
│ └─ onclicBao.js
├─ controlState
│ ├─ Reducer.js
│ └─ store.js
├─ index.css
├─ index.js
├─ layoutElement
│ ├─ headerSection
│ │ ├─ adjustWidthheight
│ │ │ ├─ BeacmeSmall.js
│ │ │ ├─ BecameMaxFunction.js
│ │ │ ├─ DeleteFunction.js
│ │ │ └─ MinWithHeight.js
│ │ ├─ head.md
│ │ ├─ Header.js
│ │ ├─ headStyles.css
│ │ ├─ moveOut
│ │ │ └─ outFunction.js
│ │ └─ moveOver
│ │ └─ overFunction.js
│ ├─ Layout.js
│ ├─ layoutStyles.css
│ └─ mainSection
│ ├─ mainContent.css
│ ├─ mainContent.js
│ ├─ Navigation
│ │ ├─ leftNavigation
│ │ │ ├─ leftNav.js
│ │ │ └─ leftNavStyles.css
│ │ ├─ midNavigation
│ │ │ ├─ middleNav.js
│ │ │ └─ middleNavstyles.css
│ │ └─ rightNavigation
│ │ ├─ profileRoute.js
│ │ └─ projectRoute.js
│ └─ onclickFunctions
│ ├─ onClicFunction01.js
│ └─ onClickFunction02.js
├─ logo.svg
├─ reportWebVitals.js
├─ rubbish
│ └─ liLinktag.js
└─ setupTests.js
简介:

本次做的这个是参考https://portfolio.zxh.io/的,感觉这个还挺有意思的,然后就和小伙伴每人一部分,实现它的这个功能,我这次负责的就是这个部分。它的功能:


(1)能实现拖拽


(2)放大缩小


(3)能实现关闭、最小化、全屏三种模式


(4)双击头部内容可实现进入全屏和退出全屏


(5)对内容溢出有相应的处理


(6)支持将文本转换成markdown格式


(7)支持文本内容下载,暂不支持图片下载


npm包如下:

(1)实现拖拽,可以放大缩小:

react-rnd

(2)实现markdown在线转换功能


@uiw/react-md-editor

(3)实现markdown下载功能(下载结果不是很理想,是world格式,不能够解析html标签),因为模板有一部分功能是收费的,所以就…

docxtemplater
pizzip
jszip-utils
file-saver

因为时间的原因,没有实现图片下载的功能,只能下载文本,具体图片下载可以参考下边这个文章

https://blog.csdn.net/qq_39107452/article/details/110199973

感悟

1.使用react-rnd还是比较不容易的(反正把自己搞吐了,然后我就在GitHub上把源码拉下来,有时看会源码,有时看github上他的api介绍,才基本明白了。总之一句话,难归难,只要在坚持一下下,万一就成功了呢。)。用的时候记得设置手柄,不然默认选择整个部分都拖动,设置之后,只有鼠标放到该手柄所在的区域才会触发拖动事件。


2.更新store中的内容,原本是想用useeffect实现的,最后也是在看了好多博客文章之后,还有就是自己测试useeffect是在何时更新数据的,结果都达不到要求,最后放弃了。然后转而去react官方文档查看hook函数api,找到了一个父子组件传值的东西usecontext,搭配着useReducer最终实现了更新数据的功能。本次不准备使用class来写的原因:因为之前的那个纳新就是用class来写的,所以本次准备换成函数式来完成。然后用到的钩子函数有:useState,usecontext,useReducer,useEffect(这个想用但是感觉没啥用,哈哈哈)


3.为了解决坐标问题,我在onResizeStop函数和onDrag函数中做了一些相应的处理


4.做这个东西看起来感觉很简单,没什么技术含量,但是里边的技术内容是真的多,真的细,感觉人家细节做得确实好。在这过程中,我学到了很多知识点,这些都是之前学习没有注意到。


比方说svg图标它是怎样绘制的,附上链接:https://blog.csdn.net/lncci/article/details/80040800


比方说写主体内容的左中右布局的时候,我缩小窗口,其中有一部分内容就被挤下去了,最终用flex布局解决了(flex布局yyds)


比方说伪元素和伪类,这个之间不是很重视,突然发现还是挺有用的


5.这个知识点我觉得真的很重要,经常用,但是没有用心多想一下(自己真菜),那就是如何让一个容器占用剩余的所有空间你,这里用position来实现的,不得不说。这个真的很常用,但是没有多少人留意。附上链接:https://www.cnblogs.com/yoyogis/p/4040513.html


比方说display和visibility之间的不同:display设置成none之后,元素不占据宽高,设置visibility属性,元素不可见,但是元素占据宽高

刚开始的界面,出生在坐标((100,100))位置,截图如下

点击最左边的profile或者projects,被点击的会变成红色,截图如下:
第一部分
1.点击profile

2.点击箭头所指的任意区域,即可显示相应的内容,点击哪一个那个前边会有红色的边框

3.内容过多滑动条可以进行滑动

4.待定(可以将文本转换成markdown文本,可以下载成word文件,但是只能下载文本,没有格式,因为人家的模板要收费,那就算了哈哈哈)
默认显示:

输入文本和下载功能:

第二部分
1.点击projects

向下滚动

2.点击箭头所指的任意区域,即可显示相应的内容,点击哪一个那个前边会有红色的边框

放大和缩小
放大

缩小

拖拽

原始大小Vs全屏模式
原始大小支持放大缩小和拖动

缩小到一定程度会出现横向滚动条

全屏模式不支持放大缩小和拖动
进入全屏后,我将最小化按钮禁用,将最小化图标隐藏,换句话说就是全屏模式下不支持最小化,还有一个就是箭头所指图标的差异,你可以仔细看下他们之间的不同。
看出来了吧,进入全屏时,它的图标的意思是放大的,退出全屏,它的意思是往小缩的


希望对你的学习有一定的帮助加油加油。这个东西还有好多的有待完善,比如图片的下载,markdown文本的下载,页面的布局等等。等我整理完毕我就将代码放到github上。如果有错误,请指出,还有什么功能我暂时没有想到,如果你有更好的想法,欢迎提出,一起加油吧!!!
相关文章
|
28天前
|
算法 程序员 开发工具
代码随想录 学习记录(1)
代码随想录 学习记录(1)
38 0
|
1月前
|
人工智能 算法 编译器
刷题日记①
刷题日记①
37 2
|
1月前
|
存储 编译器 C语言
牛客网刷题笔记小节(二)
牛客网刷题笔记小节(二)
|
4月前
|
存储 开发工具 文件存储
Python的核心知识点整理大全66(已完结撒花)
Python的核心知识点整理大全66(已完结撒花)
80 4
|
6月前
Axure快速入门(完结) -终章总结
Axure快速入门(完结) -终章总结
33 0
|
9月前
|
计算机视觉
OpenCV图像处理汇总(已完结)
OpenCV图像处理汇总(已完结)
450 0
|
11月前
|
存储
《操作系统概论》第一遍阅读
前言: 《操作系统概论》从操作系统实现资源管理的观点出发,产生如何对计算机系统中的软硬件资源进行管理,要求我们理解操作系统要做什么,怎么样去做。学习操作系统概论是在米老师给我们讲完《信息资源管理》学习后按照老师所讲的方法来学习的,所以这次阅读,都是按照老师的指导一步一脚一脚印完成的。感觉很好。
|
机器学习/深度学习 存储 算法
初级算法之数组(完结)
数组 删除有序数组中的重复项 给你一个 升序排列 的数组 nums ,请你 原地 删除重复出现的元素,使每个元素 只出现一次 ,返回删除后数组的新长度。元素的 相对顺序 应该保持 一致 。 由于在某些语言中不能改变数组的长度,所以必须将结果放在数组nums的第一部分。更规范地说,如果在删除重复项之后有 k 个元素,那么 nums 的前 k 个元素应该保存最终结果。 将最终结果插入 nums 的前 k 个位置后返回 k 。 不要使用额外的空间,你必须在 原地 修改输入数组 并在使用 O(1) 额外空间的条件下完成。 思路及代码 遍历数组的每一个数,如果当前元素和下一个元素不一样,那么就加一. c
73 0
|
Linux Python Perl
生信人必备的Linux命令(2/完结)
生信人必备的Linux命令(2/完结)
81 0
|
算法
代码随想录算法训练营第八天 | 字符串
代码随想录算法训练营第八天 | 字符串
67 0