热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

轻量级web富文本框——wangEditor使用手册(2)——扩展一个“缩进”功能

1.引言上一节《轻量级web富文本框——wangEditor使用手册(1)——基本应用》中我们讲解了如何应用wangEditor创建最基本的富文本编辑器,本节继续讲如何扩展一个简单
1. 引言

上一节《轻量级web富文本框——wangEditor使用手册(1)——基本应用》中我们讲解了如何应用wangEditor创建最基本的富文本编辑器,本节继续讲如何扩展一个简单的按钮。本节是继续上一节的内容来的,所使用的代码也是接着上一节的来的,错过的朋友请先看上一节,再看本节。

下载地址:https://github.com/wangfupeng1988/wangEditor

demo演示http://www.cnblogs.com/wangfupeng1988/p/4185508.html

交流QQ群:164999061

2. “前戏”

一个具体的东西不可能满足所有人的要求,但是一个抽象的规则就有可能

所以,我觉得软件不是被编码编出来的,而是被绞尽脑汁设计出来的。在工作中我有这样的体验:我从来不希望你给我的东西是完美的,但是至少你得支持让我自己去做到完美,而且能顺利的升级和更新

技术分享

话归正题,以上是wangEditor的默认的菜单——不多、也不少,但是肯定无法满足所有人的要求。例如,你可能还需要一个“缩进”,一个“选择标题”,一个“上传图片”,一个“插入代码”,一个“插入视频/语音”,一个“全屏”……好多好多——但是我把这几个功能考虑进去了之后,就完了吗?——当然没有,用户的需求是无限的。

但是通过二次开发和扩展,我就可以让使用者自己去实现这些功能。从我现在的设计来看,至少以上提到的这几种类型都是可以实现的。我们一步一步来,先从最简单的“缩进”功能开始,后面会慢慢介绍,直至全部实现这些功能。

3. 扩展一个“缩进”功能

3.1 分析类型

参考【2.“前戏”】中的那个图,可以看到wangEditor现在提供的所有菜单。我们可以为这些菜单分分类

  1. 基本菜单:一步操作(鼠标点击、快捷键)即可完成,无需选择、无需输入,例如“加粗”、“列表”、“居中”等;
  2. 下拉框菜单:点击按钮只是为了弹出下拉框,而下拉框才是真正的执行者,需要选择一个下拉框的选项;
  3. 弹出框菜单:点击按钮只是为了弹出框,在弹出框中需要填写若干内容,弹出框中的某个按钮才是真正的执行者;

根据以上分类,发现“缩进”属于第一种类型。这就是我所说的“从最简单开始”的原因,当然了,下面两种类型后面文章都会讲解到。

3.2 借用上一节代码

上一节《轻量级web富文本框——wangEditor使用手册(1)——基本应用》中的代码,这里要继续借用。没看上一节的朋友,请先去补补课。截图如下:

技术分享

3.3 先看看加入缩进之后的代码

在上一节代码的基础上,我们先看看加入缩进之后的代码是什么样子的。然后对照着代码,我们挨个讲解。

技术分享

加入以上代码后,运行网页,我们会看到wangEditor的菜单栏中加入了两个自定义的按钮,而且鼠标放上之后,还会有title的提示:

技术分享

接下来让我们慢慢解释这些配置项的意思。

3.4 menuId

技术分享

新插入的代码中,“indent”和“outdent”是这两个按钮的id,类似与dom节点的id一样,它是按钮唯一的标识号,不能重复。重复的话,会导致后者覆盖前者。所以在定义的时候要特别注意。wangEditor中默认的菜单按钮的id如下,自定义id的时候,一定注意不要和这些id重复。

技术分享

有编程经验的人都知道,取id名字和取变量名字一样,要用词义法,不要用“a1”、“b2”这样的名称,时间久了甚至连你自己都不认识了。

3.5 titile(标题)

技术分享

在每个菜单配置中,title是必须写的!这里的title就随便去名字了,反正是写汉字,把这个按钮的名称写上就行了。

注意,有了title,按钮在鼠标放上之后,就会显示title。(如果有快捷键,也会连同一起显示,后文会讲到)

技术分享

3.6 type(类型)

技术分享

在上文的【3.1 分析类型】中,我们分析了wangEditor菜单按钮的三种类型,并确定“缩进”按钮属于第一种类型。

第一种类型我们就用“btn”来表示。其他两种类型分别用“dropMenu”和“modal”来表示,后面会有文章专门介绍。

3.7 txt (fontAwesome样式)

技术分享

(在此提醒,不了解fontAwesome的朋友可以先去看看《请用fontAwesome代替网页icon小图标》,fontAwesome这个东西非常好,也很简单,建议大家一定要去用)

“缩进”作为一个按钮,它长什么模样?我们现在还没确定呢。

大家进入http://www.thinkcmf.com/font/icons#text-editor页面,会看到好几百个icon小图标。所有这里有的,都可以拿到wangEditor中来用,我选中的是“fa-indent”和“fa-outdent”,我想大部分人都会选择这两个的。

技术分享

