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 关键字屏蔽实现函数
Aug 02 Javascript
javascript+xml实现简单图片轮换(只支持IE)
Dec 23 Javascript
jquery+json实现数据列表分页示例代码
Nov 15 Javascript
JavaScript驾驭网页-CSS与DOM
Mar 24 Javascript
jQuery实现鼠标滚动图片延迟加载效果附源码下载
Jun 28 Javascript
关于Node.js中Buffer的一些你可能不知道的用法
Mar 28 Javascript
Vue中组件之间数据的传递的示例代码
Sep 08 Javascript
Vue.js项目中管理每个页面的头部标签的两种方法
Jun 25 Javascript
代码实例ajax实现点击加载更多数据图片
Oct 12 Javascript
微信小程序实现的绘制table表格功能示例
Apr 26 Javascript
js+css实现全屏侧边栏
Jun 16 Javascript
关于vue属性使用和不使用冒号的区别说明
Oct 22 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 生成静态页面的办法与实现代码详细版
2010/02/15 PHP
php将一维数组转换为每3个连续值组成的二维数组
2016/05/06 PHP
php可变长参数处理函数详解
2017/02/22 PHP
PHP无限极分类函数的实现方法详解
2017/04/15 PHP
js/jquery获取浏览器窗口可视区域高度和宽度以及滚动条高度实现代码
2012/12/17 Javascript
jquery设置控件位置的方法
2013/08/21 Javascript
JavaScript作用域链示例分享
2014/05/27 Javascript
js实现表单Radio切换效果的方法
2015/08/17 Javascript
JavaScript位移运算符(无符号) &gt;&gt;&gt; 三个大于号 的使用方法详解
2016/03/31 Javascript
JavaScript结合HTML DOM实现联动菜单
2017/04/05 Javascript
详解vue.js2.0父组件点击触发子组件方法
2017/05/10 Javascript
BootStrap 表单控件之单选按钮水平排列
2017/05/23 Javascript
详解nodejs http请求相关总结
2019/03/31 NodeJs
vue引入微信sdk 实现分享朋友圈获取地理位置功能
2019/07/04 Javascript
利用Angular7开发一个Radio组件的全过程
2019/07/11 Javascript
jquery实现简单拖拽效果
2020/07/20 jQuery
Vue 3自定义指令开发的相关总结
2021/01/29 Vue.js
[05:49]2014DOTA2TI4正赛第二日综述 昔日冠军纷纷落马 VG LGD占尽先机
2014/07/20 DOTA
Python标准库与第三方库详解
2014/07/22 Python
python僵尸进程产生的原因
2017/07/21 Python
tornado 多进程模式解析
2018/01/15 Python
Python中跳台阶、变态跳台阶与矩形覆盖问题的解决方法
2018/05/19 Python
用uWSGI和Nginx部署Flask项目的方法示例
2019/05/05 Python
用python中的matplotlib绘制方程图像代码
2019/11/21 Python
Python如何使用字符打印照片
2020/01/03 Python
tensorflow查看ckpt各节点名称实例
2020/01/21 Python
css3的@media属性实现页面响应式布局示例代码
2014/02/10 HTML / CSS
重写子类方法时,抛出异常的书写注意事项
2015/10/17 面试题
办加油卡单位介绍信
2014/01/09 职场文书
挖掘机司机岗位职责
2014/02/12 职场文书
社区平安建设汇报材料
2014/08/14 职场文书
2014领导班子四风问题对照检查材料思想汇报
2014/09/21 职场文书
2015年干部教育培训工作总结
2015/05/15 职场文书
2015年度内部审计工作总结
2015/05/20 职场文书
Python中zipfile压缩包模块的使用
2021/05/14 Python
前端使用svg图片改色实现示例
2022/07/23 HTML / CSS