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 相关文章推荐
在html页面上拖放移动标签
Jan 08 Javascript
jquery ajax jsonp跨域调用实例代码
Dec 11 Javascript
js定时器的使用(实例讲解)
Jan 06 Javascript
js ajaxfileupload.js上传报错的解决方法
May 05 Javascript
详解Angular2中的编程对象Observable
Sep 17 Javascript
微信小程序开发之数据存储 参数传递 数据缓存
Apr 13 Javascript
微信小程序实现表单校验功能
Mar 30 Javascript
详解刷新页面vuex数据不消失和不跳转页面的解决
Jan 30 Javascript
Node.js创建HTTP文件服务器的使用示例
May 11 Javascript
从0到1构建vueSSR项目之node以及vue-cli3的配置
Mar 07 Javascript
Vue中this.$nextTick的作用及用法
Feb 04 Javascript
javascript设计模式 ? 享元模式原理与用法实例分析
Apr 15 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
CodeIgniter生成静态页的方法
2016/05/17 PHP
php基于ob_start(ob_gzhandler)实现网页压缩功能的方法
2017/02/18 PHP
thinkphp框架无限级栏目的排序功能实现方法示例
2020/03/29 PHP
JavaScript正则表达式之multiline属性的应用
2015/06/16 Javascript
jquery+CSS实现的水平布局多级网页菜单效果
2015/08/24 Javascript
JavaScript精炼之构造函数 Constructor及Constructor属性详解
2015/11/05 Javascript
Javascript数组循环遍历之forEach详解
2016/11/07 Javascript
轻松实现jQuery添加删除按钮Click事件
2017/03/13 Javascript
详谈jQuery中使用attr(), prop(), val()获取value的异同
2017/04/25 jQuery
详解webpack和webpack-simple中如何引入css文件
2017/06/28 Javascript
VueJs监听window.resize方法示例
2018/01/17 Javascript
VUE重点问题总结
2018/03/19 Javascript
小程序视频或音频自定义可拖拽进度条的示例代码
2018/09/30 Javascript
AngularJs1.x自定义指令独立作用域的函数传入参数方法
2018/10/09 Javascript
详解javascript设计模式三:代理模式
2019/03/25 Javascript
vue组件三大核心概念图文详解
2019/05/30 Javascript
mui js控制开关状态、修改switch开关的值方法
2019/09/03 Javascript
如何手动实现一个 JavaScript 模块执行器
2020/10/16 Javascript
[01:02]DOTA2上海特锦赛SHOWOPEN
2016/03/25 DOTA
在Python的Django框架的视图中使用Session的方法
2015/07/23 Python
简单讲解Python中的字符串与字符串的输入输出
2016/03/13 Python
django 实现电子支付功能的示例代码
2018/07/25 Python
python制作抖音代码舞
2019/04/07 Python
django框架面向对象ORM模型继承用法实例分析
2019/07/29 Python
基于python实现ROC曲线绘制广场解析
2020/06/28 Python
基于Python+QT的gui程序开发实现
2020/07/03 Python
Python经纬度坐标转换为距离及角度的实现
2020/11/01 Python
华为智利官方商店:Huawei Chile
2020/05/09 全球购物
广州某公司软件工程师面试题
2014/12/22 面试题
2014年党务公开实施方案
2014/02/27 职场文书
安全协议书
2014/04/23 职场文书
材料专业大学毕业生自荐书
2014/07/02 职场文书
纪律教育学习心得体会
2014/09/02 职场文书
小学感恩主题班会
2015/08/12 职场文书
党员学习型组织心得体会
2019/06/21 职场文书
Netflix《海贼王》真人版剧集多张片场照曝光
2022/04/04 日漫