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 相关文章推荐
Span元素的width属性无效果原因及解决方案
Jan 15 Javascript
js判断运行jsp页面的浏览器类型以及版本示例
Oct 30 Javascript
Jqgrid表格随窗口大小改变而改变的简单实例
Dec 28 Javascript
jquery中post方法用法实例
Oct 21 Javascript
json实现前后台的相互传值详解
Jan 05 Javascript
简介AngularJS的视图功能应用
Jun 17 Javascript
PHP+jQuery+Ajax+Mysql如何实现发表心情功能
Aug 06 Javascript
微信小程序获取循环元素id以及wx.login登录操作
Aug 17 Javascript
浅谈React和Redux的连接react-redux
Dec 04 Javascript
详解Angularjs 自定义指令中的数据绑定
Jul 19 Javascript
小程序点赞收藏功能的实现代码示例
Sep 07 Javascript
JS如何监听div的resize事件详解
Dec 03 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制作百度词典查词采集器
2015/01/29 PHP
PHP实现普通hash分布式算法简单示例
2018/08/06 PHP
Laravel 5+ .env环境配置文件详解
2020/04/06 PHP
jquery实现类似淘宝星星评分功能有截图
2014/09/15 Javascript
AngularJs expression详解及简单示例
2016/09/01 Javascript
getElementById().innerHTML与getElementById().value的区别
2016/10/27 Javascript
深入理解选择框脚本[推荐]
2016/12/13 Javascript
jQuery Validate验证框架详解(推荐)
2016/12/17 Javascript
JS基于面向对象实现的选项卡效果示例
2016/12/20 Javascript
BootStrap Select清除选中的状态恢复默认状态
2017/06/20 Javascript
React Native中的RefreshContorl下拉刷新使用
2017/10/09 Javascript
Vue响应式原理Observer、Dep、Watcher理解
2019/06/06 Javascript
ElementUI Tag组件实现多标签生成的方法示例
2019/07/08 Javascript
VUE:vuex 用户登录信息的数据写入与获取方式
2019/11/11 Javascript
微信小程序封装多张图片上传api代码实例
2019/12/30 Javascript
详解node和ES6的模块导出与导入
2020/02/19 Javascript
node koa2 ssr项目搭建的方法步骤
2020/12/11 Javascript
[47:20]DAC2018 4.4 淘汰赛 Optic vs Mineski 第一场
2018/04/05 DOTA
python如何获取服务器硬件信息
2017/05/11 Python
flask入门之表单的实现
2018/07/18 Python
Python Matplotlib 基于networkx画关系网络图
2019/07/10 Python
python系列 文件操作的代码
2019/10/06 Python
Python列表操作方法详解
2020/02/09 Python
在python tkinter界面中添加按钮的实例
2020/03/04 Python
Python实现猜年龄游戏代码实例
2020/03/25 Python
如何实现更换Jupyter Notebook内核Python版本
2020/05/18 Python
python解释器安装教程的方法步骤
2020/07/02 Python
在Python3.74+PyCharm2020.1 x64中安装使用Kivy的详细教程
2020/08/07 Python
使用Python将xmind脑图转成excel用例的实现代码(一)
2020/10/12 Python
python切片作为占位符使用实例讲解
2021/02/17 Python
英国时尚女装购物网站:Missguided
2018/08/23 全球购物
商场促销活动方案
2014/02/08 职场文书
英语教师个人总结
2015/02/09 职场文书
幼儿园校车安全责任书
2015/05/08 职场文书
聘任通知书
2015/09/21 职场文书
小学三年级作文之写景
2019/11/05 职场文书