所谓的富文本编辑器就是内嵌在浏览器上、所见即所得的文本编辑器,它的形式如下:

layui框架中内置了layedit模块,该模块就是富文本编辑器模块,在最近两天中我自己使用原生js实现了简易的富文本编辑器,具体效果如下:

首先说说这个demo的组织结构:

在这个demo中,整体是一个IIFE,使用window对象将其构造函数暴露出去,想要使用这个demo,需要创建一个容器设置id属性为ueditor,其实demo需要做的几个关键点如下

  • 构建文本编辑器的主体html结构
  • 绑定工具栏的每个工具的事件绑定
  • 如何获取选择的文本
  • 如何给选择的文本应用样式
  • 如何插入图片

对于1和2这两个问题就是动态创建节点并追加到指定元素下,并使用addEventListener(就不考虑IE了)来绑定事件。

下面就来说说我对于下面3个关键点的处理:

  • 获取文本,先来说说获取文本的动作,鼠标按下、拖动、松开、点击具体工具的过程,所以我对于内容区绑定mouseout事件。
    当选择文本后离开目标点时触发事件处理程序,使用window.getSelection()方法来获取被选择区域对象获取其文本,该方法存在兼容问题,感兴趣的同学可以具体看看。
  • 如何给选择的文本应用样式:
    我的做法是添加标签添加指定class类来实现,对于对齐的样式,需要改变包含文本的元素为块状元素,应用text-align样式
  • 如何插入图片:
    实际上还是添加img标签,获取点击的表情的src属性值,添加到内容区

实现过程中的问题:

  • 刚开始打算使用textarea来作为内容区的,但是有一个问题就是插入的html标签不被识别,只能是文本,所以就使用div+contentEditable来实现

该demo的问题:

  • 体验性不好,整体操作给人感觉不自然不流畅
  • 样式没有好好设计,弹出效果生硬,没有应用动画效果
  • 文本选择的时候,感觉不自然
  • 应用样式重复问题,没有做处理优化

富文本编辑器demo的实现差强人意吧,以后会将其作为独立项目重新编写。

下面就分析下layui框架中富文本编辑器模块,该内置模块的组织结构图如下所示:

从上图中可见,作者将创建文本编辑器的方法作为api暴露了出来,在使用过程中需要手动调用来实现文本编辑器的创建工作。

关于该内置模块具体的运行逻辑如下图所示:

在分析了该内置模块的源码过程中,作者实现文本样式的应用是通过document.execCommand():方法来实现的,该方法的功能就是用于操作可编辑区域的文本,可以对于改变文本大小字体等,实际上该方法也是添加标签来实现,但是对于重复性标签做了处理。当然该内置模块还提供了其他的功能,我会对其源码做详细的注释,具体可以查看我的GitHub,最近项目开始启动,实践与分析源码的时间会少许多,但是会一直实践并坚持分析该框架的内置模块。

致远行的你我

layui源码详细分析系列之富文本编辑器模块相关推荐

  1. web文本编辑器php源码,超级轻量web富文本编辑器HandyEditor

    HandyEditor 是一套十分轻量且同时适用于手机端和pc端的web富文本编辑器,主要用于让用户在网站上获得所见即所得编辑效果,可以用 HandyEditor 把传统的多行文本输入框(textar ...

  2. LinkedHashMap 源码详细分析(JDK1.8)

    1. 概述 LinkedHashMap 继承自 HashMap,在 HashMap 基础上,通过维护一条双向链表,解决了 HashMap 不能随时保持遍历顺序和插入顺序一致的问题.除此之外,Linke ...

  3. linkedhashmap 顺序_LinkedHashMap 源码详细分析(JDK1.8)

    1. 概述 LinkedHashMap 继承自 HashMap,在 HashMap 基础上,通过维护一条双向链表,解决了 HashMap 不能随时保持遍历顺序和插入顺序一致的问题.除此之外,Linke ...

  4. FBReader源码详细分析 序言

    2019独角兽企业重金招聘Python工程师标准>>> FBReader源码详细分析 -- 序言 有关FBReader源码的分析,网络上已经有一位叫做"谋哥"的大 ...

  5. HashMap 源码详细分析(JDK1.8)

    1. 概述 本篇文章我们来聊聊大家日常开发中常用的一个集合类 - HashMap.HashMap 最早出现在 JDK 1.2中,底层基于散列算法实现.HashMap 允许 null 键和 null 值 ...

  6. android view 源码分析,Android ViewPager源码详细分析

    1.问题 由于Android Framework源码很庞大,所以读源码必须带着问题来读!没有问题,创造问题再来读!否则很容易迷失在无数的方法与属性之中,最后无功而返. 那么,关于ViewPager有什 ...

  7. vboot源码详细分析-1

    最近一直在研究bootloader之vboot,vboot短小精悍,如果只是用来进行系统的引导,而不要提供其他复杂的功能时候,我认为这是绝佳的上选.这里以MINI2440开发板配套的源码进行分析.这个 ...

  8. (转)淘淘商城系列——KindEditor富文本编辑器的使用

    http://blog.csdn.net/yerenyuan_pku/article/details/72809794 通过上文的学习,我们知道了怎样解决KindEditor富文本编辑器上传图片时的浏 ...

  9. HashMap 源码详细分析(JDK1.8) 1

    1.概述 本篇文章我们来聊聊大家日常开发中常用的一个集合类 - HashMap.HashMap 最早出现在 JDK 1.2中,底层基于散列算法实现.HashMap 允许 null 键和 null 值, ...

最新文章

  1. leetcode算法题--格雷编码
  2. BAT3四大巨头安全负责人破天荒聚在了一起,他们都说了什么?
  3. 6.支持向量机(SVM)、什么是SVM、支持向量机基本原理与思想、基本原理、课程中关于SVM介绍
  4. Android之JNI DETECTED ERROR IN APPLICATION: illegal class name ‘XXX‘的错误解决方法
  5. mysql where过滤
  6. python 计算流形上两点之间的测地距离
  7. RabbitMQ学习——生产者与消费者入门例子
  8. Navicat远程连接服务器Mysql
  9. 坚果云升级后桌面出现一个文件夹
  10. AutoJs 4.1.1 实战教程
  11. 密码学——培根密码和栅栏密码
  12. Win10系统IE浏览器设置代理上网的方法
  13. 完整Debian7配置LAMP(Apache/MySQL/PHP)环境及搭建建站
  14. 找到一个在线网站截图的网站
  15. 主流互联网开发平台一览
  16. 互联网战神谷歌大牛Jeff Dean
  17. 同功能不同的代码,差别呢?
  18. 借条上的字迹消失了,怎么办?
  19. addr2line查看死机代码的位置
  20. 澳洲语言成绩等级c,澳大利亚对A-Level成绩要求分为几个等级

热门文章

  1. linux 提取edid_EDID已提取一长串字符,怎么转换成override
  2. 错过BTC就不要在错过Micoin
  3. 多设备智能语音交互—小爱协同唤醒
  4. 【SRE笔记 2022.8.12 SRE概述03】
  5. 金融信息破局刍议【5】平台陷阱
  6. EASBOS设置UI界面窗口大小
  7. 千万级用户网站门户前端设计
  8. 我用计算机最难忘的事,让我最难忘的一件事作文(通用10篇)
  9. android实现在线阅读功能,Android使用WebView实现离线阅读功能
  10. python——PIL模块实现图片转字符画