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 相关文章推荐
js 无提示关闭浏览器页面的代码
Mar 09 Javascript
JS分页效果示例
Oct 11 Javascript
java与javascript之间json格式数据互转介绍
Oct 29 Javascript
jquery在项目中做复选框时遇到的一些问题笔记
Nov 17 Javascript
javascript分页代码实例分享(js分页)
Dec 13 Javascript
购物车选中得到价格实现示例
Jan 26 Javascript
Firefox中使用outerHTML的2种解决方法
Jun 07 Javascript
javascript ASCII和Hex互转的实现方法
Dec 27 Javascript
详解如何实现一个简单的 vuex
Feb 10 Javascript
在layui.use 中自定义 function 的正确方法
Sep 16 Javascript
解决layui中onchange失效以及form动态渲染失效的问题
Sep 27 Javascript
抖音短视频(douyin)去水印工具的实现代码
Mar 30 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
用Flash图形化数据(一)
2006/10/09 PHP
php MsSql server时遇到的中文编码问题
2009/06/11 PHP
浅谈PHP链表数据结构(单链表)
2016/06/08 PHP
解决php 处理 form 表单提交多个 name 属性值相同的 input 标签问题
2017/05/11 PHP
基于Jquery的回车成tab焦点切换效果代码(Enter To Tab )
2010/11/14 Javascript
jquery获取元素索引值index()示例
2014/02/13 Javascript
使用 js+正则表达式为关键词添加链接
2014/11/11 Javascript
使用jQuery实现WordPress中的Ctrl+Enter和@评论回复
2016/05/21 Javascript
判断js的Array和Object的实现方法
2016/08/29 Javascript
AngularJS实现ajax请求的方法
2016/11/22 Javascript
微信公众号  提示:Unauthorized API function 问题解决方法
2016/12/05 Javascript
详解webpack+ES6+Sass搭建多页面应用
2018/11/05 Javascript
vue 页面回退mounted函数不执行的解决方案
2020/07/26 Javascript
在Vue中使用Viser说明(基于AntV-G2可视化引擎)
2020/10/28 Javascript
Nuxt.js 静态资源和打包的操作
2020/11/06 Javascript
[03:23:49]2016.12.17日完美“圣”典全回顾
2016/12/19 DOTA
[01:02:48]2018DOTA2亚洲邀请赛 4.1 小组赛 A组 LGD vs OG
2018/04/02 DOTA
Python配置文件解析模块ConfigParser使用实例
2015/04/13 Python
在Lighttpd服务器中运行Django应用的方法
2015/07/22 Python
关于Python正则表达式 findall函数问题详解
2018/03/22 Python
Python IDLE清空窗口的实例
2018/06/25 Python
Python实现手写一个类似django的web框架示例
2018/07/20 Python
使用python将excel数据导入数据库过程详解
2019/08/27 Python
python如何使用socketserver模块实现并发聊天
2019/12/14 Python
python wav模块获取采样率 采样点声道量化位数(实例代码)
2020/01/22 Python
Django用内置方法实现简单搜索功能的方法
2020/12/18 Python
Python爬虫实现selenium处理iframe作用域问题
2021/01/27 Python
浅析HTML5中的download属性使用
2019/03/13 HTML / CSS
以实惠的价格提供高品质的时尚:Newchic
2018/01/18 全球购物
Dower & Hall官网:英国小众轻奢珠宝品牌
2019/01/31 全球购物
洲际酒店集团英国官网:IHG英国
2019/07/10 全球购物
施工安全协议书
2013/12/11 职场文书
青春雷锋观后感
2015/06/10 职场文书
2016年七夕爱情寄语
2015/12/04 职场文书
优秀大学生申请书
2019/06/24 职场文书
CSS 实现多彩、智能的阴影效果
2021/05/12 HTML / CSS