JavaScript 拖拽实例代码


Posted in Javascript onSeptember 21, 2016

一、JS 拖拽的实现实例代码:

<!DOCTYPE html>
 <html lang="en">
 <head>
 <meta charset="UTF-8" />
 <title>拖拽js</title>
 <style type="text/css">
 html, body {
 overflow:hidden;
 }
 body, div, {
 margin:0;
 padding:0;
 }
 body {
 color:#fff;
 font:12px/2 Arial;
 }
 p {
 padding:0 10px;
 margin-top:10px;
 }
 span {
 color:#ff0;
 padding-left:5px;
 }
 #box {
 position:absolute;
 width:300px;
 height:150px;
 background:#D5CDDA;
 border:2px solid #ccc;
 top:150px;
 left:400px;
 margin:0;
 }
 #drag {
 height:25px;
 cursor:move;
 background:#724a88;
 border-bottom:2px solid #ccc;
 padding:0 10px;
 }

</style>
</head>
<body>
<div id="box">
 <div id="drag">拖动区域</div>
 被拖动的整个div
 </div>
</body>
</html>

<script src="js/jquery-1.10.1.min.js"></script>
<script type="text/javascript">
$(function(){
 moveBox($("#box"),$("#drag")) ;
})
//B被拖动的div,BT可拖动区域
function moveBox(B,BT){
 var bDrag = false;
 var _x,_y;
 BT.mousedown(function(event){
var e=event || window.event;
bDrag = true;
 _x=e.pageX-B.position().left;
 _y=e.pageY-B.position().top;
 return false
 })
 $(document).mousemove(function(event){
 if(!bDrag) return false;
 var e=event || window.event;
 var x=e.pageX-_x;
 var y=e.pageY-_y;
 console.log(B.position());
 var maxL = $(document).width() - B.outerWidth();
 var maxT = $(document).height() - B.outerHeight();
 x = x < 0 ? 0: x; x = x > maxL ? maxL: x;
 y = y < 0 ? 0: y; y = y > maxT ? maxT: y;
 B.css({left:x,top:y});
 return false
 }).mouseup(function(){
 bDrag = false;
 return false
 })
}
</script>

二、 js之拖拽效果

主要原理:

   1、当鼠标按下时,记录鼠标坐标,用到的是 onmousedown;

   2、当鼠标移动时,计算鼠标移动的坐标之差,用到的是 onmousemove;

   3、当鼠标松开时,清除事件,用到的是 onmouseup;

了解的知识:

   1、div 的 offsetLeft 与 style.left 的区别:https://3water.com/article/93142.htm

效果图如下:

JavaScript 拖拽实例代码

突然发现有没有效果图都一样哈哈,不说废话了,上代码:

html代码:

<!DOCTYPE html>
<html>
<head>
 <meta charset="utf8">
 <title>js拖拽效果</title>
 <style type="text/css">
 #div1 {
  width : 200px;
  height: 200px;
  position: absolute;
  background: #99dd33;
  cursor: move;
 }
 </style>
</head>
<body>
 <div id="div1"></div>
</body>
<script type="text/javascript">
 // js代码
</script>
</html>

js代码:

window.onload function() {
 var disX = disY = 0;       // 鼠标距离div的左距离和上距离
 var div1 = document.getElementById("div1"); // 得到div1对象
 
 // 鼠标按下div1时
 div1.onmousedown = function(e) {
  var evnt = e || event;     // 得到鼠标事件
  disX = evnt.clientX - div1.offsetLeft; // 鼠标横坐标 - div1的left
  disY = evnt.clientY - div1.offsetTop; // 鼠标纵坐标 - div1的top
  
  // 鼠标移动时
  document.onmousemove = function(e) {
   var evnt = e || event;
   var x = evnt.clientX - disX;
   var y = evnt.clientY - disY;
   var window_width = document.documentElement.clientWidth - div1.offsetWidth;
   var window_height = document.documentElement.clientHeight - div1.offsetHeight;
   
   x = ( x < 0 ) ? 0 : x;       // 当div1到窗口最左边时
   x = ( x > window_width ) ? window_width : x; // 当div1到窗口最右边时
   y = ( y < 0 ) ? 0 : y;       // 当div1到窗口最上边时
   y = ( y > window_height ) ? window_height : y; // 当div1到窗口最下边时
   
   div1.style.left = x + "px";
   div1.style.top = y + "px";
  };
  
  // 鼠标抬起时
  document.onmouseup = function() {
   document.onmousemove =null;
   document.onmouup = null;
  };
  
  return false;
 };
};

 当然,这个虽然支持大部分浏览器,但是,我觉得div跟随鼠标的速度有点滞后,如果有好的解决办法请联系我喔,谢谢!

