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 相关文章推荐
javascript IFrame 强制刷新代码
Jul 23 Javascript
Ext.MessageBox工具类简介
Dec 10 Javascript
js 通用javascript函数库整理
Aug 14 Javascript
基于JQuery的列表拖动排序实现代码
Oct 01 Javascript
JS检测输入字符是否包含非法字符的示例代码
Feb 11 Javascript
javascript实现多栏闭合展开式广告位菜单效果实例
Aug 05 Javascript
jQuery中text() val()和html()的区别实例详解
Jun 28 Javascript
AngularJS入门教程之Cookies读写操作示例
Nov 02 Javascript
AngularJS使用ng-Cloak阻止初始化闪烁问题的方法
Nov 03 Javascript
js 判断登录界面的账号密码是否为空
Feb 08 Javascript
JavaScript表单即时验证 验证不成功不能提交
Aug 31 Javascript
node 版本切换的实现
Feb 02 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
学习使用curl采集curl使用方法
2012/01/11 PHP
利用php绘制饼状图的实现代码
2013/06/07 PHP
php筛选不存在的图片资源
2015/04/28 PHP
PHP中$GLOBALS与global的区别详解
2019/03/21 PHP
Date对象格式化函数代码
2010/07/17 Javascript
JQuery文本框高亮显示插件代码
2011/04/02 Javascript
ie下动态加态js文件的方法
2011/09/13 Javascript
bootstrap data与jquery .data
2014/07/07 Javascript
常用jQuery选择器总结
2014/07/11 Javascript
js propertychange和oninput事件
2014/09/28 Javascript
node.js中的path.normalize方法使用说明
2014/12/08 Javascript
jquery选择器简述
2015/08/31 Javascript
简单介绍JavaScript数据类型之隐式类型转换
2015/12/28 Javascript
如何消除inline-block属性带来的标签间间隙
2016/03/31 Javascript
jQuery Tags Input Plugin(添加/删除标签插件)详解
2016/06/20 Javascript
angular中使用Socket.io实例代码
2017/06/03 Javascript
vue scroller返回页面记住滚动位置的实例代码
2018/01/29 Javascript
JavaScript面向对象程序设计创建对象的方法分析
2018/08/13 Javascript
[01:35]2018完美盛典章节片——共竞
2018/12/17 DOTA
[36:20]KG vs SECRET 2019国际邀请赛小组赛 BO2 第二场 8.16
2019/08/19 DOTA
Python写的创建文件夹自定义函数mkdir()
2014/08/25 Python
python装饰器深入学习
2018/04/06 Python
python代码 输入数字使其反向输出的方法
2018/12/22 Python
pytorch索引查找 index_select的例子
2019/08/18 Python
Python实现屏幕录制功能的代码
2020/03/02 Python
Python request使用方法及问题总结
2020/04/26 Python
pandas参数设置的实用小技巧
2020/08/23 Python
python实现xml转json文件的示例代码
2020/12/30 Python
如何查看python关键字
2021/01/17 Python
python 实现有道翻译功能
2021/02/26 Python
西班牙三叶草药房:Farmacias Trébol
2019/05/03 全球购物
一道Delphi面试题
2016/10/28 面试题
中职招生先进个人材料
2014/08/31 职场文书
2014年银行员工年终自我评价
2014/09/19 职场文书
Netty结合Protobuf进行编解码的方法
2021/06/26 Java/Android
Nginx利用Logrotate实现日志分割
2022/05/20 Servers