javascript实现行拖动的方法


Posted in Javascript onMay 27, 2015

本文实例讲述了javascript实现行拖动的方法。分享给大家供大家参考。具体如下:

<!doctype html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>行拖动</title>
<script>
 window.onload = function(){
 //绑定事件
 var addEvent = document.addEventListener ? function(el,type,callback){
  el.addEventListener( type, callback, !1 );
 } : function(el,type,callback){
  el.attachEvent( "on" + type, callback );
 }
 //判定对样式的支持
 var getStyleName= (function(){
  var prefixes = ['', '-ms-','-moz-', '-webkit-', '-khtml-', '-o-'];
  var reg_cap = /-([a-z])/g;
  function getStyleName(css, el) {
  el = el || document.documentElement;
  var style = el.style,test;
  for (var i=0, l=prefixes.length; i < l; i++) {
  test = (prefixes[i] + css).replace(reg_cap,function($0,$1){
  return $1.toUpperCase();
  });
  if(test in style){
  return test;
  }
  }
  return null;
  }
  return getStyleName;
 })();
 var userSelect = getStyleName("user-select");
 //精确获取样式
 var getStyle = document.defaultView ? function(el,style){
  return document.defaultView.getComputedStyle(el, null).getPropertyValue(style)
 } : function(el,style){
  style = style.replace(/\-(\w)/g, function($, $1){
  return $1.toUpperCase();
  });
  return el.currentStyle[style];
 }
 var dragManager = {
  y:0,
  dragStart:function(e){
  e = e || event;
  var handler = e.target || e.srcElement;
  if(handler.nodeName === "TD"){
  handler = handler.parentNode;
  dragManager.handler = handler;
  if(!handler.getAttribute("data-background")){
  handler.setAttribute("data-background",getStyle(handler,"background-color"))
  }
  //显示为可移动的状态
  handler.style.backgroundColor = "#ccc";
  handler.style.cursor = "move";
  dragManager.y = e.clientY;
  if(typeof userSelect === "string"){
  return document.documentElement.style[userSelect] = "none";
  }
  document.unselectable = "on";
  document.onselectstart = function(){
  return false;
  }
  }
  },
  draging:function(e){//mousemove时拖动行
  var handler = dragManager.handler;
  if(handler){
  e = e || event;
  var y = e.clientY;
  var down = y > dragManager.y;//是否向下移动
  var tr = document.elementFromPoint(e.clientX,e.clientY);
  if(tr && tr.nodeName == "TD"){
  tr = tr.parentNode
  dragManager.y = y;
  if( handler !== tr){
   tr.parentNode.insertBefore(handler, (down ? tr.nextSibling : tr));
  }
  };
  }
  },
  dragEnd:function(){
  var handler = dragManager.handler
  if (handler) {
  handler.style.backgroundColor = handler.getAttribute("data-background");
  handler.style.cursor = "default";
  dragManager.handler = null;
  }
  if(typeof userSelect === "string"){
  return document.documentElement.style[userSelect] = "text";
  }
  document.unselectable = "off";
  document.onselectstart = null;
  },
  main:function(el){
  addEvent(el,"mousedown",dragManager.dragStart);
  addEvent(document,"mousemove",dragManager.draging);
  addEvent(document,"mouseup",dragManager.dragEnd);
  }
 }
 var el = document.getElementById("table");
 dragManager.main(el);
 }
</script>
<style>
.table{width:60%;border: 1px solid red;border-collapse: collapse;}
.table td{border: 1px solid red;height: 20px;}
</style>
</head>
<body>
<h1>行拖动</h1>
<table id="table" class="table">
<tbody>
<tr><td>1</td><td>One</td><td>dom.require</td></tr>
<tr id="2" ><td class="2">2</td><td>Two</td><td>ControlJS </td></tr>
<tr id="3" ><td class="3">3</td><td>Three</td><td>HeadJS</td></tr>
<tr id="4" ><td class="4">4</td><td>Four</td><td>LAB.js</td></tr>
<tr id="5" ><td class="5">5</td><td>Five</td><td>$script.js</td></tr>
<tr id="6" ><td class="6">6</td><td>Six</td><td>NBL.js</td></tr>
</tbody>
</table>
</body>
</html>