注意,不要忘记前面加上“fa ”,最后要组成“fa fa-indent”或“fa fa-outdent”这种格式,否则会不现实啊。其实,最终生成的代码就是

3.8 hotKey(快捷键)

技术分享

快捷键功能,可要可不要,看自己的需要。目前wangEditor中默认的快捷键有:

  1. ctrl + b  加粗
  2. ctrl + i 斜体
  3. ctrl + u 下划线
  4. ctrl + z 撤销

在这里,我给“增加缩进”加了一个快捷键“ctrl,shift + i”,另一个“减少缩进”没加快捷键。

注意,现在快捷键支持四个功能键的组合——“ctrl”、“shift”、“alt”、“meta”——外加一个字母。所以以下定义都是合法的:

  1. "ctrl + z"
  2. "ctrl,shift + i"
  3. "ctrl,shift,alt + a"
  4. "ctrl,shift,alt,meta + b"
  5. "meta,ctrl + t"
  6. …… (就不一一举例子了)

如果有快捷键,快捷键会连同title一起,当鼠标防止在按钮上时显示:

技术分享

最后,选择快捷键请慎重!浏览器本身就有的快捷键,例如“ctrl + n”就不要用了,总之,加入快捷键之后,一定要做好测试

3.9 command(document.execCommand命令名称)

技术分享

做web富文本编辑器最最核心的知识,就是document.execCommand命令。什么?你没用过document.execCommand?——没关系,别着急。

我这里既然是作为wangEditor的扩展配置,不可能要求各个开发人员都熟练使用document.execCommand。你只需要知道一些基本操作的命令名称(例如“indent”),把它写到规定的位置就可以了。按照《Javascript高级程序设计 - 第三版》中介绍,常用的基本命令(【3.1 分析类型】中介绍的第一种类型)有:

技术分享

这里注意

  • 这里列出来的只是基本命令(【3.1 分析类型】中介绍的第一种类型),其他两种类型,该文章不涉及,后续会有文章介绍;
  • 图中画框的目前wangEditor都已经实现了,所以留给大家的发挥余地不是特别多了;

3.10 callback(回调函数)

技术分享

callback函数是在执行完一个按钮的命令之后,系统触发的。其中,callback函数中的this就是$editor。($editor是什么?去上一节的【3. 使用富文本框】找答案吧)

3.11 传入自定义菜单

技术分享

我们把自己定义好的菜单(可以是若干个,本文有“indent”和“outdent”两个)统一作为参数,传入到wangEditor()中(注意外面的两个“{ }”),wangEditor就会自动追加这两个按钮,并且实现它们的功能(包括鼠标点击和快捷键)。

4. 总结

本文用了很大的篇幅讲解如何添加两个功能很简单的“缩进”按钮,虽然只有简单的20+代码,但是想要说明白了,也不是那么容易。我感觉自己已经讲的很详细了,但是不知道读者是否都明白了。

之所以将这么详细,是为后面的文章扫清障碍。所以,想要了解后面文章的内容,首先得把这一篇文章看明白了。祝君好运!

5. 下一步

不知道大家有没有发现一个问题

  • 其一,按照咱们日常的使用习惯,这两个按钮放在这里是否合适?
  • 其二,要是每增加一个按钮都默认放在后面,那可太不人性化了!

技术分享

有人可能说:第一节中不是已经讲到了配置菜单的方式了吗?用那个不行吗?——行!就是不好用!

有更好用的方式,咱们下一节介绍。回见! 另外,本文所使用的代码,可以在下载文件夹中的“demo_indent.html”查看。

下载地址:https://github.com/wangfupeng1988/wangEditor

demo演示http://www.cnblogs.com/wangfupeng1988/p/4185508.html

交流QQ群:164999061

-------------------------------------------------------------------------------------------------------------

欢迎关注我的微博。

也欢迎关注我的教程:

《从设计到模式》深入理解Javascript原型和闭包系列》《微软petshop4.0源码解读视频》《json2.js源码解读视频》

-------------------------------------------------------------------------------------------------------------

轻量级web富文本框——wangEditor使用手册(2)——扩展一个“缩进”功能


