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. 死磕 java线程系列之线程池深入解析——构造方法

    (手机横屏看源码更方便) 注:java源码分析部分如无特殊说明均基于 java8 版本. 简介 ThreadPoolExecutor的构造方法是创建线程池的入口,虽然比较简单,但是信息量很大,由此也能 ...

  2. Python的输入输出的应用

    输入输出主要掌握print()和input()两个函数的应用. #print函数用于控制台输出 print('I love Python.','So I want to learn it.','I b ...

  3. seaborn画出的一些好看的图片

    PYSPARK_DRIVER_PYTHON=/home/zhangyu/anaconda3/bin/jupyter-notebook PYSPARK_DRIVER_PYTHON_OPTS=" ...

  4. Iterable与Collection源码学习

    接口 - Iterable<T> - 可迭代 描述 实现本接口的类,其对象可以被迭代.同时支持forEach语法 方法 Iterator<T> iterator() 类型 抽象 ...

  5. APP爬虫(1)想学新语言,又没有动力,怎么办?

    最近Python和GO语言很火,想学但是只能看得懂21天精通这种级别的教程.公司的项目暂时不会上py或go的技术栈,给的薪资福利待遇还可以,暂时又不想辞职.没有项目实战经验,完全看不懂大神写的干货,怎 ...

  6. Java8_stream的map和flatmap

    假如我们有这样一个需求给定单词列表["Hello","World"],你想要返回列表["H","e","l&q ...

  7. Nginx:反向代理

    与众不同的生活方式很累人呢,因为找不到借口     在上一章节中,我们以及了解到正向.反向代理.负载均衡和动静分离的基本概念,安装教程,而在本节中将会了解到在 本文要点: 1.理清概念 2.Linux ...

  8. @ImportResource

    1. @ImportResource(locations = {"classpath:beantest.xml"})标注到启动类上,从类路径下加载xml文件,通过Applicati ...

  9. JS数组去除空值

    /** * 扩展Array方法, 去除数组中空白数据 */ Array.prototype.notempty = function() { var arr = []; this.map(functio ...

  10. VUE中 $on, $emit, v-on三者关系

    VUE中 $on, $emit, v-on三者关系 每个vue实例都实现了事件借口 使用$on(eventName)监听事件 使用$emit(eventName)触发事件 若把vue看成家庭(相当于一 ...