Vue实现简单的拖拽效果


Posted in Javascript onAugust 25, 2020

本文实例为大家分享了Vue实现简单拖拽效果的具体代码,供大家参考,具体内容如下

自定义指令v-drag

l 存在时 只能横向拖拽

t 存在时 只能纵向拖拽

lt都存在时 可以任意方向拖拽

<!DOCTYPE html>
<html lang="en">
<head>
 <meta charset="UTF-8">
 <meta name="viewport" content="width=device-width, initial-scale=1.0">
 <meta http-equiv="X-UA-Compatible" content="ie=edge">
 <title>拖拽</title>
 <style>
  *{
   margin: 0;
   padding: 0;
  }
  #box{
   background: red;
   width: 100px;
   height: 100px;
   position: absolute;
 
  }
 </style>
 <script src="vue.js"></script>
</head>
<body>
 <div id="app">
  <div id="box" v-drag.l.t="flag"></div>
 </div>
 <script>
  Vue.directive("drag",(el,{modifiers,value})=>{
   let{l,t}=modifiers;
 
 
   el.addEventListener("mousedown",handleDownCb)
 
   let disX,disY;
   function handleDownCb(e){
    disX=e.offsetX;
    disY=e.offsetY;
    // console.log(disX,disY)
    document.addEventListener("mousemove",handleMoveCb);
    document.addEventListener("mouseup",handleUpCb);
   }
 
   function handleMoveCb(e){
    let x=e.clientX-disX;
    let y=e.clientY-disY;
    if((l&&t) && value){
     el.style.left=x+"px";     
     el.style.top=y+"px";
     return;
    }
 
    if(l&&value){
     el.style.left=x+"px";     
     return;
    }
    if(t&&value){
     el.style.top=y+"px";
     return;
    }
   }
 
   function handleUpCb(){
    document.removeEventListener("mousemove",handleMoveCb);
    document.removeEventListener("mouseup",handleUpCb);
   }
 
  })
  let vm=new Vue({
   el:"#app",
   data:{
    flag:true
   }
  })
 </script>
</body>
</html>

注:

改变v-drag.l  v-drag.t  v-drag.l.t  即可实现横向 纵向 任意方向的拖拽

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
jQuery实现的多选框多级联动插件
May 02 Javascript
JavaScript onkeydown事件入门实例(键盘某个按键被按下)
Oct 17 Javascript
JavaScript精炼之构造函数 Constructor及Constructor属性详解
Nov 05 Javascript
JavaScript事件代理和委托详解
Apr 08 Javascript
Javascript 实现放大镜效果实例详解
Dec 03 Javascript
原生js实现倒计时功能(多种格式调用)
Jan 12 Javascript
angularjs中回车键触发某一事件的方法
Apr 24 Javascript
Vue.js中轻松解决v-for执行出错的三个方案
Jun 09 Javascript
js实现图片轮播效果学习笔记
Jul 26 Javascript
react native 文字轮播的实现示例
Jul 27 Javascript
Vue 实现复制功能,不需要任何结构内容直接复制方式
Nov 09 Javascript
EXTJS7实现点击拖拉选择文本
Dec 17 Javascript
浅谈JavaScript节流和防抖函数
Aug 25 #Javascript
JS实现拖动模糊框特效
Aug 25 #Javascript
PHP读取远程txt文档到数组并实现遍历
Aug 25 #Javascript
JS轮播图的实现方法2
Aug 25 #Javascript
JS轮播图的实现方法
Aug 24 #Javascript
js 函数性能比较方法
Aug 24 #Javascript
JavaScript实现简单验证码
Aug 24 #Javascript
You might like
第五节 克隆 [5]
2006/10/09 PHP
php引用计数器进行垃圾收集机制介绍
2012/09/19 PHP
PHP中操作ini配置文件的方法
2013/04/25 PHP
php实现图片压缩处理
2020/09/09 PHP
JSON+JavaScript处理JSON的简单例子
2013/03/20 Javascript
解析javascript系统错误:-1072896658的解决办法
2013/07/08 Javascript
JS中判断null、undefined与NaN的方法
2014/03/26 Javascript
原生的强大DOM选择器querySelector介绍
2016/12/21 Javascript
原生js实现类似fullpage的单页/全屏滚动
2017/01/22 Javascript
vue.js内部自定义指令与全局自定义指令的实现详解(利用directive)
2017/07/11 Javascript
JavaScript使用FileReader实现图片上传预览效果
2020/03/27 Javascript
详解基于vue-cli优化的webpack配置
2017/11/06 Javascript
vue 引入公共css文件的简单方法(推荐)
2018/01/20 Javascript
vue cli 全面解析
2018/02/28 Javascript
Vue页面骨架屏的实现方法
2018/05/22 Javascript
详解React Native 屏幕适配(炒鸡简单的方法)
2018/06/11 Javascript
Bootstrap 按钮样式与使用代码详解
2018/12/09 Javascript
vue elementUI table表格数据 滚动懒加载的实现方法
2019/04/04 Javascript
JS代码优化的8点建议
2020/02/04 Javascript
[05:06]DOTA2-DPC中国联赛 正赛 VG vs Magma选手采访
2021/03/11 DOTA
[01:07:02]DOTA2-DPC中国联赛 正赛 iG vs PSG.LGD BO3 第三场 2月26日
2021/03/11 DOTA
python连接mysql实例分享
2016/10/09 Python
python 寻找优化使成本函数最小的最优解的方法
2017/12/28 Python
Matplotlib中文乱码的3种解决方案
2018/11/15 Python
基于多进程中APScheduler重复运行的解决方法
2019/07/22 Python
使用tensorflow实现VGG网络,训练mnist数据集方式
2020/05/26 Python
H5调用相机拍照并压缩图片的实例代码
2017/07/20 HTML / CSS
电话销售经理岗位职责
2013/12/07 职场文书
中学生班主任评语
2014/01/30 职场文书
大气污染防治方案
2014/05/19 职场文书
2014幼儿园保育员工作总结
2014/11/10 职场文书
全国爱牙日活动总结
2015/02/05 职场文书
2015年社区工会工作总结
2015/05/26 职场文书
优秀党员主要事迹范文
2015/11/05 职场文书
2019年度政务公开考核工作总结模板
2019/11/11 职场文书
Python matplotlib安装以及实现简单曲线的绘制
2022/04/26 Python