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 相关文章推荐
JavaScript中各种编码解码函数的区别和注意事项
Aug 19 Javascript
麻雀虽小五脏俱全 Dojo自定义控件应用
Sep 04 Javascript
javascript从右边截取指定字符串的三种实现方法
Nov 29 Javascript
jQuery中innerHeight()方法用法实例
Jan 19 Javascript
JavaScript中使用数组方法汇总
Feb 16 Javascript
解决给dom元素绑定click等事件无效问题的方法
Feb 17 Javascript
Vue学习笔记进阶篇之多元素及多组件过渡
Jul 19 Javascript
vue axios请求拦截实例代码
Mar 29 Javascript
vue2.0实现移动端的输入框实时检索更新列表功能
May 08 Javascript
jQuery获取随机颜色的实例代码
May 21 jQuery
解决LayUI数据表格复选框不居中显示的问题
Sep 25 Javascript
JS实现旋转木马轮播图
Jan 01 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相当简单的分页类
2008/10/02 PHP
比较时间段一与时间段二是否有交集的php函数
2011/05/31 PHP
探讨PHP JSON中文乱码的解决方法详解
2013/06/06 PHP
PHP实现验证码校验功能
2017/11/16 PHP
Laravel中为什么不使用blpop取队列详析
2018/08/01 PHP
laravel框架中控制器的创建和使用方法分析
2019/11/23 PHP
js 图片缩放(按比例)控制代码
2009/05/27 Javascript
js中匿名函数的N种写法
2010/09/08 Javascript
JavaScript中的onerror事件概述及使用
2013/04/01 Javascript
jQuery使用ajaxSubmit()提交表单示例
2014/04/04 Javascript
JavaScript二维数组实现的省市联动菜单
2014/05/08 Javascript
js中style.display=&quot;&quot;无效的解决方法
2014/10/30 Javascript
js获取数组的最后一个元素
2015/04/14 Javascript
用js实现放大镜的效果的简单实例
2016/05/23 Javascript
JavaScript判断是否是微信浏览器
2016/06/13 Javascript
基于js中的原型、继承的一些想法
2016/08/10 Javascript
JS如何设置iOS中微信浏览器的title
2016/11/22 Javascript
使用jQuery实现一个类似GridView的编辑,更新,取消和删除的功能
2017/03/15 Javascript
jquery单击文字或图片内容放大并居中显示
2017/06/23 jQuery
原生JS上传大文件显示进度条 php上传文件代码
2020/03/27 Javascript
Gulp实现静态网页模块化的方法详解
2018/01/09 Javascript
Vue.js 图标选择组件实践详解
2018/12/03 Javascript
详解Vue 匿名、具名和作用域插槽的使用方法
2019/04/22 Javascript
对layui数据表格动态cols(字段)动态变化详解
2019/10/25 Javascript
使用Python抓取模板之家的CSS模板
2015/03/16 Python
在Python中使用poplib模块收取邮件的教程
2015/04/29 Python
Python自定义类的数组排序实现代码
2016/08/28 Python
Python时间戳使用和相互转换详解
2017/12/11 Python
Python实现判断字符串中包含某个字符的判断函数示例
2018/01/08 Python
Python实现随机生成任意数量车牌号
2020/01/21 Python
Django使用rest_framework写出API
2020/05/21 Python
HTML 5 input placeholder 属性如何完美兼任ie
2014/05/12 HTML / CSS
党干部专题民主生活会对照检查材料思想汇报
2014/10/06 职场文书
2015年外联部工作总结
2015/04/03 职场文书
python读取mat文件生成h5文件的实现
2022/07/15 Python
Redis主从复制操作和配置详情
2022/09/23 Redis