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的表单验证-初识正则表达式
Mar 18 Javascript
JQuery 传送中文乱码问题的简单解决办法
May 24 Javascript
Base64(二进制)图片编码解析及在各种浏览器的兼容性处理
Feb 09 Javascript
Angular.JS中的this指向详解
May 17 Javascript
JavaScript实现带有子菜单和控件的slider轮播图效果
Nov 01 Javascript
vue 修改 data 数据问题并实时显示的方法
Aug 27 Javascript
vue如何进行动画的封装
Sep 26 Javascript
vue中引入第三方字体文件的方法示例
Dec 17 Javascript
6行代码实现微信小程序页面返回顶部效果
Dec 28 Javascript
vue.js中使用echarts实现数据动态刷新功能
Apr 16 Javascript
vuex存值与取值的实例
Nov 06 Javascript
Vue实现简易计算器
Feb 25 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实现字节数Byte转换为KB、MB、GB、TB的方法
2017/08/31 PHP
PHP使用PDO、mysqli扩展实现与数据库交互操作详解
2019/07/20 PHP
laravel excel 上传文件保存到本地服务器功能
2019/11/14 PHP
Laravel登录失败次数限制的实现方法
2020/08/26 PHP
jQuery 锚点跳转滚动条平滑滚动一句话代码
2010/04/30 Javascript
JS 实现导航栏悬停效果(续)
2013/09/24 Javascript
学习JavaScript设计模式之责任链模式
2016/01/18 Javascript
javascript html5移动端轻松实现文件上传
2020/03/27 Javascript
js本地图片预览实现代码
2016/10/09 Javascript
利用jquery获取select下拉框的值
2016/11/23 Javascript
javascript实现多张图片左右无缝滚动效果
2017/03/22 Javascript
React.Js添加与删除onScroll事件的方法详解
2017/11/03 Javascript
angularJs-$http实现百度搜索时的动态下拉框示例
2018/02/27 Javascript
jQuery 点击获取验证码按钮及倒计时功能
2018/09/20 jQuery
Node.JS用纯JavaScript生成图片或滑块式验证码功能
2019/09/12 Javascript
Layer+Echarts构建弹出层折线图的方法
2019/09/25 Javascript
VUE渲染后端返回含有script标签的html字符串示例
2019/10/28 Javascript
[01:52]PWL S2开团时刻第四期——DOTA2成语故事
2020/12/03 DOTA
Python中使用支持向量机(SVM)算法
2017/12/26 Python
windows10下python3.5 pip3安装图文教程
2018/04/02 Python
使用Python进行QQ批量登录的实例代码
2018/06/11 Python
利用Pycharm断点调试Python程序的方法
2018/11/29 Python
详解Python解决抓取内容乱码问题(decode和encode解码)
2019/03/29 Python
HTML5验证以及日期显示的实现详解
2013/07/05 HTML / CSS
亚马逊西班牙购物网站:amazon西班牙
2017/03/06 全球购物
法人代表委托书
2014/04/04 职场文书
表彰大会策划方案
2014/05/13 职场文书
企业安全生产标语
2014/06/06 职场文书
机电一体化专业求职信
2014/07/22 职场文书
教师职业道德事迹材料
2014/08/18 职场文书
辞职信怎么写
2015/02/27 职场文书
志愿服务心得体会
2016/01/15 职场文书
导游词之崇武古城
2019/10/07 职场文书
详解Redis实现限流的三种方式
2021/04/27 Redis
Redis+Lua脚本实现计数器接口防刷功能(升级版)
2022/02/12 Redis
python多次执行绘制条形图
2022/04/20 Python