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扩展插件Validate 5添加自定义验证方法
Sep 05 Javascript
jQuery实现用方向键控制层的上下左右移动
Jan 13 Javascript
javascript实现促销倒计时+fixed固定在底部
Sep 18 Javascript
jquery插件jTimer(jquery定时器)使用方法
Dec 23 Javascript
ionic由于使用了header和subheader导致被遮挡的问题的两种解决方法
Sep 22 Javascript
vue日期组件 支持vue1.0和2.0
Jan 09 Javascript
集成vue到jquery/bootstrap项目的方法
Feb 10 jQuery
详解vue-cli 本地开发mock数据使用方法
May 29 Javascript
Vue引用Swiper4插件无法重写分页器样式的解决方法
Sep 27 Javascript
微信小程序实现基于三元运算验证手机号/姓名功能示例
Jan 19 Javascript
Vue实现商品分类菜单数量提示功能
Jul 26 Javascript
Vue根据条件添加click事件的方式
Nov 09 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下打开phpMyAdmin出现403错误的问题解决方法
2013/05/23 PHP
小谈php正则提取图片地址
2014/03/27 PHP
yii实现使用CUploadedFile上传文件的方法
2015/12/28 PHP
TP(thinkPHP)框架多层控制器和多级控制器的使用示例
2018/06/13 PHP
PHP结合Ffmpeg快速搭建流媒体服务的实践记录
2018/10/31 PHP
JQuery入门——用one()方法绑定事件处理函数(仅触发一次)
2013/02/05 Javascript
jQuery鼠标经过方形图片切换成圆边效果代码分享
2015/08/20 Javascript
js实现的二分查找算法实例
2016/01/21 Javascript
JavaScript的函数式编程基础指南
2016/03/19 Javascript
js中window.open的参数及注意注意事项
2016/07/06 Javascript
微信小程序 PHP生成带参数二维码
2017/02/21 Javascript
js实现日历与定时器
2017/02/22 Javascript
element-ui 关于获取select 的label值方法
2018/08/24 Javascript
vue 单页应用和多页应用的优劣
2020/10/22 Javascript
javascript全局自定义鼠标右键菜单
2020/12/08 Javascript
Pthon批量处理将pdb文件生成dssp文件
2015/06/21 Python
python爬取淘宝商品详情页数据
2018/02/23 Python
Python中安装easy_install的方法
2018/11/18 Python
python 设置输出图像的像素大小方法
2019/07/04 Python
使用python实现希尔、计数、基数基础排序的代码
2019/12/25 Python
python requests模拟登陆github的实现方法
2019/12/26 Python
tensorflow对图像进行拼接的例子
2020/02/05 Python
python GUI库图形界面开发之PyQt5动态(可拖动控件大小)布局控件QSplitter详细使用方法与实例
2020/03/06 Python
安装不同版本的tensorflow与models方法实现
2021/02/20 Python
css3制作动态进度条以及附加jQuery百分比数字显示
2012/12/13 HTML / CSS
配置H5的滚动条样式的示例代码
2018/03/09 HTML / CSS
高清屏下canvas重置尺寸引发的问题的解决
2019/10/14 HTML / CSS
美国正版电视节目和电影在线观看:Hulu
2018/05/24 全球购物
Lentiamo荷兰:在线订购隐形眼镜、隐形眼镜液和太阳镜
2019/10/25 全球购物
研究生毕业鉴定
2014/01/29 职场文书
幼儿教师师德演讲稿
2014/05/06 职场文书
大专学生求职信
2014/07/04 职场文书
幼儿园小班教师个人工作总结
2015/02/06 职场文书
干货干货!2019最新优秀创业计划书
2019/03/21 职场文书
图文详解Nginx版本平滑升级方案
2021/09/15 Servers
python 判断文件或文件夹是否存在
2022/03/18 Python