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 相关文章推荐
javascript 在网页中的运用(asp.net)
Nov 23 Javascript
jQuery入门问答 整理的几个常见的初学者问题
Feb 22 Javascript
jquery向.ashx文件post中文乱码问题的解决方法
Mar 28 Javascript
javascript限制用户只能输汉字中文的方法
Nov 20 Javascript
包含中国城市的javascript对象实例
Aug 03 Javascript
javascript字符串对象常用api函数小结(连接,替换,分割,转换等)
Sep 20 Javascript
javascript html5轻松实现拖动功能
Mar 01 Javascript
AngularJS路由切换实现方法分析
Mar 17 Javascript
ReactJs实现树形结构的数据显示的组件的示例
Aug 18 Javascript
详解node.js 下载图片的 2 种方式
Mar 02 Javascript
解决Vue-cli无法编译es6的问题
Oct 30 Javascript
vant 时间选择器--开始时间和结束时间实例
Nov 04 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
让PHP支持页面回退的两种方法
2008/01/10 PHP
如何使用Linux的Crontab定时执行PHP脚本的方法
2011/12/19 PHP
PHP大文件分割上传 PHP分片上传
2017/08/28 PHP
PHP根据树的前序遍历和中序遍历构造树并输出后序遍历的方法
2017/11/10 PHP
javascript 流畅动画实现原理
2009/09/08 Javascript
深入理解Javascript闭包 新手版
2010/12/28 Javascript
使用jquery读取html5 localstorage的值的方法
2013/01/04 Javascript
原生JS实现表单checkbook获取已选择的值
2013/07/21 Javascript
javascript中clone对象详解
2014/12/03 Javascript
JavaScript中对象property的删除方法介绍
2014/12/30 Javascript
JavaScript中模拟实现jsonp
2015/06/19 Javascript
React-Native使用Mobx实现购物车功能
2017/09/14 Javascript
详解vue-router 初始化时做了什么
2018/06/11 Javascript
在vue中v-bind使用三目运算符绑定class的实例
2018/09/29 Javascript
js 解析 JSON 数据简单示例
2020/04/21 Javascript
Vue之封装公用变量以及实现方式
2020/07/31 Javascript
[36:54]Mineski vs Winstrike 2018国际邀请赛小组赛BO2 第一场 8.16
2018/08/17 DOTA
python实现的多线程端口扫描功能示例
2017/01/21 Python
python正则表达式面试题解答
2020/04/28 Python
python读取图片的方式,以及将图片以三维数组的形式输出方法
2019/07/03 Python
文件上传服务器-jupyter 中python解压及压缩方式
2020/04/22 Python
详解Python中如何将数据存储为json格式的文件
2020/11/18 Python
python3列表删除大量重复元素remove()方法的问题详解
2021/01/04 Python
python中time tzset()函数实例用法
2021/02/18 Python
CSS3实现粒子旋转伸缩加载动画
2016/04/22 HTML / CSS
详解CSS3选择器:nth-child和:nth-of-type之间的差异
2017/09/18 HTML / CSS
英国户外服装品牌:Craghoppers
2019/04/25 全球购物
TCP/IP中的TCP和IP分别承担什么责任
2012/04/21 面试题
请介绍一下WSDL的文档结构
2013/03/17 面试题
路政管理专业推荐信
2013/11/11 职场文书
2013年保送生自荐信格式
2013/11/20 职场文书
教师自荐信范文
2013/12/09 职场文书
影视广告专业求职信
2014/09/02 职场文书
付款承诺函范文
2015/01/21 职场文书
建议书格式
2015/02/04 职场文书
小学英语教学反思范文
2016/02/15 职场文书