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 相关文章推荐
ASP中用Join和Array,可以加快字符连接速度的代码
Aug 22 Javascript
各浏览器对link标签onload/onreadystatechange事件支持的差异分析
Apr 27 Javascript
输入框的字数时时统计—关于 onpropertychange 和 oninput 使用
Oct 21 Javascript
浅析XMLHttpRequest的缓存问题
Dec 13 Javascript
JS中getYear()和getFullYear()区别分析
Jul 04 Javascript
常见的jQuery选择器汇总
Nov 24 Javascript
VUE JS 使用组件实现双向绑定的示例代码
Jan 10 Javascript
AngularJS实现表格的增删改查(仅限前端)
Jul 04 Javascript
Bootstrap table使用方法汇总
Nov 17 Javascript
vue实现axios图片上传功能
Aug 20 Javascript
解决layui的form里的元素进行动态生成,验证失效的问题
Sep 14 Javascript
公众号SVG动画交互实战代码
May 31 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
让PHP COOKIE立即生效,不用刷新就可以使用
2011/03/09 PHP
PHP中source #N问题的解决方法
2014/01/27 PHP
PHP数据库处理封装类实例
2016/12/24 PHP
php中时间函数date及常用的时间计算
2017/05/12 PHP
php中输出json对象的值(实现方法)
2018/03/07 PHP
新手常遇到的一些jquery问题整理
2010/08/16 Javascript
js中判断控件是否存在
2010/08/25 Javascript
漂亮的jquery提示效果(仿腾讯弹出层)
2013/02/05 Javascript
解析offsetHeight,clientHeight,scrollHeight之间的区别
2013/11/20 Javascript
jquery 判断滚动条到达了底部和顶端的方法
2014/04/02 Javascript
javascript动态修改Li节点值的方法
2015/01/20 Javascript
JS实现下拉菜单赋值到文本框的方法
2015/08/18 Javascript
JavaScript中Number对象的toFixed() 方法详解
2016/09/02 Javascript
Vue.js系列之项目搭建(1)
2017/01/03 Javascript
js上传图片预览的实现方法
2017/05/09 Javascript
Node.js模块全局安装路径配置方法
2018/05/17 Javascript
vue .sync修饰符的使用详解
2018/06/15 Javascript
解决vue 打包发布去#和页面空白的问题
2018/09/04 Javascript
jquery添加div实现消息聊天框
2020/02/08 jQuery
jQuery实现点击滚动到指定元素上的方法分析
2020/03/19 jQuery
js实现带箭头的进度流程
2020/03/26 Javascript
javascript实现移动端触屏拖拽功能
2020/07/29 Javascript
[03:42]2016国际邀请赛中国区预选赛首日现场玩家采访
2016/06/26 DOTA
遗传算法之Python实现代码
2017/10/10 Python
使用django和vue进行数据交互的方法步骤
2019/11/11 Python
Python semaphore evevt生产者消费者模型原理解析
2020/03/18 Python
python环境搭建和pycharm的安装配置及汉化详细教程(零基础小白版)
2020/08/19 Python
纯css3无js实现的Android Logo(有简单动画)
2013/01/21 HTML / CSS
本科生求职简历的自我评价
2013/10/21 职场文书
自考毕业自我鉴定范文
2013/10/27 职场文书
党员群众路线承诺书
2014/05/20 职场文书
2014年材料员工作总结
2014/11/19 职场文书
小学四年级作文之写景
2019/08/23 职场文书
SQL Server 数据库实验课第五周——常用查询条件
2021/04/05 SQL Server
css display table 自适应高度、宽度问题的解决
2021/05/07 HTML / CSS
Mysql数据库按时间点恢复实战记录
2021/06/30 MySQL