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中的substring和substr函数的区别说明
May 07 Javascript
jquery foreach使用示例
Sep 12 Javascript
js获取时间并实现字符串和时间戳之间的转换
Jan 05 Javascript
原生js和jquery实现图片轮播特效
Apr 23 Javascript
javascript弹出拖动窗口
Aug 11 Javascript
jQuery抛物线运动实现方法(附完整demo源码下载)
Jan 08 Javascript
三分钟带你玩转jQuery.noConflict()
Feb 15 Javascript
在JavaScript中对HTML进行反转义详解
May 18 Javascript
第一次接触神奇的Bootstrap基础排版
Jul 26 Javascript
详解javascript事件绑定使用方法
Oct 20 Javascript
Vue封装一个简单轻量的上传文件组件的示例
Mar 21 Javascript
解决Vue项目中tff报错的问题
Oct 21 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基础知识:控制结构
2006/12/13 PHP
真正的ZIP文件操作类(php)
2007/07/21 PHP
ThinkPHP整合百度Ueditor图文教程
2014/10/21 PHP
php检查日期函数checkdate用法实例
2015/03/19 PHP
PHP定时执行任务实现方法详解(Timer)
2015/07/30 PHP
PHP实现操作redis的封装类完整实例
2015/11/14 PHP
PHP数组去重的更快实现方式分析
2018/05/09 PHP
ThinkPHP 5.1 跨域配置方法
2019/10/11 PHP
JavaScript 判断判断某个对象是Object还是一个Array
2010/01/28 Javascript
JavaScript中的Array对象使用说明
2011/01/17 Javascript
js里怎么取select标签里的值并修改
2012/12/10 Javascript
JS字符串拼接在ie中都报错的解决方法
2014/03/27 Javascript
做web开发 先学JavaScript
2014/12/12 Javascript
js查找节点的方法小结
2015/01/13 Javascript
jquery调取json数据实现省市级联的方法
2015/01/29 Javascript
Javascript的表单验证-提交表单
2016/03/18 Javascript
详解JavaScript中Hash Map映射结构的实现
2016/05/21 Javascript
使用Bootstrap框架制作查询页面的界面实例代码
2016/05/27 Javascript
Bootstrap-table使用footerFormatter做统计列功能
2018/09/07 Javascript
JavaScript 高性能数组去重的方法
2018/09/20 Javascript
angular4强制刷新视图的方法
2018/10/09 Javascript
vue eslint简要配置教程详解
2019/07/26 Javascript
微信小程序官方动态自定义底部tabBar的例子
2019/09/04 Javascript
javascript随机变色实例代码
2019/10/15 Javascript
[01:04:14]VP vs TNC 2018国际邀请赛小组赛BO2 第二场 8.17
2018/08/20 DOTA
[01:04:02]DOTA2-DPC中国联赛 正赛 Elephant vs IG BO3 第二场 1月24日
2021/03/11 DOTA
Python内置函数的用法实例教程
2014/09/08 Python
跟老齐学Python之数据类型总结
2014/09/24 Python
Python探索之修改Python搜索路径
2017/10/25 Python
为何人工智能(AI)首选Python?读完这篇文章你就知道了(推荐)
2019/04/06 Python
python爬虫租房信息在地图上显示的方法
2019/05/13 Python
Python 实现Numpy中找出array中最大值所对应的行和列
2019/11/26 Python
美国最大的香水连锁店官网:Perfumania
2016/08/15 全球购物
护理专业毕业生自荐信
2014/06/15 职场文书
初中英语教师个人工作总结2015
2015/07/21 职场文书
nginx之queue的具体使用
2022/06/28 Servers