https://cn.vuejs.org/v2/guide/custom-directive.html

在vue中,有时候我们会把抽象的方法封装为一个自定义指令,多个地方共用

比如:拖拽指令

 <div id="myChart1" class="myChart1" v-drag>
{{positionX}}
{{positionY}}
</div>
 data () {
return {
positionX: ,
positionY: ,
parentWidth: ,
parentHeight:
}
},
directives: {
drag: {
inserted: function (el, binding, vnode) {
let _this = vnode.context // 指令里要想获取vue实例,可以使用vnode.context
let parentWidth = _this.$refs.test.offsetWidth
let parentHeight = _this.$refs.test.offsetHeight
let odiv = el // 获取目标元素
odiv.onmousedown = (e) => {
console.log(e) // 这俩个e一样
// 算出鼠标相对元素的位置
let disX = e.clientX - odiv.offsetLeft
let disY = e.clientY - odiv.offsetTop // 并移动的事件
document.onmousemove = (e) => {
console.log(e) // 这俩个e一样
// 用鼠标的位置减去鼠标相对元素的位置,得到元素的位置
let left =
let top =
if ((e.clientX - disX) < ) {
left =
} else if ((e.clientX - disX) > (parentWidth - odiv.offsetWidth)) {
left = parentWidth - odiv.offsetWidth
} else {
left = e.clientX - disX
} if ((e.clientY - disY) < ) {
top =
} else if ((e.clientY - disY) > (parentHeight - odiv.offsetHeight)) {
top = parentHeight - odiv.offsetHeight
} else {
top = e.clientY - disY
} // 绑定元素位置到positionX和positionY上面
_this.positionX = top
_this.positionY = left // 移动当前元素
odiv.style.left = left + 'px'
odiv.style.top = top + 'px'
}
document.onmouseup = (e) => {
document.onmousemove = null
document.onmouseup = null
}
}
}
}
},

备注:

1、使用this.$refs获取动态值的时候,要这样写   this.$refs['value']

2、拖拽的div样式要特别注意:position要为absolute,不能用transform: translate(),否则拖拽后样式会异常

vue自定义指令笔记的更多相关文章

  1. vue自定义指令

    Vue自定义指令: Vue.directive('myDr', function (el, binding) { el.onclick =function(){ binding.value(); } ...

  2. vue 自定义指令的使用案例

    参考资料: 1. vue 自定义指令: 2. vue 自定义指令实现 v-loading: v-loading,是 element-ui 组件库中的一个用于数据加载过程中的过渡动画指令,项目中也很少需 ...

  3. vue自定义指令(Directive中的clickoutside.js)的理解

    阅读目录 vue自定义指令clickoutside.js的理解 回到顶部 vue自定义指令clickoutside.js的理解 vue自定义指令请看如下博客: vue自定义指令 一般在需要 DOM 操 ...

  4. Vue自定义指令报错:Failed to resolve directive: xxx

    Vue自定义指令报错 Failed to resolve directive: modle 这个报错有2个原因: 1.指令单词拼错 2.Vue.directive() 这个方法没有写在 new Vue ...

  5. vue自定义指令clickoutside使用以及扩展用法

    vue自定义指令clickoutside使用以及扩展用法 产品使用vue+element作为前端框架.在功能开发过程中,难免遇到使用element的组件没办法满足特殊的业务需要,需要对其进行定制,例如 ...

  6. vue自定义指令clickoutside扩展--多个元素的并集作为inside

    都是个人理解,如果发现错误,恳请大家批评指正,谢谢.还有我说的会比较啰嗦,因为是以自身菜鸡水平的视角来记录学习理解的过程,见谅. 1.前言 产品使用vue+element作为前端框架.在功能开发过程中 ...

  7. 每个人都能实现的vue自定义指令

    前文 先来bb一堆废话哈哈.. 用vue做项目也有一年多了.除了用别人的插件之外.自己也没尝试去封装指令插件之类的东西来用. 刚好最近在项目中遇到一个问题.(快速点击按钮多次触发多次绑定的方法),于是 ...

  8. vue自定义指令,比onerror更优雅的方式实现当图片加载失败时使用默认图,提供三种方法

    首先,来看下效果图(演示一下图片正常加载与加载失败时的效果) 在线体验地址:https://hxkj.vip/demo/vueImgOnerror/ 一.常规方法解决 我们都知道,img标签支持one ...

  9. Vue自定义指令使用场景

    当你第一次接触vue的时候,一定会使用到其中的几个指令,比如:v-if.v-for.v-bind...这些都是vue为我们写好的,用起来相当的爽.如果有些场景不满足,需要我们自己去自定义,那要怎么办呢 ...

随机推荐

  1. SpringCloud Zuul2.X网关实现服务熔断降级(复制即用)

    版本: <properties> <spring-boot.version>.RELEASE</spring-boot.version> <spring-cl ...

  2. Redis 常用知识

    Redis 介绍 Redis 一个开源的使用ANSI C语言编写.遵守BSD协议,内存中的数据结构存储系统,它可以用作Key-Value数据库.缓存和消息中间件,并提供多种语API. 支持多种数据结构 ...

  3. Additional information: The maximum message size quota for incoming messages (65536) has been exceeded. To increase the quota, use the MaxReceivedMessageSize property on the appropriate binding elemen

    wcf service: <system.serviceModel> <bindings> <basicHttpBinding> <binding name= ...

  4. html中的a标签详解

    事故起源于一个魔鬼测试人员,某天做网站UI优化的时候,突然甩了一个问题给我 第二列的数据是可以跳转至其他页面的,但是,魔鬼测试的电脑上,一直都有一条数据是与其他的样式不同,于是便甩了这个问题给我,我一 ...

  5. ftp上传文件,上传的文件大小是0

    此问题是最近出现,代码和配置完全没改,试过所有的办法,两天了一直都解决不了,用完弃坑. 防火墙.被动模式主动模式,编码,服务端内存,日志,common-net.jar版本问题,服务端配置,nginx配 ...

  6. java 初学 :求 s=a+aa+aaa+aaaa+aa...a 的值,其中 a 是一个数字。几个 数相加由键盘控制。

    import java.util.Scanner; public static void main(String[] args) {       Scanner input=new Scanner(S ...

  7. ES6.x

    类 class Animal{ constructor(name){ this.name=name } Spack(){ console.log(name) } } class Dog extends ...

  8. Vant-Weap通过事件获取值

    van-field框的使用 和通过事件获取值 <van-cell-group> <van-field value="{{username}}" label=&qu ...

  9. doc 如何在指定的位置打印字符和颜色

    编程:在屏幕中间分别显示绿色,绿底红色,白底蓝色的字符串weclome to masm! B8000H~BFFFFH共32KB 的空间,为80*25彩色字符模式的显示缓冲区. 在80*25彩色字符模式 ...

  10. Microsemi Libero系列教程(一)——Libero开发环境介绍、下载、安装与注册

    前言 相比与Xilinx和Altera在国内的市场,Microsemi的FPGA在国内应用很少很少,网上几乎没有详细的教程,刚开始使用时,遇到了各种问题,自己也走了不少弯路.本系列教程以Libero ...