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制作的产品广告效果
Dec 08 Javascript
情人节专属 纯js脚本1k大小的3D玫瑰效果
Feb 11 Javascript
Javascript实现数组中的元素上下移动
Apr 28 Javascript
javascript实现Java中的Map对象功能的实例详解
Aug 21 Javascript
极简主义法编写JavaScript类
Nov 02 Javascript
JS实现获取汉字首字母拼音、全拼音及混拼音的方法
Nov 14 Javascript
微信小程序如何获取用户信息
Jan 26 Javascript
javascript填充默认头像方法
Feb 22 Javascript
Vue中使用webpack别名的方法实例详解
Jun 19 Javascript
Vuex mutitons和actions初使用详解
Mar 04 Javascript
js核心基础之构造函数constructor用法实例分析
May 11 Javascript
typescript配置alias的详细步骤
Aug 12 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
ThinkPHP的Widget扩展实例
2014/06/19 PHP
PHP使用星号替代用户名手机和邮箱的实现代码
2018/02/07 PHP
Laravel中validation验证 返回中文提示 全局设置的方法
2019/09/29 PHP
php使用redis的几种常见操作方式和用法示例
2020/02/20 PHP
JavaScript 乱码问题
2009/08/06 Javascript
jquery 操作日期、星期、元素的追加的实现代码
2012/02/07 Javascript
javascript和jquery修改a标签的href属性
2013/12/16 Javascript
一款基jquery超炫的动画导航菜单可响应单击事件
2014/11/02 Javascript
JS DOM实现鼠标滑动图片效果
2020/09/17 Javascript
Bootstrap栅格系统的使用和理解2
2016/12/14 Javascript
Node.js用readline模块实现输入输出
2016/12/16 Javascript
ReactJs实现树形结构的数据显示的组件的示例
2017/08/18 Javascript
mpvue中使用flyjs全局拦截的实现代码
2018/09/13 Javascript
微信小程序常用赋值方法小结
2019/04/30 Javascript
详解Jest结合Vue-test-utils使用的初步实践
2019/06/27 Javascript
微信小程序全局变量改变监听的实现方法
2019/07/15 Javascript
微信小程序全局变量的设置、使用、修改过程解析
2019/09/24 Javascript
Node.js设置定时任务之node-schedule模块的使用详解
2020/04/28 Javascript
如何在postman中添加cookie信息步骤解析
2020/06/30 Javascript
Vue执行方法,方法获取data值,设置data值,方法传值操作
2020/08/05 Javascript
Vue+Java+Base64实现条码解析的示例
2020/09/23 Javascript
Python单元测试框架unittest使用方法讲解
2015/04/13 Python
python矩阵的转置和逆转实例
2018/12/12 Python
Python写一个基于MD5的文件监听程序
2019/03/11 Python
Python模拟伯努利试验和二项分布代码实例
2020/05/27 Python
pycharm sciview的图片另存为操作
2020/06/01 Python
猫途鹰:全球领先的旅游点评社区
2017/04/07 全球购物
儿科主治医生个人求职信
2013/09/23 职场文书
有针对性的求职自荐信
2013/11/14 职场文书
行政人员岗位职责
2013/12/08 职场文书
策划创业计划书
2014/02/06 职场文书
安全责任书怎么写
2014/07/28 职场文书
2015年秋季学校开学标语
2015/07/16 职场文书
同事离别感言
2015/08/04 职场文书
Kubernetes中Deployment的升级与回滚
2022/04/01 Servers