以上就是js实现拖拽的实例代码,有需要的小伙伴可以参考下,谢谢大家对本站的支持!

Javascript 相关文章推荐
自己的js工具_Form 封装
Aug 21 Javascript
javascript 设为首页与加入收藏兼容多浏览器代码
Jan 11 Javascript
使用indexOf等在JavaScript的数组中进行元素查找和替换
Sep 18 Javascript
深入理解Javascript中的循环优化
Nov 09 Javascript
javascript实现模拟时钟的方法
May 13 Javascript
jQuery实现下拉框左右移动(全部移动,已选移动)
Apr 15 Javascript
js实现弹窗暗层效果
Jan 16 Javascript
ionic实现底部分享功能
May 11 Javascript
详解AngularJS ng-class样式切换
Jun 27 Javascript
详解React native全局变量的使用(跨组件的通信)
Sep 07 Javascript
vue+element实现表单校验功能
May 20 Javascript
js如何获取访问IP、地区、当前操作浏览器
Jul 23 Javascript
Angularjs中controller的三种写法分享
Sep 21 #Javascript
jQuery中Find选择器用法示例
Sep 21 #Javascript
jQuery实现点击后高亮背景固定显示的菜单效果【附demo源码下载】
Sep 21 #Javascript
Angular2 (RC5) 路由与导航详解
Sep 21 #Javascript
Angular2 (RC4) 路由与导航详解
Sep 21 #Javascript
AngularJS 单元测试(二)详解
Sep 21 #Javascript
jQuery实现带延时功能的水平多级菜单效果【附demo源码下载】
Sep 21 #Javascript
You might like
php 变量未定义等错误的解决方法
2011/01/12 PHP
php中OR与|| AND与&amp;&amp;的区别总结
2013/10/26 PHP
PHP flush 函数使用注意事项
2016/08/26 PHP
php获得刚插入数据的id 的几种方法总结
2018/05/31 PHP
php + ajax 实现的写入数据库操作简单示例
2020/05/16 PHP
js操作checkbox遇到的问题解决
2013/06/29 Javascript
全面理解面向对象的 JavaScript(来自ibm)
2013/11/10 Javascript
jQuery实现鼠标可拖动调整表格列宽度
2014/05/26 Javascript
JavaScript和CSS交互的方法汇总
2014/12/02 Javascript
javascript实现带节日和农历的日历特效
2015/02/01 Javascript
jQuery实现图片文字淡入淡出效果
2015/12/21 Javascript
js实现正则匹配中文标点符号的方法
2015/12/23 Javascript
web.js.字符串与正则表达式操作
2017/05/13 Javascript
JS中Safari浏览器中的Date
2017/07/17 Javascript
详解angularJS+Ionic移动端图片上传的解决办法
2017/09/13 Javascript
ionic选择多张图片上传的示例代码
2017/10/10 Javascript
Angularjs按需查询实例代码
2017/10/30 Javascript
微信小程序自定义音乐进度条的实例代码
2018/08/28 Javascript
ECharts地图绘制和钻取简易接口详解
2019/07/12 Javascript
vue3.0生命周期的示例代码
2020/09/24 Javascript
python使用clear方法清除字典内全部数据实例
2015/07/11 Python
Python实现的自定义多线程多进程类示例
2018/03/23 Python
python 随机打乱 图片和对应的标签方法
2018/12/14 Python
Mac在python3环境下安装virtualwrapper遇到的问题及解决方法
2019/07/09 Python
django获取from表单multiple-select的value和id的方法
2019/07/19 Python
python爬取代理ip的示例
2020/12/18 Python
python数据抓取3种方法总结
2021/02/07 Python
维多利亚的秘密官方旗舰店:VICTORIA’S SECRET
2018/04/02 全球购物
HolidayLettings英国:预订最好的度假公寓、别墅和自助式住宿
2019/08/27 全球购物
教师申诉制度
2014/01/29 职场文书
企业新年寄语
2014/04/04 职场文书
上班迟到检讨书300字
2014/10/18 职场文书
优秀班主任工作总结2015
2015/05/25 职场文书
复兴之路观后感
2015/06/02 职场文书
2016师德师风学习心得体会
2016/01/12 职场文书
python 如何在 Matplotlib 中绘制垂直线
2021/04/02 Python