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 相关文章推荐
不错的新闻标题颜色效果
Dec 10 Javascript
网页右键ie不支持event.preventDefault和event.returnValue (需要加window)
Feb 22 Javascript
jquery实现商品拖动选择效果代码(自写)
May 28 Javascript
JS实现一键回顶功能示例代码
Oct 28 Javascript
js调试系列 初识控制台
Jun 18 Javascript
原生js和jquery实现图片轮播淡入淡出效果
Apr 23 Javascript
深入理解JS DOM事件机制
Aug 06 Javascript
jquery中有哪些api jQuery主要API
Nov 20 jQuery
JavaScript数组排序reverse()和sort()方法详解
Dec 24 Javascript
JavaScript中的高级函数
Jan 04 Javascript
this在vue和小程序中的使用详解
Jan 28 Javascript
jquery实现轮播图特效
Apr 12 jQuery
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学习笔记之面向对象编程
2012/12/29 PHP
解析php中const与define的应用区别
2013/06/18 PHP
解决file_get_contents无法请求https连接的方法
2013/12/17 PHP
PHP根据session与cookie用户登录状态操作类的代码
2016/05/13 PHP
PHP 微信扫码支付源代码(推荐)
2016/11/03 PHP
PHP+mysql实现从数据库获取下拉树功能示例
2017/01/06 PHP
PHP常用正则表达式精选(推荐)
2019/05/28 PHP
jquery ajax 同步异步的执行示例代码
2010/06/23 Javascript
20款非常优秀的 jQuery 工具提示插件 推荐
2012/07/15 Javascript
JS分页效果示例
2013/10/11 Javascript
利用js正则表达式验证手机号,email地址,邮政编码
2014/01/23 Javascript
jQuery简易图片放大特效示例代码
2014/06/09 Javascript
js事件监听机制(事件捕获)总结
2014/08/08 Javascript
jQuery鼠标悬浮链接弹出跟随图片实例代码
2016/01/08 Javascript
[原创]jQuery实现合并/追加数组并去除重复项的方法
2018/04/11 jQuery
微信小程序实现登录遮罩效果
2018/11/01 Javascript
JavaScript实现拖拽盒子效果
2020/02/06 Javascript
JS控制下拉列表左右选择实例代码
2020/05/08 Javascript
[12:51]71泪洒现场!是DOTA2让经典重现
2014/03/24 DOTA
Python实现对比不同字体中的同一字符的显示效果
2015/04/23 Python
解决Pycharm 中遇到Unresolved reference 'sklearn'的问题
2020/07/13 Python
关于h5中的fetch方法解读(小结)
2017/11/15 HTML / CSS
教你使用Canvas处理图片的方法
2017/11/28 HTML / CSS
丝芙兰美国官网:SEPHORA美国
2016/08/03 全球购物
adidas旗下高尔夫装备供应商:TaylorMade Golf(泰勒梅高尔夫)
2016/08/28 全球购物
英国老牌潮鞋店:Offspring
2019/08/19 全球购物
外贸英语毕业生自荐信
2013/11/14 职场文书
开办化妆品公司创业计划书
2013/12/26 职场文书
铁路个人事迹材料
2014/01/30 职场文书
银行简历自我评价
2014/02/11 职场文书
中专毕业生的自荐书
2014/07/01 职场文书
2014年助理政工师工作总结
2014/12/19 职场文书
利用javaScript处理常用事件详解
2021/04/14 Javascript
Python使用Kubernetes API访问集群
2021/05/30 Python
Redisson实现Redis分布式锁的几种方式
2021/08/07 Redis
详解Redis的三种常用的缓存读写策略步骤
2022/05/06 Redis