完结撒花啦

完结撒花

技术 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)支持文本内容下载,暂不支持图片下载,若需要,请参考博客https://blog.csdn.net/qq_39107452/article/details/110199973

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)

比方说伪元素和伪类,这个之间不是很重视,突然发现还是挺有用的,附上学习连接:https://blog.csdn.net/qq_24510455/article/details/100988237?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522162753015916780262523436%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fall.%2522%257D&request_id=162753015916780262523436&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2allfirst_rank_v2~rank_v29-10-100988237.first_rank_v2_pc_rank_v29&utm_term=%E4%BC%AA%E7%B1%BB%E5%92%8C%E4%BC%AA%E5%85%83%E7%B4%A0&spm=1018.2226.3001.4187

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上。如果有错误,请指出,还有什么功能我暂时没有想到,如果你有更好的想法,欢迎提出,一起加油吧!!!

猜你喜欢

转载自blog.csdn.net/L_Z_jay/article/details/119208246