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监听表单value的修改同步问题,跨浏览器支持
Dec 31 Javascript
两个数组去重的JS代码
Dec 04 Javascript
js实现弹窗插件功能实例代码分享
Dec 12 Javascript
javascript客户端遍历控件与获取父容器对象示例代码
Jan 06 Javascript
js调用打印机打印网页字体总是缩小一号的解决方法
Jan 24 Javascript
Jquery自定义button按钮的几种方法
Jun 11 Javascript
个人总结的一些JavaScript技巧、实用函数、简洁方法、编程细节
Jun 10 Javascript
测试IE浏览器对JavaScript的AngularJS的兼容性
Jun 19 Javascript
jQuery插件版本冲突的处理方法分析
Jan 16 Javascript
详解vue-cli构建项目反向代理配置
Sep 07 Javascript
深入Node TCP模块的理解
Mar 13 Javascript
小程序两种滚动公告栏的实现方法
Sep 17 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生成html分页列表的代码
2007/03/18 PHP
使用PHP批量生成随机用户名
2008/07/10 PHP
php chr() ord()中文截取乱码问题解决方法
2008/09/08 PHP
基于PHP代码实现中奖概率算法可用于刮刮卡、大转盘等抽奖算法
2015/12/20 PHP
php die()与exit()的区别实例详解
2016/12/03 PHP
php工具型代码之印章抠图
2018/07/18 PHP
关于laravel框架中的常用目录路径函数
2019/10/23 PHP
php5.3/5.4/5.5/5.6/7常见新增特性汇总整理
2020/02/27 PHP
css3实现背景模糊的三种方式
2021/03/09 HTML / CSS
JavaScript 学习笔记(十三)Dom创建表格
2010/01/21 Javascript
JS+css 图片自动缩放自适应大小
2013/08/08 Javascript
JQuery中dataGrid设置行的高度示例代码
2014/01/03 Javascript
javascript获取当前鼠标坐标的方法
2015/01/10 Javascript
Node.js中child_process实现多进程
2015/02/03 Javascript
Node.js静态文件服务器改进版
2016/01/10 Javascript
js设置和获取自定义属性的方法
2016/10/20 Javascript
JQuery 封装 Ajax 常用方法(推荐)
2017/05/21 jQuery
vuejs事件中心管理组件间的通信详解
2017/08/09 Javascript
详解vue中移动端自适应方案
2019/05/05 Javascript
JavaScript canvas动画实现时钟效果
2020/02/10 Javascript
vue实现购物车列表
2020/06/30 Javascript
python模拟登陆Tom邮箱示例分享
2014/01/13 Python
python开发之函数定义实例分析
2015/11/12 Python
解决Django中修改js css文件但浏览器无法及时与之改变的问题
2019/08/31 Python
Python3操作Excel文件(读写)的简单实例
2019/09/02 Python
如何在python中处理配置文件代码实例
2020/09/27 Python
css3中单位px,em,rem,vh,vw,vmin,vmax的区别及浏览器支持情况
2016/12/06 HTML / CSS
枚举和一组预处理的#define有什么不同
2016/09/21 面试题
《夜晚的实验》教学反思
2014/02/19 职场文书
装饰公司活动策划方案
2014/08/23 职场文书
个人主要事迹材料
2014/08/26 职场文书
文秘班元旦晚会活动策划方案
2014/08/28 职场文书
幼儿园感恩节活动方案
2014/10/06 职场文书
元素水平垂直居中的方式
2021/03/31 HTML / CSS
教你用eclipse连接mysql数据库
2021/04/22 MySQL
windows10 家庭版下FTP服务器搭建教程
2022/08/05 Servers