推荐阅读
  • 本文介绍了一个免费的asp.net控件,该控件具备数据显示、录入、更新、删除等功能。它比datagrid更易用、更实用,同时具备多种功能,例如属性设置、数据排序、字段类型格式化显示、密码字段支持、图像字段上传和生成缩略图等。此外,它还提供了数据验证、日期选择器、数字选择器等功能,以及防止注入攻击、非本页提交和自动分页技术等安全性和性能优化功能。最后,该控件还支持字段值合计和数据导出功能。总之,该控件功能强大且免费,适用于asp.net开发。 ... [详细]
  • 本文讨论了在手机移动端如何使用HTML5和JavaScript实现视频上传并压缩视频质量,或者降低手机摄像头拍摄质量的问题。作者指出HTML5和JavaScript无法直接压缩视频,只能通过将视频传送到服务器端由后端进行压缩。对于控制相机拍摄质量,只有使用JAVA编写Android客户端才能实现压缩。此外,作者还解释了在交作业时使用zip格式压缩包导致CSS文件和图片音乐丢失的原因,并提供了解决方法。最后,作者还介绍了一个用于处理图片的类,可以实现图片剪裁处理和生成缩略图的功能。 ... [详细]
  • 本文介绍了lua语言中闭包的特性及其在模式匹配、日期处理、编译和模块化等方面的应用。lua中的闭包是严格遵循词法定界的第一类值,函数可以作为变量自由传递,也可以作为参数传递给其他函数。这些特性使得lua语言具有极大的灵活性,为程序开发带来了便利。 ... [详细]
  • 基于layUI的图片上传前预览功能的2种实现方式
    本文介绍了基于layUI的图片上传前预览功能的两种实现方式:一种是使用blob+FileReader,另一种是使用layUI自带的参数。通过选择文件后点击文件名,在页面中间弹窗内预览图片。其中,layUI自带的参数实现了图片预览功能。该功能依赖于layUI的上传模块,并使用了blob和FileReader来读取本地文件并获取图像的base64编码。点击文件名时会执行See()函数。摘要长度为169字。 ... [详细]
  • 本文介绍了使用Java实现大数乘法的分治算法,包括输入数据的处理、普通大数乘法的结果和Karatsuba大数乘法的结果。通过改变long类型可以适应不同范围的大数乘法计算。 ... [详细]
  • 本文内容为asp.net微信公众平台开发的目录汇总,包括数据库设计、多层架构框架搭建和入口实现、微信消息封装及反射赋值、关注事件、用户记录、回复文本消息、图文消息、服务搭建(接入)、自定义菜单等。同时提供了示例代码和相关的后台管理功能。内容涵盖了多个方面,适合综合运用。 ... [详细]
  • Monkey《大话移动——Android与iOS应用测试指南》的预购信息发布啦!
    Monkey《大话移动——Android与iOS应用测试指南》的预购信息已经发布,可以在京东和当当网进行预购。感谢几位大牛给出的书评,并呼吁大家的支持。明天京东的链接也将发布。 ... [详细]
  • HDU 2372 El Dorado(DP)的最长上升子序列长度求解方法
    本文介绍了解决HDU 2372 El Dorado问题的一种动态规划方法,通过循环k的方式求解最长上升子序列的长度。具体实现过程包括初始化dp数组、读取数列、计算最长上升子序列长度等步骤。 ... [详细]
  • Voicewo在线语音识别转换jQuery插件的特点和示例
    本文介绍了一款名为Voicewo的在线语音识别转换jQuery插件,该插件具有快速、架构、风格、扩展和兼容等特点,适合在互联网应用中使用。同时还提供了一个快速示例供开发人员参考。 ... [详细]
  • 本文介绍了通过ABAP开发往外网发邮件的需求,并提供了配置和代码整理的资料。其中包括了配置SAP邮件服务器的步骤和ABAP写发送邮件代码的过程。通过RZ10配置参数和icm/server_port_1的设定,可以实现向Sap User和外部邮件发送邮件的功能。希望对需要的开发人员有帮助。摘要长度:184字。 ... [详细]
  • 动态规划算法的基本步骤及最长递增子序列问题详解
    本文详细介绍了动态规划算法的基本步骤,包括划分阶段、选择状态、决策和状态转移方程,并以最长递增子序列问题为例进行了详细解析。动态规划算法的有效性依赖于问题本身所具有的最优子结构性质和子问题重叠性质。通过将子问题的解保存在一个表中,在以后尽可能多地利用这些子问题的解,从而提高算法的效率。 ... [详细]
  • Java验证码——kaptcha的使用配置及样式
    本文介绍了如何使用kaptcha库来实现Java验证码的配置和样式设置,包括pom.xml的依赖配置和web.xml中servlet的配置。 ... [详细]
  • 高质量SQL书写的30条建议
    本文提供了30条关于优化SQL的建议,包括避免使用select *,使用具体字段,以及使用limit 1等。这些建议是基于实际开发经验总结出来的,旨在帮助读者优化SQL查询。 ... [详细]
  • 本文介绍了如何使用JSONObiect和Gson相关方法实现json数据与kotlin对象的相互转换。首先解释了JSON的概念和数据格式,然后详细介绍了相关API,包括JSONObject和Gson的使用方法。接着讲解了如何将json格式的字符串转换为kotlin对象或List,以及如何将kotlin对象转换为json字符串。最后提到了使用Map封装json对象的特殊情况。文章还对JSON和XML进行了比较,指出了JSON的优势和缺点。 ... [详细]
  • MVC设计模式的介绍和演化过程
    本文介绍了MVC设计模式的基本概念和原理,以及在实际项目中的演化过程。通过分离视图、模型和控制器,实现了代码的解耦和重用,提高了项目的可维护性和可扩展性。详细讲解了分离视图、分离模型和分离控制器的具体步骤和规则,以及它们在项目中的应用。同时,还介绍了基础模型的封装和控制器的命名规则。该文章适合对MVC设计模式感兴趣的读者阅读和学习。 ... [详细]
author-avatar
唯忻小十__
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有