vue实现拖拽效果


Posted in Javascript onDecember 23, 2019

vue中实现拖拽效果,供大家参考,具体内容如下

首先要搞明白分清clientY pageY screenY layerY offsetY的区别

作用3(事件对象中记录的鼠标位置)

语法 解释

evt.screenX 相对于屏幕的左上角为原点
evt.screenY

evt.clientX 相对于浏览器的客户端左上角为原点(不计算滚动条位置)
evt.clientY

evt.pageX 相对于浏览器的客户端左上角为原点(计算滚动条的位置)
evt.pageY

evt.offsetX 以自己的左上角为原点
evt.offsetY

vue实现拖拽效果

evt.pageY/evt.pageX 相当于文档的左上角为原点,即包括被被隐藏的距离;

evt.clientY/evt.clientX 相当于浏览器可视窗口的左上角为原点,即不包括被被隐藏的距离;

实现拖拽功能

<style>
 #app{
 position: relative; /*定位*/
 top: 10px;
 left: 10px;
 width: 200px;
 height: 200px;
 background: #666; /*设置一下背景*/
 }
</style>
<body>
 <div id="app" @mousedown="move"> <!--绑定按下事件-->
 {{positionX}}
 {{positionY}}
 </div>
</body>
//main.js
let app = new Vue({
 el:'#app',
 data:{
 positionX:0,
 positionY:0,
 },
 methods:{
 move(e){
  let odiv = e.target; //获取目标元素
  
  //算出鼠标相对元素的位置
  let disX = e.clientX - odiv.offsetLeft;
  let disY = e.clientY - odiv.offsetTop;
  document.onmousemove = (e)=>{ //鼠标按下并移动的事件
  //用鼠标的位置减去鼠标相对元素的位置,得到元素的位置
  let left = e.clientX - disX; 
  let 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;
  };
 } 
 
 },
 computed:{},
});

当然,我们可以将它绑定为一个自定义指令,这样的话就可以用调用指令的形式来实现拖拽效果,下面是定义自定义指令的代码

在main.js中定义全局指令

Vue.directive('drag'
 drag: {
  // 指令的定义
  bind(el) {
  let odiv = el; //获取当前元素
  oDiv.onmousedown = (e) => {
   //算出鼠标相对元素的位置
   let disX = e.clientX - odiv.offsetLeft;
   let disY = e.clientY - odiv.offsetTop;
   
   document.onmousemove = (e)=>{
   //用鼠标的位置减去鼠标相对元素的位置,得到元素的位置
   let left = e.clientX - disX; 
   let top = e.clientY - disY;
   
   if(left<3) {
    left=0;
    odiv.style.width="2px";
   }else{odiv.style.width="auto";}
   if(left>innerWidth-odiv.offsetWidth) {left=innerWidth- odiv.offsetWidth;odiv.style.width="2px";}
   
   //移动当前元素
   odiv.style.left = left + 'px';
   odiv.style.top = top + 'px';
   };
   document.onmouseup = (e) => {
   document.onmousemove = null;
   document.onmouseup = null;
   };
   }
 }
});

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

Javascript 相关文章推荐
InnerHtml和InnerText的区别分析
Mar 13 Javascript
JQuery获取样式中的background-color颜色值的问题
Aug 20 Javascript
jQuery设置与获取HTML,文本和值的简单实例
Feb 26 Javascript
jquery实现的一个简单进度条效果实例
May 12 Javascript
[原创]Javascript 实现广告后加载 可加载百度谷歌联盟广告
May 11 Javascript
fullCalendar中文API官方文档
Feb 07 Javascript
Element 默认勾选表格 toggleRowSelection的实现
Sep 04 Javascript
关于layui的下拉搜索框异步加载数据的解决方法
Sep 28 Javascript
vue实现评论列表功能
Oct 25 Javascript
解决Vue项目打包后打开index.html页面显示空白以及图片路径错误的问题
Oct 25 Javascript
vue引用外部JS的两种种方法
Jan 28 Javascript
js实现超级玛丽小游戏
Mar 18 Javascript
JQuery常用选择器功能与用法实例分析
Dec 23 #jQuery
Jquery属性的获取/设置及样式添加/删除操作技巧分析
Dec 23 #jQuery
JQuery中DOM节点的操作与访问方法实例分析
Dec 23 #jQuery
JQuery中的常用事件、对象属性与使用方法分析
Dec 23 #jQuery
node.js使用mongoose操作数据库实现购物车的增、删、改、查功能示例
Dec 23 #Javascript
Angular如何由模板生成DOM树的方法
Dec 23 #Javascript
Vue+Node实现的商城用户管理功能示例
Dec 23 #Javascript
You might like
利用PHP制作简单的内容采集器的代码
2007/11/28 PHP
PHP获得数组交集与差集的方法
2015/06/10 PHP
从刷票了解获得客户端IP的方法
2015/09/21 PHP
基于php实现七牛抓取远程图片
2015/12/01 PHP
JavaScript 指导方针
2007/04/05 Javascript
JavaScript 关键字屏蔽实现函数
2009/08/02 Javascript
使用JS读秒使用示例
2013/09/21 Javascript
自己动手实现jQuery Callbacks完整功能代码详解
2013/11/25 Javascript
Javascript中的delete操作符详细介绍
2014/06/06 Javascript
javascript中SetInterval与setTimeout的定时器用法
2015/08/24 Javascript
浅谈JavaScript超时调用和间歇调用
2015/08/30 Javascript
javascript设置页面背景色及背景图片的方法
2015/12/29 Javascript
JavaScript缓冲运动实现方法(2则示例)
2016/01/08 Javascript
AngularJS 模块化详解及实例代码
2016/09/14 Javascript
jQuery插件echarts去掉垂直网格线用法示例
2017/03/03 Javascript
layui弹出层效果实现代码
2017/05/19 Javascript
在vue-cli的组件模板里使用font-awesome的两种方法
2018/09/28 Javascript
Vue中使用create-keyframe-animation与动画钩子完成复杂动画
2019/04/09 Javascript
React Native 混合开发多入口加载方式详解
2019/09/23 Javascript
在阿里云服务器上配置CentOS+Nginx+Python+Flask环境
2016/06/18 Python
Windows下Anaconda2安装NLTK教程
2018/09/19 Python
Python tensorflow实现mnist手写数字识别示例【非卷积与卷积实现】
2019/12/19 Python
Python如何将模块打包并发布
2020/08/30 Python
python之语音识别speech模块
2020/09/09 Python
CSS教程:CSS3圆角属性
2009/04/02 HTML / CSS
html5 canvas手势解锁源码分享
2020/01/07 HTML / CSS
iframe与window.onload如何使用详解
2020/05/07 HTML / CSS
weblogic面试题
2016/03/07 面试题
工商学院毕业生自荐信
2013/11/12 职场文书
电脑教师的自我评价
2013/12/18 职场文书
英语道歉信范文
2014/01/09 职场文书
大学生蛋糕店创业计划书
2014/01/13 职场文书
会计工作心得体会
2014/01/13 职场文书
民主生活会汇报材料
2014/12/15 职场文书
2016北大自主招生自荐信模板
2016/01/28 职场文书
FP-growth算法发现频繁项集——发现频繁项集
2021/06/24 Python