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 相关文章推荐
载入进度条 效果
Jul 08 Javascript
javascript 添加和移除函数的通用方法
Oct 20 Javascript
javascript常用对话框小集
Sep 13 Javascript
js实现单击图片放大图片的方法
Feb 17 Javascript
JavaScript中的原始值和复杂值
Jan 07 Javascript
JavaScript检查子字符串是否在字符串中的方法
Feb 03 Javascript
论Bootstrap3和Foundation5网格系统的异同
May 16 Javascript
easyui datagrid 表格中操作栏 按钮图标不显示的解决方法
Jul 27 Javascript
Angular 2 利用Router事件和Title实现动态页面标题的方法
Aug 23 Javascript
基于Vue.js 2.0实现百度搜索框效果
Dec 28 Javascript
在Angular中实现一个级联效果的下拉框的示例代码
May 20 Javascript
Vue-router中hash模式与history模式的区别详解
Dec 15 Vue.js
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
重置版游戏视频
2020/04/09 魔兽争霸
php小型企业库存管理系统的设计与实现代码
2011/05/16 PHP
深入解析php中的foreach函数
2013/08/31 PHP
php中的比较运算符详解
2013/10/28 PHP
PHP实现获取文件后缀名的几种常用方法
2015/08/08 PHP
PHP实现的简单留言板功能示例【基于thinkPHP框架】
2018/12/07 PHP
参考:关于Javascript中实现暂停的几篇文章
2007/03/04 Javascript
js利用Array.splice实现Array的insert/remove
2009/01/13 Javascript
javascript sudoku 数独智力游戏生成代码
2010/03/27 Javascript
JQuery的一些小应用收集
2010/03/27 Javascript
基于jQuery实现点击同时更改两个iframe的网址
2010/07/01 Javascript
jquery trim() 功能源代码
2011/02/14 Javascript
jQuery关于导航条背景切换效果实现示例
2013/09/04 Javascript
jquery Easyui快速开发总结
2015/08/20 Javascript
jQuery插件FusionCharts绘制的2D帕累托图效果示例【附demo源码】
2017/03/28 jQuery
jQuery插件FusionCharts绘制的3D双柱状图效果示例【附demo源码】
2017/04/20 jQuery
vue.js移动端tab组件的封装实践实例
2017/06/30 Javascript
JavaScript中的return布尔值的用法和原理解析
2017/08/14 Javascript
深入理解Vue 的钩子函数
2018/09/05 Javascript
vue3.0 CLI - 2.1 -  component 组件入门教程
2018/09/14 Javascript
antd Upload 文件上传的示例代码
2018/12/14 Javascript
函数式编程入门实践(一)
2019/04/20 Javascript
python连接mongodb操作数据示例(mongodb数据库配置类)
2013/12/31 Python
python采用getopt解析命令行输入参数实例
2014/09/30 Python
跟老齐学Python之网站的结构
2014/10/24 Python
Python中scatter函数参数及用法详解
2017/11/08 Python
Python3计算三角形的面积代码
2017/12/18 Python
pyspark 读取csv文件创建DataFrame的两种方法
2018/06/07 Python
Python 多线程不加锁分块读取文件的方法
2018/12/11 Python
Python Django 页面上展示固定的页码数实现代码
2019/08/21 Python
python sklearn包——混淆矩阵、分类报告等自动生成方式
2020/02/28 Python
python新手学习使用库
2020/06/11 Python
序列化Python对象的方法
2020/08/01 Python
HTML5标签与HTML4标签的区别示例介绍
2013/07/18 HTML / CSS
app内嵌H5 webview 本地缓存问题的解决
2020/10/19 HTML / CSS
心理健康活动总结
2014/04/30 职场文书