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 相关文章推荐
JQuery.closest(),parent(),parents()寻找父结点
Feb 17 Javascript
THREE.JS入门教程(6)创建自己的全景图实现步骤
Jan 25 Javascript
jquery实现简单易懂的图片展示小例子
Nov 21 Javascript
JS实现固定在右下角可展开收缩DIV层的方法
Feb 13 Javascript
jquery实现具有嵌套功能的选项卡
Feb 12 Javascript
AngularJS 依赖注入详解及示例代码
Aug 17 Javascript
vue.js删除动态绑定的radio的指定项
Jun 02 Javascript
关于定制FileField中的上传文件名称问题
Aug 22 Javascript
JS正则表达式验证密码强度
Mar 18 Javascript
uniapp,微信小程序中使用 MQTT的问题
Jul 11 Javascript
Nuxt的路由动画效果案例
Nov 06 Javascript
vue响应式原理与双向数据的深入解析
Jun 04 Vue.js
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
Dedecms常用函数解析
2008/02/01 PHP
PHP优于Node.js的五大理由分享
2012/09/15 PHP
解析mysql 表中的碎片产生原因以及清理
2013/06/22 PHP
ucenter中词语过滤原理分析
2016/07/13 PHP
15个款优秀的 jQuery 图片特效插件推荐
2011/11/21 Javascript
js实现快速分享功能(你的文章分享工具)
2013/06/25 Javascript
ListBox实现上移,下移,左移,右移的简单实例
2014/02/13 Javascript
Javascript中的Callback方法浅析
2015/03/15 Javascript
jquery实现漂亮的二级下拉菜单代码
2015/08/26 Javascript
JavaScript知识点整理
2015/12/09 Javascript
浅析在javascript中创建对象的各种模式
2016/05/06 Javascript
JS前向后瞻正则表达式定义与用法示例
2016/12/27 Javascript
js实现颜色阶梯渐变效果(Gradient算法)
2017/03/21 Javascript
Angular中$broadcast和$emit的使用方法详解
2017/05/22 Javascript
JavaScript实现三级联动菜单实例代码
2017/06/26 Javascript
详解VUE 数组更新
2017/12/16 Javascript
详解如何在你的Vue项目配置vux
2018/06/04 Javascript
JavaScript 对引擎、运行时、调用堆栈的概述理解
2018/10/22 Javascript
详解微信小程序文件下载--视频和图片
2019/04/24 Javascript
记一次react前端项目打包优化的方法
2020/03/30 Javascript
vue2.0 watch里面的 deep和immediate用法说明
2020/10/30 Javascript
python 通过xml获取测试节点和属性的实例
2018/03/31 Python
Python清空文件并替换内容的实例
2018/10/22 Python
利用Pyhton中的requests包进行网页访问测试的方法
2018/12/26 Python
Python实现的爬取小说爬虫功能示例
2019/03/30 Python
python实现五子棋游戏
2019/06/18 Python
Python如何使用bokeh包和geojson数据绘制地图
2020/03/21 Python
Python带参数的装饰器运行原理解析
2020/06/09 Python
汽车技术服务与营销专业推荐信
2013/11/29 职场文书
秸秆管理实施方案
2014/03/15 职场文书
党的群众路线批评与自我批评范文
2014/10/16 职场文书
会计实训总结范文
2015/08/03 职场文书
工伤调解协议书
2016/03/21 职场文书
2019终止劳动合同协议书最新范本!
2019/07/09 职场文书
2019年亲子运动会口号
2019/10/11 职场文书
mysql分组后合并显示一个字段的多条数据方式
2022/01/22 MySQL