希望本文所述对大家的javascript程序设计有所帮助。

Javascript 相关文章推荐
Js(JavaScript)中,弹出是或否的选择框示例(confirm用法的实例分析)
Jul 09 Javascript
三种检测iPhone/iPad设备方向的方法
Apr 23 Javascript
七个很有意思的PHP函数
May 12 Javascript
jQuery内部原理和实现方式浅析
Feb 03 Javascript
JavaScript实现类似拉勾网的鼠标移入移出效果
Oct 27 Javascript
Angular2利用组件与指令实现图片轮播组件
Mar 27 Javascript
JavaScript适配器模式详解
Oct 19 Javascript
webstorm中vue语法的支持详解
May 09 Javascript
微信小程序之多列表的显示和隐藏功能【附源码】
Aug 06 Javascript
vue实现键盘输入支付密码功能
Aug 18 Javascript
解决vue单页路由跳转后scrollTop的问题
Sep 03 Javascript
JS 实现发送短信验证码的“59秒后重新发送验证短信”功能
Aug 23 Javascript
JavaScript操作Cookie方法实例分析
May 27 #Javascript
JavaScript通过事件代理高亮显示表格行的方法
May 27 #Javascript
jquery预加载图片的方法
May 27 #Javascript
jQuery仿gmail实现fixed布局的方法
May 27 #Javascript
js实现键盘Enter键提交表单的方法
May 27 #Javascript
js实现简单锁屏功能实例
May 27 #Javascript
JS实现简单路由器功能的方法
May 27 #Javascript
You might like
探讨捕获php错误信息方法的详解
2013/06/09 PHP
PHP fopen()和 file_get_contents()应用与差异介绍
2014/03/19 PHP
ThinkPHP中URL路径访问与模块控制器之间的关系
2014/08/23 PHP
CSS3画一个阴阳八卦图
2021/03/09 HTML / CSS
js冒泡法和数组转换成字符串示例代码
2013/08/14 Javascript
Node.js中使用计时器定时执行函数详解
2014/08/15 Javascript
javascript记录文本框内文字个数检测文字个数变化
2014/10/14 Javascript
JavaScript中定义类的方式详解
2016/01/07 Javascript
基于javascript实现精确到毫秒的倒计时限时抢购
2016/04/17 Javascript
js实现动态创建的元素绑定事件
2016/07/19 Javascript
jQuery post数据至ashx实例详解
2016/11/18 Javascript
移动端刮刮乐的实现方式(js+HTML5)
2017/03/23 Javascript
不得不看之JavaScript构造函数及new运算符
2017/08/21 Javascript
使用JS组件实现带ToolTip验证框的实例代码
2017/08/23 Javascript
动手写一个angular版本的Message组件的方法
2017/12/16 Javascript
详解ESLint在Vue中的使用小结
2018/10/15 Javascript
详解vue微信网页授权最终解决方案
2019/06/16 Javascript
浅谈vue中get请求解决传输数据是数组格式的问题
2020/08/03 Javascript
vue实现选中效果
2020/10/07 Javascript
python执行get提交的方法
2015/04/29 Python
Python验证码识别的方法
2015/07/10 Python
Python简单计算文件夹大小的方法
2015/07/14 Python
简单了解OpenCV是个什么东西
2017/11/10 Python
Java及python正则表达式详解
2017/12/27 Python
Python Dataframe 指定多列去重、求差集的方法
2018/07/10 Python
python读写csv文件并增加行列的实例代码
2019/08/01 Python
Bibloo罗马尼亚网站:女装、男装、童装及鞋子和配饰
2019/07/20 全球购物
联想C++笔试题
2012/06/13 面试题
外贸主管求职简历的自我评价
2013/10/23 职场文书
初中高效课堂实施方案
2014/02/26 职场文书
毕业证委托书范文
2014/09/26 职场文书
文员转正自我鉴定怎么写
2014/09/29 职场文书
小学二年级数学教学计划
2015/01/20 职场文书
结婚幸福感言
2015/08/01 职场文书
医院保洁员管理制度
2015/08/05 职场文书
python和C/C++混合编程之使用ctypes调用 C/C++的dll
2022/04/29 Python