最新公告
  • 欢迎您光临起源地模板网,本站秉承服务宗旨 履行“站长”责任,销售只是起点 服务永无止境!立即加入钻石VIP
  • 如何将龙插入到编辑器中?

    正文概述 掘金(DevUI团队)   2021-05-31   481

    DevUI 是一款面向企业中后台产品的开源前端解决方案,它倡导沉浸灵活至简的设计价值观,提倡设计者为真实的需求服务,为多数人的设计,拒绝哗众取宠、取悦眼球的设计。如果你正在开发 ToB工具类产品,DevUI 将是一个很不错的选择!

    如何将龙插入到编辑器中?

    引言

    5月份掘金最火的文章应该就是大帅老师的《产品经理:你能不能用div给我画条龙? 》

    当时我正在一边吃饭一边刷手机,看到大帅老师在群里发的这篇文章,立马放下了筷子,当时就有预感此文必火,于是看到一半立马点了赞。

    如何将龙插入到编辑器中?

    果然,这篇文章非常受欢迎,已经半个多月过去了,依然能在掘金首页的热门推荐里看到这篇文章?

    正好前两天在公司的HWEB大前端分享会上给大家分享了富文本编辑器的一些实践,于是想:

    在富文本编辑器中插入自定义内容

    在之前的文章中,给大家分享了如何在Quill中插入自定义的内容,我们一起来回顾下:

    • 第一步:自定义工具栏按钮
    • 第二步:自定义Blot内容
    • 第三步:在Quill注册自定义Blot
    • 第四步:调用Quill的API插入自定义内容

    我们试着按照这个步骤来将龙插入到编辑器中。

    第一步:自定义工具栏按钮

    这个非常简单:

    const TOOLBAR_CONFIG = [
      [{ header: ['1', '2', '3', false] }],
      ['bold', 'italic', 'underline', 'link'],
      [{ list: 'ordered' }, { list: 'bullet' }],
      ['clean'],
      ['card', 'divider', 'emoji', 'file', 'tag'],
      ['dragon'], // 新增的
    ];
    

    自定义工具栏按钮图标:

    const dragonIcon = `<svg>...</svg>`;
    const icons = Quill.import('ui/icons');
    icons.dragon = dragonIcon;
    

    增加工具栏按钮事件:

    const quill = new Quill('#editor', {
      theme: 'snow',
      modules: {
        toolbar: {
          container: TOOLBAR_CONFIG,
          handlers: {
            ...
            // 增加一个空的事件
            dragon(value): void {
              console.log('dragon~~');
            },
          },
        }
      },
    });
    

    第二步:自定义Blot内容(核心)

    之前的分享提到:

    因此我们需要编写一个类。

    dragon.ts

    import Quill from 'quill';
    
    const BlockEmbed = Quill.import('blots/block/embed');
    
    class DragonBlot extends BlockEmbed {
      static blotName = 'dragon';
      static tagName = 'canvas';
    
      static create(value): any {
        const node = super.create(value);
        const { id, width, height } = value;
    
        node.setAttribute('id', id || DragonBlot.blotName);
        if (width !== undefined) {
          node.setAttribute('width', width);
        }
        if (height !== undefined) {
          node.setAttribute('height', height);
        }
    
        // 绘制龙的逻辑,参考大帅老师的文章:https://juejin.cn/post/6963476650356916254
        new Dragon(node);
        
        return node;
      }
    }
    
    export default DragonBlot;
    

    绘制龙

    绘制龙的逻辑参考大帅老师的文章,这里就不贴代码了,大帅老师的文章里有源码,直接拿来用就可以:

    产品经理:你能不能用div给我画条龙?

    第三步:在Quill注册自定义Blot

    有了 DragonBlot,还需要将其注册到 Quill 中才能使用:

    import DragonBlot from './formats/dragon';
    Quill.register('formats/dragon', DragonBlot);
    

    第四步:调用Quill的API插入自定义内容

    最后一步,见证奇迹的时刻到了!

    const quill = new Quill('#editor', {
      theme: 'snow',
      modules: {
        toolbar: {
          container: TOOLBAR_CONFIG,
          handlers: {
            ...
            dragon(value): void {
              console.log('dragon~~');
              const index = this.quill.getSelection().index;
              // 插入自定义内容
              this.quill.insertEmbed(index, 'dragon', {
                id: 'canvas-dragon',
              });
            },
          },
        }
      },
    });
    

    效果图:

    如何将龙插入到编辑器中?

    欢迎加DevUI小助手微信:devui-official,一起讨论富文本编辑器技术和前端技术。

    欢迎关注我们DevUI组件库,点亮我们的小星星?:

    github.com/devcloudfe/…

    也欢迎使用DevUI新发布的DevUI Admin系统,开箱即用,10分钟搭建一个美观大气的后台管理系统!

    加入我们

    我们是DevUI团队,欢迎来这里和我们一起打造优雅高效的人机设计/研发体系。招聘邮箱:muyang2@huawei.com。

    文/DevUI Kagol

    往期文章推荐

    《Quill富文本编辑器的实践》

    《StepsGuide:一个像跟屁虫一样的组件》

    《如何解决异步接口请求快慢不均导致的数据错误问题?》

    《号外号外!DevUI Admin V1.0 发布啦!》

    《让我们一起建设 Vue DevUI 项目吧!》


    起源地下载网 » 如何将龙插入到编辑器中?

    常见问题FAQ

    免费下载或者VIP会员专享资源能否直接商用?
    本站所有资源版权均属于原作者所有,这里所提供资源均只能用于参考学习用,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担。更多说明请参考 VIP介绍。
    提示下载完但解压或打开不了?
    最常见的情况是下载不完整: 可对比下载完压缩包的与网盘上的容量,若小于网盘提示的容量则是这个原因。这是浏览器下载的bug,建议用百度网盘软件或迅雷下载。若排除这种情况,可在对应资源底部留言,或 联络我们.。
    找不到素材资源介绍文章里的示例图片?
    对于PPT,KEY,Mockups,APP,网页模版等类型的素材,文章内用于介绍的图片通常并不包含在对应可供下载素材包内。这些相关商业图片需另外购买,且本站不负责(也没有办法)找到出处。 同样地一些字体文件也是这种情况,但部分素材会在素材包内有一份字体下载链接清单。
    模板不会安装或需要功能定制以及二次开发?
    请QQ联系我们

    发表评论

    还没有评论,快来抢沙发吧!

    如需帝国cms功能定制以及二次开发请联系我们

    联系作者

    请选择支付方式

    ×
    迅虎支付宝
    迅虎微信
    支付宝当面付
    余额支付
    ×
    微信扫码支付 0 元