更新时间: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