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 相关文章推荐
js文字滚动停顿效果代码
Jun 28 Javascript
js 禁止选择功能实现代码(兼容IE/Firefox)
Apr 23 Javascript
jquery.validate使用攻略 第五步 正则验证
Jul 01 Javascript
jQuery中创建实例与原型继承揭秘
Dec 21 Javascript
实现动画效果核心方式的js代码
Sep 27 Javascript
禁止页面刷新让F5快捷键及右键都无效
Jan 22 Javascript
node.js中的buffer.Buffer.isBuffer方法使用说明
Dec 14 Javascript
jquery实现弹出层登录和全屏层注册特效
Aug 28 Javascript
jQuery替换节点用法示例(使用replaceWith方法)
Sep 08 Javascript
Vue.js实战之通过监听滚动事件实现动态锚点
Apr 04 Javascript
vue 中directive功能的简单实现
Jan 05 Javascript
JavaScript比较同一天的时间大小实例代码
Feb 09 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的一些小问题
2010/07/03 PHP
php 微信开发获取用户信息如何实现
2016/12/13 PHP
又一个图片自动缩小的JS代码
2007/03/10 Javascript
强大的jquery插件jqeuryUI做网页对话框效果!简单
2011/04/14 Javascript
jQuery+Ajax+PHP+Mysql实现分页显示数据实例讲解
2015/09/27 Javascript
在JSP中如何实现MD5加密的方法
2016/11/02 Javascript
JavaScript实现定时页面跳转功能示例
2017/02/14 Javascript
jquery dataTable 获取某行数据
2017/05/05 jQuery
ES6中的rest参数与扩展运算符详解
2017/07/18 Javascript
一次记住JavaScript的6个正则表达式方法
2018/02/22 Javascript
js中事件对象和事件委托的介绍
2019/01/21 Javascript
vue同个按钮控制展开和折叠同个事件操作
2020/07/29 Javascript
Vue-Ant Design Vue-普通及自定义校验实例
2020/10/24 Javascript
[56:47]Ti4 循环赛第三日 iG vs Liquid
2014/07/12 DOTA
[52:52]DOTA2上海特级锦标赛C组资格赛#1 OG VS LGD第三局
2016/02/27 DOTA
[42:25]EG vs Spirit Supermajor 败者组 BO3 第二场 6.4
2018/06/05 DOTA
Ubuntu下安装PyV8
2016/03/13 Python
Python实现替换文件中指定内容的方法
2018/03/19 Python
Pandas读取MySQL数据到DataFrame的方法
2018/07/25 Python
对python 多线程中的守护线程与join的用法详解
2019/02/18 Python
python实现可变变量名方法详解
2019/07/01 Python
利用python实现汉字转拼音的2种方法
2019/08/12 Python
python内存管理机制原理详解
2019/08/12 Python
解析python的局部变量和全局变量
2019/08/15 Python
发现两个有趣的CSS3动画效果
2013/08/14 HTML / CSS
阿玛瑞酒店中文官方网站:Amari.com
2018/02/13 全球购物
HolidayLettings英国:预订最好的度假公寓、别墅和自助式住宿
2019/08/27 全球购物
几个数据库方面的面试题
2016/07/01 面试题
社团活动策划书范文
2014/01/09 职场文书
2014年入党积极分子党课学习心得体会模板
2014/04/03 职场文书
公司任命书范本
2014/06/04 职场文书
迎新晚会策划方案
2014/06/13 职场文书
2015年预备党员自我评价
2015/03/04 职场文书
2015年网络管理员工作总结
2015/05/21 职场文书
goland 恢复已更改文件的操作
2021/04/28 Golang
Nginx 502 bad gateway错误解决的九种方案及原因
2022/08/14 Servers