介绍
这篇文章主要介绍”vue中有哪些自定义指令”,在日常操作中,相信很多人在vue中有哪些自定义指令问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答“vue中有哪些自定义指令”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!
<强>四个实用的vue自定义指令强>
<强> 1,强> <强> <代码> v-drag 代码> 强>
需求:鼠标拖动元素
思路:
- <李>
元素偏移量=鼠标滑动后的坐标——鼠标初始点击元素时的坐标+初始点击时元素距离可视区域的,离开了。
李> <李>将可视区域作为边界,限制在可视区域里面拖拽。
李>代码:
Vue.directive(& # 39;拖# 39;,,{ 插入才能(el), { ,,,let header =, el.querySelector (& # 39; .dialog_header& # 39;) ,,,header.style.cssText +=, & # 39;;游标:移动;& # 39; ,,,header.onmousedown =, function (e), { ,,,,,//获取当前可视区域宽,高 ,,,,,let clientWidth =document.documentElement.clientWidth ,,,,,let clientHeight =document.documentElement.clientHeight ,,,,,//获取自身宽高 ,,,,,let elWidth =, el.getBoundingClientRect .width () ,,,,,let elHeight =, el.getBoundingClientRect .height () ,,,,,//获取当前距离可视区域的,离开了 ,,,,,let elTop =, el.getBoundingClientRect直()上 ,,,,,let elLeft =, el.getBoundingClientRect .left () ,,,,,//获取点击时候的坐标 ,,,,,let startX =e.pageX ,,,,,let startY =e.pageY ,,,,,document.onmousemove =, function (e), { ,,,,,,,//元素偏移量,=,鼠标滑动后的坐标,安康;鼠标初始点击元素时的坐标,+,初始点击时元素距离可视区域的,离开了 ,,,,,,,let moveX =, e.pageX 作用;startX + elLeft ,,,,,,,let moveY =, e.pageY 作用;startY + elTop ,,,,,,,//将可视区域作为边界,限制在可视区域里面拖拽 ,,,,,,,if ((时间+ moveX elWidth),祝辞,clientWidth | |, moveX & lt;, 0, | |,(时间+ moveY elHeight),祝辞,clientHeight | |, moveY & lt;, 0), { ,,,,,,,,,回来 ,,,,,,,} ,,,,,,,el.style.cssText +=, & # 39;: & # 39;, +, moveY +, & # 39; px;左:& # 39;,+,moveX +, & # 39; px; & # 39; ,,,,,} ,,,,,document.onmouseup =, function (), { ,,,,,,,document.onmousemove =零 ,,,,,,,document.onmouseup =零 ,,,,,} ,,,} ,,} })
<强> 2,强> <强> <代码> v-wordlimit 代码> 强>
需求:后台字段限制了长度,并且区分中英文,中文两个字节,英文一个字节,所以输入框需要限制输入的字数并且区分字节数,且需回显已输入的字数。
思路:
- <李>
一个字节的正则/[\ x00 - \ xff]/g
李> <李>创建包裹字数限制的元素,并定位布局在文本区域和输入框上
李> <李>分别计算输入的字符一个字节的有enLen个,两个字节的有cnLen个;用来后面字符串截断处理
李> <李>当输入的字数超过限定的字数,截断处理,substr (0, enLen + cnLen)
李> <李>接口更新了输入框的值,或者初始化输入框的值,需要回显正确的字节数
李>代码:
Vue.directive (& # 39; wordlimit& # 39;, { 绑定绑定才能(el) { ,,,console.log(& # 39;结合# 39;); ,,,let {, value },=,绑定 ,,,Vue.nextTick((),=在{ ,,,,,//找到输入框是textarea框还是输入框 ,,,,,let current =0 ,,,,,let arr =, Array.prototype.slice.call (el.children) ,,,,,for (let 小姐:=,0;,小姐:& lt;, arr.length;,我+ +),{ ,,,,,,,如果(arr[我].tagName==& # 39;文本区域# 39;,| |,arr[我].tagName==& # 39;输入# 39;){ ,,,,,,,,,current =我 ,,,,,,,} ,,,,,} ,, ,,,,,//更新当前输入框的字节数 ,,,,,el.children [el.children.length-1] .innerHTML =, el.children[现在].value.replace (/[^ \ x00 - \ xff]/g, & # 39; * * & # 39;) .length + & # 39;/& # 39; +//eslint-disable-line价值 null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null nullvue中有哪些自定义指令