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 相关文章推荐
表单内同名元素的控制
Nov 22 Javascript
[推荐]javascript 面向对象技术基础教程
Mar 03 Javascript
return false,对阻止事件默认动作的一些测试代码
Nov 17 Javascript
jQuery.validate 常用方法及需要注意的问题
Mar 20 Javascript
jQuery中:submit选择器用法实例
Jan 03 Javascript
JavaScript获取表单enctype属性的方法
Apr 02 Javascript
vue+vuex+axio从后台获取数据存入vuex实现组件之间共享数据
Apr 22 Javascript
vue中$refs的用法及作用详解
Apr 24 Javascript
vue实现带复选框的树形菜单
May 27 Javascript
Vue-cli3.x + axios 跨域方案踩坑指北
Jul 04 Javascript
解决Vue 刷新页面导航显示高亮位置不对问题
Dec 25 Javascript
Typescript类型系统FLOW静态检查基本规范
May 25 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 裁剪图片成固定大小代码方法
2009/09/09 PHP
火车头discuz6.1 完美采集的php接口文件
2009/09/13 PHP
ThinkPHP3.1的Widget新用法
2014/06/19 PHP
php结合js实现点击超链接执行删除确认操作
2014/10/31 PHP
PHP url的pathinfo模式加载不同控制器的简单实现
2016/08/12 PHP
详解PHP中array_rand函数的使用方法
2016/09/11 PHP
Zend Framework上传文件重命名的实现方法
2016/11/25 PHP
PHP设计模式之装饰器模式定义与用法详解
2018/04/02 PHP
tp5.1 框架路由操作-URL生成实例分析
2020/05/26 PHP
IE 当eval遇上function的处理
2011/08/09 Javascript
jQuery中index()方法用法实例
2014/12/27 Javascript
Javascript核心读书有感之语句
2015/02/11 Javascript
JavaScript操作Cookie详解
2015/02/28 Javascript
Redis基本知识、安装、部署、配置笔记
2015/03/05 Javascript
jquery带动画效果幻灯片特效代码
2015/08/27 Javascript
XML、HTML、CSS与JS的区别整理
2016/02/18 Javascript
网页中JS函数自动执行常用三种方法
2016/03/30 Javascript
JS实现登录页面记住密码和enter键登录方法推荐
2016/05/10 Javascript
jQuery时间验证和转换为标准格式的时间格式
2017/03/06 Javascript
vue-baidu-map 进入页面自动定位的解决方案(推荐)
2018/04/28 Javascript
JS中实现浅拷贝和深拷贝的代码详解
2019/06/05 Javascript
详解微信小程序胶囊按钮返回|首页自定义导航栏功能
2019/06/14 Javascript
layui 动态设置checbox 选中状态的例子
2019/09/02 Javascript
vue实现tab栏点击高亮效果
2020/08/19 Javascript
Django admin实现图书管理系统菜鸟级教程完整实例
2017/12/12 Python
python的常见矩阵运算(小结)
2019/08/07 Python
Python中字典与恒等运算符的用法分析
2019/08/22 Python
西雅图电动自行车公司:Rad Power Bikes
2020/02/02 全球购物
全球最大运动品牌的男装、女装和童装官方库存商:A&A Sports
2021/01/17 全球购物
C#中的验证控件有几种
2014/03/08 面试题
竞选演讲稿范文大全
2014/05/12 职场文书
中华在我心中演讲稿
2014/09/13 职场文书
党的群众路线对照检查材料(个人)
2014/09/24 职场文书
免职通知
2015/04/23 职场文书
观看安全警示教育片心得体会
2016/01/15 职场文书
详解Python 3.10 中的新功能和变化
2021/04/28 Python