更新时间:2021-08-23 00:51:16
更新说明:重构控件, 新增监视器.
初始化
1 | new WordCount(ele) // 可以为selector也可以为dom对象.(需要为input或textarea)` |
或是设置dom上的 data-control 属性为 word-count, 将会自动初始化控件.
> 详情信息请查看源码.
发布时间:2018-12-16 12:28:10
这是一个由JavaScript编写而成的字数统计插件.
1. 自动更新字数统计显示位置随着你的输入.
2. 接近字数上限时当前字数会标红.
3. 自动改变输入框大小随着你的输入内容.
1 | <sciprt src="./js/bootstrap.js"></script> |
自动执行
1 | <sciprt src="./js/app.js"></script> |
字数统计控件
1 | <sciprt src="./js/word-count-control.js"></script> |
找到`<textarea></textarea>`标签的父容器并且添加`class="word-count"`与`data-max-length="200"`.
1 2 3 | <div class="word-count" data-max-length="300" data-will-full="20"> <textarea></textarea></div> |
属性说明
| 属性 | 描述 | 数据类型 | 是否必须 |
| data-max-length | 设置允许字数上限 | 整形 | 是 |
| data-will-full | 设置当前输入字数与上限字数之间差值为多少时开启提醒, 若不设则使用默认值 | 整形 | 否 |
代码运行流程
** 文件使用顺序 bootstrap.js -> app.js -> word-count-control.js **
bootstrap.js中
当DOM结构加载完毕后执行以下的方法.
1 2 3 4 | function __buildBootstrap () { _JM = new Demo.App(); _JM.execute();} |
app.js
初始化`Demo`对象并且赋值空对象给`controllers`属性
1 2 3 4 | var Demo = {};Demo.App = function () { this.controllers = {};}; |
`Demo.controllers`可以理解为一个容器, 里面存放你写的每个不同功能的模块类, 并且会自动执行一些规定的方法.
可以通过如下方法取得对应模块
1 2 3 | Demo.App.prototype.get = function(controller) { return this.controllers[controller];}; |
自动执行类中相应的函数方法
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 | Demo.App.prototype.execute = function() { for (var className in Demo) { if (className !== "App") { // 实例化类并传入自身 var controller = new Demo[className](this); this.controllers[className] = controller; // 执行模块的execute方法 if (typeof controller.execute === "function") { controller.execute(); } // 执行模块的listen方法 if (typeof controller.listen === "function") { controller.listen(); } // 执行模块的focus方法 if (typeof controller.focus === "function") { controller.focus(); } // 快捷键操作(键盘操作) if (typeof controller.keyboardShortcuts === "function") { // 获取顶层文档 var topDocument = document; if (window.self != window.top) { topDocument = window.parent.document; } topDocument.onkeyup = document.onkeyup = function (e) { e = e || window.event; controller.keyboardShortcuts(e); }; } // 执行每个模块中以init开头的初始化函数 if (typeof this.controllers[className].init != 'undefined') { for (var initName in this.controllers[className].init) { this.controllers[className].init[initName](); } } } }}; |
word-count-control.js
获取模块容器并保存起来
1 2 3 | Demo.WordCountControl = function (app) { this.app = app;}; |
初始化`init`变量
1 | Demo.WordCountControl.prototype.init = {}; |
实现`listen`方法
1 | Demo.WordCountControl.prototype.listen = function () {} |
自动引入`css`样式表
1 2 3 4 5 6 7 | Demo.WordCountControl.prototype.init['Css'] = function () { var headDom = document.querySelector('head'); var wordCountCss = document.createElement('link'); wordCountCss.setAttribute('rel', 'stylesheet'); wordCountCss.href = './css/word-count-control.css'; headDom.appendChild(wordCountCss);} |
初始化控件的相关代码在此不做赘述, 比较简单.
这样的写法是我在阅读一个php的开源项目时学到的, 因为本人不是很熟悉前端的一些规范/架构什么的所以理解之后直接拿过来用, 这个控件算是一个练手之作, 前端我不是掌握的很好, 如果有什么需要改进的地方可以在下方留言评论.
三个js文件也可以使用nodejs中的glup组件进行压缩使用.
在此感谢写这个开源项目的大佬, 从里面我学到很多.
特别申明:
本站所有资源都是由网友投稿发布,或转载各大下载站,请自行检测软件的完整性!
本站所有资源仅供学习与参考,请勿用于商业用途,否则产生的一切后果将由您自己承担!
如有侵权请联系我们删除下架,联系方式:lei1294551502@163.com