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 相关文章推荐
jQuery 学习 几种常用方法
Jun 11 Javascript
ajax处理php返回json数据的实例代码
Jan 24 Javascript
js加载之使用DOM方法动态加载Javascript文件
Nov 08 Javascript
js 模式窗口(模式对话框和非模式对话框)的使用介绍
Jul 17 Javascript
简单介绍jsonp 使用小结
Jan 27 Javascript
jQuery弹出层插件popShow(改进版)用法示例
Jan 23 Javascript
js实现从左向右滑动式轮播图效果
Jul 07 Javascript
详解Vue取消eslint语法限制
Aug 04 Javascript
基于vue、react实现倒计时效果
Aug 26 Javascript
ant-design-vue 实现表格内部字段验证功能
Dec 16 Javascript
Vue使用JSEncrypt实现rsa加密及挂载方法
Feb 07 Javascript
Element Notification通知的实现示例
Jul 27 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 服务器调试 Zend Debugger 的安装教程
2009/09/25 PHP
基于wordpress主题制作的具体实现步骤
2013/05/10 PHP
php递归删除目录下的文件但保留的实例分享
2014/05/10 PHP
Yii操作数据库实现动态获取表名的方法
2016/03/29 PHP
修改yii2.0用户登录使用的user表为其它的表实现方法(推荐)
2017/08/01 PHP
PHP Web表单生成器案例分析
2020/06/02 PHP
AngularJS ng-blur 指令详解及简单实例
2016/07/30 Javascript
BootStrap的select2既可以查询又可以输入的实现代码
2017/02/17 Javascript
JavaScript标准对象_动力节点Java学院整理
2017/06/27 Javascript
JavaScript数组去重算法实例小结
2018/05/07 Javascript
React之PureComponent的使用作用
2018/07/10 Javascript
微信小程序实现星级评价效果
2018/12/28 Javascript
[01:51]2014DOTA2国际邀请赛 这个赛场没有失败者VGTi5再见
2014/07/23 DOTA
Python常用的日期时间处理方法示例
2015/02/08 Python
在Python中使用NLTK库实现对词干的提取的教程
2015/04/08 Python
python中实现精确的浮点数运算详解
2017/11/02 Python
Python使用django框架实现多人在线匿名聊天的小程序
2017/11/29 Python
django admin添加数据自动记录user到表中的实现方法
2018/01/05 Python
python 接口返回的json字符串实例
2018/03/27 Python
python版大富翁源代码分享
2018/11/19 Python
对python_discover方法遍历所有执行的用例详解
2019/02/13 Python
浅析python,PyCharm,Anaconda三者之间的关系
2019/11/27 Python
Python 识别12306图片验证码物品的实现示例
2020/01/20 Python
GUESS盖尔斯法国官网:美国时尚品牌
2016/09/23 全球购物
俄罗斯大型在线书店:Читай-город
2019/10/10 全球购物
N:Philanthropy官网:美国洛杉矶基础款服装
2020/06/09 全球购物
杭州SQL浙江浙大网新恩普软件有限公司
2013/07/27 面试题
社区工作者先进事迹
2014/01/18 职场文书
各营销点岗位职责范本
2014/03/05 职场文书
公司联欢晚会主持词
2014/03/22 职场文书
个人社会实践自我鉴定
2014/03/24 职场文书
毕业论文指导教师评语
2014/12/30 职场文书
如何书写先进事迹材料?
2019/07/02 职场文书
关于食品安全的演讲稿范文(三篇)
2019/10/21 职场文书
浅谈sql_@SelectProvider及使用注意说明
2021/08/04 Java/Android
MySQL数据库⾼可⽤HA实现小结
2022/01/22 MySQL