[原文地址](www.yuque.com/docs/share/… 《react-quill 富文本编辑器&采坑》)
由于业务功能,需要实现当用户在富文本里进行可以格式化操作,内容粘贴操作的时候,如果用户复制的是图片,需要将图片上传服务器后,插入到文本内;看似合情合理的要求,却有很多坑。
开始使用
安装 react-quill
npm install react-quill @ beta
资源:
github地址
quill 中文文档地址
quill 文档地址
直接上手练练 Codeopen
1、自定义富文本格式刷功能
quill是不具备格式刷的功能,那么也就没有对应的icon,这时就需要去自定义工具栏,quill工具栏控件即可以用一个格式名称数组定义,也可以用一般的HTML容器定义。这里采用的是HTML容器定义。
先自定义一个格式刷的icon。这里的icon采用的是iconfont的unicode引用,支持按字体的方式去动态调整图标大小,颜色等等。可以实现选中高亮的效果,与原来的工具栏交互保持一致。
自定义HTML容器CustomToolbar
CustomToolbar就是加入原有的工具栏与格式刷工具栏。把自定义的工具栏放到return里。
效果:
格式刷功能
接下来是格式刷功能,在modules完成格式刷。formatBrush与工具栏 className="ql-formatBrush"
保持一致。
关键的格式设置样式方法,点击格式刷,如果选中的区域有样式,则保存样式,格式刷功能为选中状态,再次点击删除样式,取消选中;设置格式样式。可以把这3个方法放到单独文件导出管理。
本人测试使用默认的 ql-active
高亮样式,不起作用,只有自定义格式刷的高亮样式:
效果:
以上格式刷功能已经实现。
2、内容粘贴操作-图片直接预览
用户复制的内容里包含跨域的图片,需要将图片上传服务器后,插入到文本内显示。
目前image功能是自定义封装了,用户插入图片会走antd的Upload上传,把图片资源上传服务器后再插入我们本服务器的URL图片。
自定义Quill的行为和功能
主要方法是imageHandler,使用 Quill.register
模块可以自定义Quill的行为和功能,
具体的弹窗逻辑就不过多展示,在拿到上传完的fileList数据,就在富文本插入图片。
复制内容图片的上传拿到新的本服务器的url数据也是在自定义image模块内实现。
实际操作
1、复制域外资源:
2、粘贴富文本效果:
从输出看最后替换结果是没有问题
加入图片加载失败、本地路径图片资源加载失败的处理,使用图片占位符。
已知问题
1、“直接复制本地文件夹内的图片,在mac下ok,在windows下失效”,找了下原来windows下复制出来的是bolb流(后端服务器接受失败),而mac下是file流。进一步探索发现在windows文件夹系统中,复制文本类的东西,是在剪切板中,可以获得之;但是,复制的图片文件,不论是右键复制,还是Ctrl + C复制都不行。目前,windows复制图片可以选择富文本的插入图片功能实现。(欢迎留言讨论)
2、粘贴后页面滚到底部,解决方案如下:
less文件里添加如下样式。
欢迎多多留言讨论,有好的方案可以留下宝贵意见。
常见问题FAQ
- 免费下载或者VIP会员专享资源能否直接商用?
- 本站所有资源版权均属于原作者所有,这里所提供资源均只能用于参考学习用,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担。更多说明请参考 VIP介绍。
- 提示下载完但解压或打开不了?
- 找不到素材资源介绍文章里的示例图片?
- 模板不会安装或需要功能定制以及二次开发?
发表评论
还没有评论,快来抢沙发吧!