Vue.directive自定义指令的使用详解


Posted in Javascript onMarch 10, 2017

很多教程都是在讲自定义指令的概念和语法,看的相当蛋疼.本文不讲语法和概念,只讲用法.

自定义指令基本就是用来操作DOM的,虽然官方推荐数据驱动视图,有时候还是需要自定义指令来操作DOM,指令可复用.

1. 自定义指令实现拖拽

HTML:

<div v-drag>我可以拖拽</div>

JS:

Vue.directive('drag', 
 inserted:function(el){ //inserted 钩子函数:当元素被插入父元素时触发,可省略
  let oDiv=el; //el --> 触发的DOM元素
  oDiv.onmousedown=function(e){
    let l=e.clientX-oDiv.offsetLeft;
    let t=e.clientY-oDiv.offsetTop;
    document.onmousemove=function(e){
      oDiv.style.left=e.clientX-l+'px';
      oDiv.style.top=e.clientY-t+'px';
    };
    oDiv.onmouseup=function(){
      document.onmousemove=null;
      oDiv.onmouseup=null;
    }
  }
})

自定义指令还可以引入第三方插件,之前都是用JQuery来构建项目.

自定义指令的好处就是不管之前是用什么写的JQuery还好或是原生js也好都可以直接拿来封装成自定义指令,不需要重写

例如这个拖拽:

Drag.js:

export default function(el){
  let oDiv=el;
  oDiv.onmousedown=function(e){
    let l=e.clientX-oDiv.offsetLeft;
    let t=e.clientY-oDiv.offsetTop;
    document.onmousemove=function(e){
      oDiv.style.left=e.clientX-l+'px';
      oDiv.style.top=e.clientY-t+'px';
    };
    oDiv.onmouseup=function(){
      document.onmousemove=null;
      oDiv.onmouseup=null;
    }
  }
}

Vue:

import drag from 'drag.js'
Vue.directive('drag',drag)

HTML:

<div v-drag>我可以拖拽</div>

2. 图片加载

图片在加载过程中,未加载完成时,使用一个随机的颜色占位,图片加载完后直接显示,可以使用自定义指令来完成

HTML:

<img v-imgUrl="url"></img> //参数不可以直接填写url地址

  data () {
    url:'src/assets/logo.png'
  }

Vue:

Vue.directive('imgUrl',function(el,binding){
    var color=Math.floor(Math.random()*1000000);//设置随机颜色
    el.style.backgroundColor='#'+color;

    var img=new Image();
    img.src=binding.value;// -->binding.value指的是指令后的参数
    img.onload=function(){
      el.style.backgroundColor='';
      el.src=binding.value;      
    }
  })

可以使用lodash.js工具库

vue更多的API整理-->GO

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
jquery实现图片渐变切换兼容ie6/Chrome/Firefox
Aug 02 Javascript
JavaScript中的object转换成number或string规则介绍
Dec 31 Javascript
JavaScript中的全局对象介绍
Jan 01 Javascript
JavaScript实现Java中StringBuffer的方法
Feb 09 Javascript
jquery ajax结合thinkphp的getjson实现跨域的方法
Jun 06 Javascript
浅谈事件冒泡、事件委托、jQuery元素节点操作、滚轮事件与函数节流
Jul 22 jQuery
基于vue cli 通过命令行传参实现多环境配置
Jul 12 Javascript
layer.confirm点击第一个按钮关闭弹出框的方法
Sep 09 Javascript
JS插入排序简单理解与实现方法分析
Nov 25 Javascript
javascript实现简易的计算器
Jan 17 Javascript
openLayer4实现动态改变标注图标
Aug 17 Javascript
axios封装与传参示例详解
Oct 18 Javascript
Node.js如何响应Ajax的POST请求并且保存为JSON文件详解
Mar 10 #Javascript
微信小程序 图片加载(本地,网路)实例详解
Mar 10 #Javascript
微信小程序 页面传值详解
Mar 10 #Javascript
详解Vue生命周期的示例
Mar 10 #Javascript
jQuery表格(Table)基本操作实例分析
Mar 10 #Javascript
微信小程序 wx.login解密出现乱码的问题解决办法
Mar 10 #Javascript
微信小程序 出现47001 data format error原因解决办法
Mar 10 #Javascript
You might like
教你如何把一篇文章按要求分段
2006/10/09 PHP
SSO单点登录的PHP实现方法(Laravel框架)
2016/03/23 PHP
PHP二维数组去重算法
2016/12/17 PHP
PHP array_shift()用法实例分析
2019/01/07 PHP
javascript 极速 隐藏/显示万行表格列只需 60毫秒
2009/03/28 Javascript
jquery实现带复选框的表格行选中删除时高亮显示
2013/08/01 Javascript
使用时间戳解决ie缓存的问题
2014/08/20 Javascript
js的touch事件的实际引用
2014/10/13 Javascript
基于jQuery实现的旋转彩圈实例
2015/06/26 Javascript
js+html5实现可在手机上玩的拼图游戏
2015/07/17 Javascript
jquery转盘抽奖功能实现
2015/11/13 Javascript
javascript新闻跑马灯实例代码
2020/07/29 Javascript
jQuery插件Validate实现自定义表单验证
2016/01/18 Javascript
JQuery ZTree使用方法详解
2017/01/07 Javascript
jQuery事件详解
2017/02/23 Javascript
jQuery使用EasyUi实现三级联动下拉框效果
2017/03/08 Javascript
vue2.0 和 animate.css的结合使用
2017/12/12 Javascript
JavaScript中创建原子的方法总结
2018/08/26 Javascript
react脚手架如何配置less和ant按需加载的方法步骤
2018/11/28 Javascript
vue组件中iview的modal组件爬坑问题之modal的显示与否应该是使用v-show
2019/04/12 Javascript
使用Python下载Bing图片(代码)
2013/11/07 Python
理解Python中的类与实例
2015/04/27 Python
Python selenium文件上传方法汇总
2020/11/19 Python
好的Python培训机构应该具备哪些条件
2018/05/23 Python
获取django框架orm query执行的sql语句实现方法分析
2019/06/20 Python
django 类视图的使用方法详解
2019/07/24 Python
python爬虫豆瓣网的模拟登录实现
2019/08/21 Python
Python分割训练集和测试集的方法示例
2019/09/19 Python
基于Python新建用户并产生随机密码过程解析
2019/10/08 Python
Python编程快速上手——强口令检测算法案例分析
2020/02/29 Python
使用css3绘制出各种几何图形
2016/08/17 HTML / CSS
英国领先的酒类网上商城:TheDrinkShop
2017/03/16 全球购物
2014年大学生自我评价
2014/01/19 职场文书
授权委托书范文
2014/07/31 职场文书
Python如何解决secure_filename对中文不支持问题
2021/07/16 Python
使用Python开发冰球小游戏
2022/04/30 Python