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 相关文章推荐
CutePsWheel javascript libary 控制输入文本框为可使用滚轮控制的js库
Feb 07 Javascript
JavaScript实现的一个计算数字步数的算法分享
Dec 06 Javascript
了不起的node.js读书笔记之mongodb数据库交互
Dec 22 Javascript
js实现点击图片改变页面背景图的方法
Feb 28 Javascript
Angular2 (RC5) 路由与导航详解
Sep 21 Javascript
利用jquery给指定的table动态添加一行、删除一行的方法
Oct 12 Javascript
基于js实现二级下拉联动
Dec 17 Javascript
详解angular笔记路由之angular-router
Sep 12 Javascript
vue如何根据网站路由判断页面主题色详解
Nov 02 Javascript
对TypeScript库进行单元测试的方法
Jul 18 Javascript
js中!和!!的区别与用法
May 09 Javascript
js实现鼠标拖曳效果
Dec 30 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实现搜索一维数组元素并删除二维数组对应元素的方法
2015/07/06 PHP
PHP 5.6.11中CURL模块问题的解决方法
2016/08/08 PHP
PHP实现发送微博消息功能完整示例
2019/12/04 PHP
学习YUI.Ext 第六天--关于树TreePanel(Part 1)
2007/03/10 Javascript
JavaScript 动态创建VML的方法
2009/10/14 Javascript
JS 退出系统并跳转到登录界面的实现代码
2013/06/29 Javascript
javascript模拟枚举的简单实例
2014/03/06 Javascript
JavaScript的arguments对象应用示例
2014/09/15 Javascript
JS密码生成与强度检测完整实例(附demo源码下载)
2016/04/06 Javascript
javascript设计模式之module(模块)模式
2016/08/19 Javascript
很棒的一组js图片轮播特效
2017/01/12 Javascript
详解javascript 正则表达式之分组与前瞻匹配
2018/05/30 Javascript
浅析vue中的MVVM实现原理
2019/03/04 Javascript
javascript异常处理实现原理详解
2020/02/17 Javascript
python thread 并发且顺序运行示例
2009/04/09 Python
Python中处理时间的几种方法小结
2015/04/09 Python
Python如何快速上手? 快速掌握一门新语言的方法
2017/11/14 Python
Python对列表去重的多种方法(四种方法)
2017/12/05 Python
python读取和保存视频文件
2018/04/16 Python
python3解析库BeautifulSoup4的安装配置与基本用法
2018/06/26 Python
python面试题小结附答案实例代码
2019/04/11 Python
python实现数据分析与建模
2019/07/11 Python
Python-接口开发入门解析
2019/08/01 Python
Python如何实现自带HTTP文件传输服务
2020/07/08 Python
一份全面的PHP面试问题考卷
2012/07/15 面试题
中间件分为哪几类
2012/03/14 面试题
应届毕业生个人自我评价
2013/09/20 职场文书
职专应届生求职信
2013/11/16 职场文书
学生励志演讲稿
2014/01/06 职场文书
初中考试作弊检讨书
2014/02/01 职场文书
新学期决心书
2014/03/11 职场文书
《风娃娃》教学反思
2014/04/19 职场文书
社区安全温馨提示语
2015/07/14 职场文书
预备党员入党感言
2015/08/01 职场文书
《吸血鬼幸存者》新内容发布 追加多个全新模式
2022/04/07 其他游戏
python 学习GCN图卷积神经网络
2022/05/11 Python