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 相关文章推荐
jQuery 1.5.1 发布,全面支持IE9 修复大量bug
Feb 26 Javascript
非主流的textarea自增长实现js代码
Dec 20 Javascript
js实现广告漂浮效果的小例子
Jul 02 Javascript
jQuery拖拽div实现思路
Feb 19 Javascript
JavaScript编程中实现对象封装特性的实例讲解
Jun 24 Javascript
使用Vue.js创建一个时间跟踪的单页应用
Nov 28 Javascript
vue2实现移动端上传、预览、压缩图片解决拍照旋转问题
Apr 13 Javascript
javascript深拷贝、浅拷贝和循环引用深入理解
May 27 Javascript
浅谈Node.js 中间件模式
Jun 12 Javascript
支付宝小程序自定义弹窗dialog插件的实现代码
Nov 30 Javascript
解决Vue使用bus总线时,第一次路由跳转时数据没成功传递问题
Jul 28 Javascript
JavaScript实现多层颜色选项卡嵌套
Sep 21 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
一个查看session内容的函数
2006/10/09 PHP
破解图片防盗链的代码(asp/php)测试通过
2010/07/02 PHP
PHP实现的购物车类实例
2015/06/17 PHP
PHP下SSL加密解密、验证、签名方法(很简单)
2020/06/28 PHP
利用PHP扩展Xhprof分析项目性能实践教程
2018/09/05 PHP
走出JavaScript初学困境—js初学
2008/12/29 Javascript
点击按钮出现60秒倒计时的简单js代码(推荐)
2016/06/07 Javascript
angular.js之路由的选择方法
2016/09/24 Javascript
Vue 过渡实现轮播图效果
2017/03/27 Javascript
Angular弹出模态框的两种方式
2017/10/19 Javascript
详解基于Vue+Koa的pm2配置
2017/10/24 Javascript
Koa项目搭建过程详细记录
2018/04/12 Javascript
vue-cli 3 全局过滤器的实例代码详解
2019/06/03 Javascript
vue各种事件监听实例(小结)
2020/06/24 Javascript
原生js实现随机点名
2020/07/05 Javascript
[52:44]VGJ.T vs infamous Supermajor小组赛D组败者组第一轮 BO3 第一场 6.3
2018/06/04 DOTA
Python中创建字典的几种方法总结(推荐)
2017/04/27 Python
对python中xlsx,csv以及json文件的相互转化方法详解
2018/12/25 Python
python读写csv文件方法详细总结
2019/07/05 Python
python按比例随机切分数据的实现
2019/07/11 Python
Python 批量读取文件中指定字符的实现
2020/03/06 Python
python入门教程之基本算术运算符
2020/11/13 Python
使用css3实现的tab选项卡代码分享
2014/12/09 HTML / CSS
秘鲁购物网站:Linio秘鲁
2017/04/07 全球购物
System.Array.CopyTo()和System.Array.Clone()有什么区别
2016/06/20 面试题
销售主管竞聘书
2014/03/31 职场文书
新学期教师寄语
2014/04/02 职场文书
解除劳动合同协议书范本
2014/04/14 职场文书
爱护公共设施的标语
2014/06/24 职场文书
人力资源职位说明书
2014/07/29 职场文书
中秋节国旗下演讲稿
2014/09/05 职场文书
2014年底工作总结
2014/12/15 职场文书
保研专家推荐信范文
2015/03/25 职场文书
民事答辩状格式范文
2015/05/21 职场文书
行政二审代理词
2015/05/25 职场文书
Golang全局变量加锁的问题解决
2021/05/08 Golang