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编程起步(第三课)
Feb 27 Javascript
js判断FCKeditor内容是否为空的两种形式
May 14 Javascript
javascript中普通函数的使用介绍
Dec 19 Javascript
JavaScript如何实现跨域请求
Aug 05 Javascript
jquery easyui validatebox remote的使用详解
Nov 09 Javascript
javascript中setAttribute兼容性用法分析
Dec 12 Javascript
Bootstrap风格的zTree右键菜单
Feb 17 Javascript
Vue.js 2.5新特性介绍(推荐)
Oct 24 Javascript
jQuery实现切换隐藏与显示同时切换图标功能
Oct 29 jQuery
javaScript之split与join的区别(详解)
Nov 08 Javascript
基于vue的验证码组件的示例代码
Jan 22 Javascript
vue + typescript + video.js实现 流媒体播放 视频监控功能
Jul 07 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调试的强悍利器之PHPDBG
2016/02/22 PHP
thinkphp中多表查询中防止数据重复的sql语句(必看)
2016/09/22 PHP
使用IE的地址栏来辅助调试Web页脚本
2007/03/08 Javascript
漂亮的widgets,支持换肤和后期开发新皮肤
2007/04/23 Javascript
JavaScript中的对象化编程
2008/01/16 Javascript
Javascript的匿名函数小结
2009/12/31 Javascript
使用jQuery Ajax功能时需要注意的一个问题(内存溢出)
2012/05/30 Javascript
extjs 如何给column 加上提示
2014/07/29 Javascript
jQuery实现按钮只点击一次后就取消点击事件绑定的方法
2015/06/26 Javascript
JS实现拖拽的方法分析
2016/12/20 Javascript
js中的DOM模拟购物车功能
2017/03/22 Javascript
React + webpack 环境配置的方法步骤
2017/09/07 Javascript
详解vue 单页应用(spa)前端路由实现原理
2018/04/04 Javascript
vue2.0实现音乐/视频播放进度条组件
2018/06/06 Javascript
微信小程序视图容器(swiper)组件创建轮播图
2020/06/19 Javascript
js实现通过开始结束控制的计时器
2019/02/25 Javascript
Vue-CLI 3.X 部署项目至生产服务器的方法
2019/03/22 Javascript
ES6的异步终极解决方案分享
2019/07/11 Javascript
浅谈Vue3.0之前你必须知道的TypeScript实战技巧
2019/09/11 Javascript
从表单校验看JavaScript策略模式的使用详解
2020/10/17 Javascript
详解Python的Lambda函数与排序
2016/10/25 Python
python 成功引入包但无法正常调用的解决
2020/03/09 Python
python查看矩阵的行列号以及维数方式
2020/05/22 Python
python logging 重复写日志问题解决办法详解
2020/08/04 Python
10个示例带你掌握python中的元组
2020/11/23 Python
python中复数的共轭复数知识点总结
2020/12/06 Python
Python字节单位转换(将字节转换为K M G T)
2021/03/02 Python
使用CSS3编写类似iOS中的复选框及带开关的按钮
2016/04/11 HTML / CSS
欧姆龙医疗欧洲有限公司:Omron Healthcare Europe B.V
2020/06/13 全球购物
波兰多品牌运动商店:StreetStyle24.pl
2020/09/22 全球购物
小摄影师教学反思
2014/04/27 职场文书
机电一体化毕业生自荐信
2014/06/19 职场文书
行政专员岗位职责说明书
2014/07/30 职场文书
四风问题对照检查整改措施思想报告
2014/10/05 职场文书
房地产公司工程部经理岗位职责
2015/04/09 职场文书
2015年党员公开承诺事项
2015/04/27 职场文书