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 相关文章推荐
js 金额文本框实现代码
Feb 14 Javascript
js实现在文本框光标处添加字符的方法介绍
Nov 24 Javascript
轻松实现JavaScript图片切换
Jan 12 Javascript
基于Layer+jQuery的自定义弹框
May 26 Javascript
jQuery 移动端拖拽(模块化开发,触摸事件,webpack)
Oct 28 Javascript
深入理解 JavaScript 中的 JSON
Apr 06 Javascript
vue.js内部自定义指令与全局自定义指令的实现详解(利用directive)
Jul 11 Javascript
vue.js项目打包上线的图文教程
Nov 16 Javascript
angularjs 缓存的使用详解
Mar 19 Javascript
JavaScript基于数组实现的栈与队列操作示例
Dec 22 Javascript
vue 实现超长文本截取,悬浮框提示
Jul 29 Javascript
js实现跳一跳小游戏
Jul 31 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/21 PHP
PHP中多维数组的foreach遍历示例
2014/06/13 PHP
PHP实现递归无限级分类
2015/10/22 PHP
PHP文件管理之实现网盘及压缩包的功能操作
2017/09/20 PHP
php闭包中使用use声明变量的作用域实例分析
2018/08/09 PHP
PHP实现的敏感词过滤方法示例
2019/03/06 PHP
jQuery动画animate方法使用介绍
2013/05/06 Javascript
HTML长文本截取含有HTML代码同样适用的两种方法
2013/07/31 Javascript
在JS数组特定索引处指定位置插入元素
2014/07/27 Javascript
php,js,css字符串截取的办法集锦
2014/09/26 Javascript
JS实现pasteHTML兼容ie,firefox,chrome的方法
2016/06/22 Javascript
js数组操作方法总结(必看篇)
2016/11/22 Javascript
jQuery Validate设置onkeyup验证的实例代码
2016/12/09 Javascript
js 颜色选择插件
2017/01/23 Javascript
关于ES6的六个小特性(二)
2017/02/20 Javascript
jQuery zTree 异步加载添加子节点重复问题
2017/11/29 jQuery
VS Code转换大小写、修改选中文字或代码颜色的方法
2017/12/15 Javascript
jQuery高级编程之js对象、json与ajax用法实例分析
2019/11/01 jQuery
在webstorm中配置less的方法详解
2020/09/25 Javascript
[58:57]2018DOTA2亚洲邀请赛3月29日小组赛B组 Effect VS VGJ.T
2018/03/30 DOTA
Python实现的微信公众号群发图片与文本消息功能实例详解
2017/06/30 Python
解决python nohup linux 后台运行输出的问题
2018/05/11 Python
django的ORM模型的实现原理
2019/03/04 Python
Python+PyQT5的子线程更新UI界面的实例
2019/06/14 Python
python笔记之mean()函数实现求取均值的功能代码
2019/07/05 Python
python每天定时运行某程序代码
2019/08/16 Python
Python any()函数的使用方法
2019/10/28 Python
python3中sorted函数里cmp参数改变详解
2020/03/12 Python
电厂职工自我鉴定
2014/02/20 职场文书
保护动物倡议书
2014/04/15 职场文书
物业管理委托协议(2篇)
2014/09/23 职场文书
工作检讨书范文
2015/01/23 职场文书
风雨哈佛路观后感
2015/06/03 职场文书
端午节将至,用Python爬取粽子数据并可视化,看看网友喜欢哪种粽子吧!
2021/06/11 Python
idea搭建可运行Servlet的Web项目
2021/06/26 Java/Android
Windows server 2003卸载和安装IIS的图文教程
2022/07/15 Servers