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 相关文章推荐
学习ExtJS border布局
Oct 08 Javascript
关于event.cancelBubble和event.stopPropagation()的区别介绍
Dec 11 Javascript
jQuery学习总结之jQuery事件
Jun 30 Javascript
javascript异步编程代码书写规范Promise学习笔记
Feb 11 Javascript
jQuery超酷平面式时钟效果代码分享
Mar 30 Javascript
如何通过js实现图片预览功能【附实例代码】
Mar 30 Javascript
javascript实现下雨效果
Mar 27 Javascript
JS奇技之利用scroll来监听resize详解
Jun 15 Javascript
详解ES6之用let声明变量以及let loop机制
Jul 15 Javascript
JavaScript实现各种排序的代码详解
Aug 28 Javascript
vue项目前端知识点整理【收藏】
May 13 Javascript
vue spa应用中的路由缓存问题与解决方案
May 31 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
PHP5中Cookie与 Session使用详解
2013/04/30 PHP
Notify - 基于jquery的消息通知插件
2011/10/18 Javascript
jQuery中:has选择器用法实例
2014/12/30 Javascript
JS实现跟随鼠标立体翻转图片的方法
2015/05/04 Javascript
老生常谈javascript的类型转换
2016/10/12 Javascript
微信小程序 vidao实现视频播放和弹幕的功能
2016/11/02 Javascript
Nodejs下用submit提交表单提示cannot post错误的解决方法
2016/11/21 NodeJs
Vue.js中数据绑定的语法教程
2017/06/02 Javascript
mui开发中获取单选按钮、复选框的值(实例讲解)
2017/07/24 Javascript
JavaScript去掉数组重复项的方法分析【测试可用】
2018/07/19 Javascript
Vue实现类似Spring官网图片滑动效果方法
2019/03/01 Javascript
Nodejs核心模块之net和http的使用详解
2019/04/02 NodeJs
JavaScript之Blob对象类型的具体使用方法
2019/11/29 Javascript
ant design的table组件实现全选功能以及自定义分页
2020/11/17 Javascript
[06:23]2014DOTA2西雅图国际邀请赛 小组赛7月12日TOPPLAY
2014/07/12 DOTA
[02:54]DOTA2亚洲邀请赛 VG战队出场宣传片
2015/02/07 DOTA
python 写入csv乱码问题解决方法
2016/10/23 Python
使用python和Django完成博客数据库的迁移方法
2018/01/05 Python
linux环境中没有网络怎么下载python
2019/07/07 Python
详解python中自定义超时异常的几种方法
2019/07/29 Python
解决python 找不到module的问题
2020/02/12 Python
150行Python代码实现带界面的数独游戏
2020/04/04 Python
在tensorflow下利用plt画论文中loss,acc等曲线图实例
2020/06/15 Python
python3 googletrans超时报错问题及翻译工具优化方案 附源码
2020/12/23 Python
selenium学习教程之定位以及切换frame(iframe)
2021/01/04 Python
独特的礼品和创新的科技产品:The Grommet
2018/02/24 全球购物
Amara德国:家居饰品、设计师品牌和豪华礼品
2019/05/20 全球购物
欧洲最大的高尔夫零售商:American Golf
2019/09/02 全球购物
全球最大的生存食品、水和装备专用在线市场:BePrepared.com
2020/01/02 全球购物
Traffic People官网:女式花裙、上衣和连身裤
2020/10/12 全球购物
家长给幼儿园的表扬信
2014/01/09 职场文书
雷锋观后感
2015/06/10 职场文书
观看《杨善洲》宣传教育片心得体会
2016/01/23 职场文书
解决Golang中ResponseWriter的一个坑
2021/04/27 Golang
Python可视化动图组件ipyvizzu绘制惊艳的可视化动图
2022/04/21 Python
Python中tqdm的使用和例子
2022/09/23 Python