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中的parseInt使用技巧
Sep 03 Javascript
jquery 实现密码框的显示与隐藏示例代码
Sep 18 Javascript
js触发onchange事件的方法说明
Mar 08 Javascript
jQuery照片伸缩效果不影响其他元素的布局
May 09 Javascript
javascript实现判断鼠标的状态
Jul 10 Javascript
javascript密码强度校验代码(两种方法)
Aug 10 Javascript
在其他地方你学不到的jQuery小贴士和技巧(欢迎收藏)
Jan 20 Javascript
微信小程序 时间格式化(util.formatTime(new Date))详解
Nov 16 Javascript
微信开发之调起摄像头、本地展示图片、上传下载图片实例
Dec 08 Javascript
详解JQuery基础动画操作
Apr 12 jQuery
使vue实现jQuery调用的两种方法
May 12 jQuery
Nuxt 项目性能优化调研分析
Nov 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下获取客户端ip地址的函数
2010/03/15 PHP
30个php操作redis常用方法代码例子
2014/07/05 PHP
php+mongodb判断坐标是否在指定多边形区域内的实例
2016/10/28 PHP
微信开发之php表单微信中自动提交两次问题解决办法
2017/01/08 PHP
原生JS实现Ajax通过POST方式与PHP进行交互的方法示例
2018/05/12 PHP
thinkPHP框架实现生成条形码的方法示例
2018/06/06 PHP
PHP钩子实现方法解析
2019/05/21 PHP
jquery 图片上传按比例预览插件集合
2011/05/28 Javascript
JavaScript修改浏览器tab标题小技巧
2015/01/06 Javascript
Jquery实现简单的轮播效果(代码管用)
2016/03/14 Javascript
JS密码生成与强度检测完整实例(附demo源码下载)
2016/04/06 Javascript
基于原生JS实现图片裁剪
2016/08/01 Javascript
jquery点赞功能实现代码 点个赞吧!
2020/05/29 jQuery
微信小程序实现表单校验功能
2020/03/30 Javascript
vue 使用Jade模板写html,stylus写css的方法
2018/02/23 Javascript
微信小程序页面缩放式侧滑效果的实现代码
2018/11/15 Javascript
js中async函数结合promise的小案例浅析
2019/04/14 Javascript
Vue 同步异步存值取值实现案例
2020/08/05 Javascript
vue路由分文件拆分管理详解
2020/08/13 Javascript
使用python装饰器验证配置文件示例
2014/02/24 Python
浅谈Python使用Bottle来提供一个简单的web服务
2017/12/27 Python
pytorch实现MNIST手写体识别
2020/02/14 Python
python爬虫中采集中遇到的问题整理
2020/11/27 Python
如何用tempfile库创建python进程中的临时文件
2021/01/28 Python
canvas粒子动画背景的实现示例
2018/09/03 HTML / CSS
Perry Ellis官网:美国男士品味服装
2016/12/09 全球购物
Amcal中文官网:澳洲综合性连锁药房
2019/03/28 全球购物
商务英语专业应届毕业生求职信
2013/10/28 职场文书
人事专员岗位职责说明书
2014/07/30 职场文书
师德承诺书
2015/01/20 职场文书
2015年初一班主任工作总结
2015/05/13 职场文书
高中运动会广播稿
2015/08/19 职场文书
2019奶茶店创业计划书范本,值得你借鉴
2019/08/14 职场文书
Nginx实现高可用集群构建(Keepalived+Haproxy+Nginx)
2021/05/27 Servers
JavaScript选择器函数querySelector和querySelectorAll
2021/11/27 Javascript
Vue全局事件总线你了解吗
2022/02/24 Vue.js