vue实现拖拽的简单案例 不超出可视区域


Posted in Javascript onJuly 25, 2019

本文实例为大家分享了vue实现拖拽x效果的具体代码,供大家参考,具体内容如下

实现拖拽之前,先了解几个小常识:

这两种获取鼠标坐标的方法,区别在于基于的对象不同:

  • pageX和pageY获取的是鼠标指针距离文档(HTML)的左上角距离,不会随着滚动条滚动而改变;
  • clientX和clientY获取的是鼠标指针距离可视窗口(不包括上面的地址栏和滑动条)的距离,会随着滚动条滚动而改变;

1.clientX : 是用来获取鼠标点击的位置距离 当前窗口 左边的距离
2.clientY: 是用来获取鼠标点击的位置距离 当前窗口 上边的距离
3.offsetWidth: 用来获取当前拖拽元素 自身的宽度
4.offsetHeight:用来获取当前拖拽元素 自身的高度 
5.document.documentElement.clientHeight :屏幕的可视高度
6.document.documentElement.clientWidth:屏幕的可视高度

<!DOCTYPE html>
<html>
 <head>
 <meta charset="UTF-8">
 <title>vue实现拖拽</title>
 <script src="./js/vue.min.js"></script>
 </head>
 <style>
 *{margin: 0;padding:0;}
  #app{
   position: relative;  /*定位*/
   top: 10px;
   left: 10px;
   width: 80px;
   height: 80px;
   background: #666;  /*设置一下背景*/
  }
 </style>
 <body>
 <div id="app" @mousedown="move">
 {{positionX}}
 {{positionY}}
 </div>
 </body>
<script>
 var vm = new Vue({
 el: "#app",
 data: {
 positionX: 0,
 positionY: 0
 },
 methods: {
 move(e){
 let odiv = e.target;// 获取目标元素
 
 //计算出鼠标相对点击元素的位置,e.clientX获取的是鼠标的位置,OffsetLeft是元素相对于外层元素的位置
 let x = e.clientX - odiv.offsetLeft;
 let y = e.clientY - odiv.offsetTop;
 console.log(odiv.offsetLeft,odiv.offsetTop)
 document.onmousemove = (e) => {
  // 获取拖拽元素的位置
  let left = e.clientX - x;
  let top = e.clientY - y;
  this.positionX = left;
  this.positionY = top;
  //console.log(document.documentElement.clientHeight,odiv.offsetHeight)
  // 把拖拽元素 放到 当前的位置
  if (left <= 0) {
  left = 0;
  } else if (left >= document.documentElement.clientWidth - odiv.offsetWidth){
  //document.documentElement.clientWidth 屏幕的可视宽度
  left = document.documentElement.clientWidth - odiv.offsetWidth;
  }
  
  if (top <= 0) {
  top = 0;
  } else if (top >= document.documentElement.clientHeight - odiv.offsetHeight){
  // document.documentElement.clientHeight 屏幕的可视高度
  top = document.documentElement.clientHeight - odiv.offsetHeight
  
  }
  odiv.style.left = left + "px";
  odiv.style.top = top + "px"
  
 }
    // 为了防止 火狐浏览器 拖拽阴影问题
 document.onmouseup = (e) => {
  document.onmousemove = null;
    document.onmouseup = null
 }
 }
 }
 })
</script>
</html>

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
window.location和document.location的区别分析
Dec 23 Javascript
javascript OFFICE控件测试代码
Dec 08 Javascript
Javascript 鼠标移动上去 滑块跟随效果代码分享
Nov 23 Javascript
JQuery中层次选择器用法实例详解
May 18 Javascript
浅谈JSON.parse()和JSON.stringify()
Jul 14 Javascript
js实现头像图片切割缩放及无刷新上传图片的方法
Jul 17 Javascript
jQuery插件实现文件上传功能(支持拖拽)
Aug 27 Javascript
原生JS实现幻灯片
Feb 22 Javascript
vue中设置height:100%无效的问题及解决方法
Jul 27 Javascript
浅谈针对Vue相同路由不同参数的刷新问题
Sep 29 Javascript
vue路由教程之静态路由
Sep 03 Javascript
Vue.js标签页组件使用方法详解
Oct 19 Javascript
vue实现一拉到底的滑动验证
Jul 25 #Javascript
微信小程序实现图片选择并预览功能
Jul 25 #Javascript
详细教你微信公众号正文页SVG交互开发技巧
Jul 25 #Javascript
微信小程序绘制图片发送朋友圈
Jul 25 #Javascript
微信小程序使用canvas自适应屏幕画海报并保存图片功能
Jul 25 #Javascript
微信小程序实现动态列表项的顺序加载动画
Jul 25 #Javascript
JS查找孩子节点简单示例
Jul 25 #Javascript
You might like
实例(Smarty+FCKeditor新闻系统)
2007/01/02 PHP
ThinkPHP使用Ueditor的方法详解
2016/05/20 PHP
Jquery Ajax学习实例4 向WebService发出请求,返回实体对象的异步调用
2010/03/16 Javascript
JavaScript中伪协议 javascript:使用探讨
2014/07/18 Javascript
JS获取及设置TextArea或input文本框选择文本位置的方法
2015/03/24 Javascript
Bootstrap 源代码分析(未完待续)
2016/08/17 Javascript
JavaScript中boolean类型之三种情景实例代码
2016/11/21 Javascript
JavaScript版经典游戏之扫雷游戏完整示例【附demo源码下载】
2016/12/12 Javascript
深入理解javascript函数参数与闭包
2016/12/12 Javascript
Iphone手机、安卓手机浏览器控制默认缩放大小的方法总结(附代码)
2017/08/18 Javascript
说说AngularJS中的$parse和$eval的用法
2017/09/14 Javascript
浅析从vue源码看观察者模式
2018/01/29 Javascript
JS实现的冒泡排序,快速排序,插入排序算法示例
2019/03/02 Javascript
vue计算属性computed的使用方法示例
2019/03/13 Javascript
vue 集成 vis-network 实现网络拓扑图的方法
2019/08/07 Javascript
JS中比Switch...Case更优雅的多条件判断写法
2019/09/05 Javascript
[02:54]DOTA2英雄基础教程 暗影牧师戴泽
2013/12/05 DOTA
[01:00:30]完美世界DOTA2联赛循环赛 Inki vs Matador BO2第二场 10.31
2020/11/02 DOTA
Flask框架URL管理操作示例【基于@app.route】
2018/07/23 Python
在Python中使用gRPC的方法示例
2018/08/08 Python
python字典一键多值实例代码分享
2019/06/14 Python
树莓派采用socket方式文件传输(python)
2019/06/22 Python
python与C、C++混编的四种方式(小结)
2019/07/15 Python
Python实现一个带权无回置随机抽选函数的方法
2019/07/24 Python
使用pyinstaller逆向.pyc文件
2019/12/20 Python
html5的新增的标签和废除的标签简要概述
2013/02/20 HTML / CSS
史泰博(Staples)中国官方网站:办公用品一站式采购
2016/09/05 全球购物
Booking.com缤客中国:全球酒店在线预订网站
2020/05/03 全球购物
精伦电子Java笔试题
2013/01/16 面试题
C#里面可以避免一个类被其他类继承么?如何?
2013/09/26 面试题
学习全国两会精神心得体会范文
2014/03/17 职场文书
《鹬蚌相争》教学反思
2014/04/22 职场文书
材料化学专业求职信
2014/07/15 职场文书
物业工程部经理岗位职责
2015/04/09 职场文书
2015年公司工作总结
2015/04/25 职场文书
入党转正介绍人意见
2015/06/03 职场文书