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 相关文章推荐
javascript下高性能字符串连接StringBuffer类
Aug 16 Javascript
转换字符串为json对象的方法详解
Nov 29 Javascript
js用闭包遍历树状数组的方法
Mar 19 Javascript
js交换排序 冒泡排序算法(Javascript版)
Oct 04 Javascript
JS实现的生成随机数的4个函数分享
Feb 11 Javascript
如何在Angular2中使用jQuery及其插件的方法
Feb 09 Javascript
使用vue框架 Ajax获取数据列表并用BootStrap显示出来
Apr 24 Javascript
Easyui和zTree两种方式分别实现树形下拉框
Aug 04 Javascript
使用vue-router切换页面时实现设置过渡动画
Oct 31 Javascript
在vue项目实现一个ctrl+f的搜索功能
Feb 28 Javascript
JavaScript前端实现压缩图片功能
Mar 06 Javascript
vue项目或网页上实现文字转换成语音播放功能
Jun 09 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
PHP5/ZendEngine2的改进
2006/10/09 PHP
PHP5 的对象赋值机制介绍
2011/08/02 PHP
php/js获取客户端mac地址的实现代码
2013/07/08 PHP
CI框架开发新浪微博登录接口源码完整版
2014/05/28 PHP
对PHP新手的一些建议(PHP学习经验总结)
2014/08/20 PHP
彻底删除thinkphp3.1案例blog标签的方法
2014/12/05 PHP
php调用KyotoTycoon简单实例
2015/04/02 PHP
PHP获取远程图片并保存到本地的方法
2015/05/12 PHP
详解php比较操作符的安全问题
2015/12/03 PHP
基于jQuery的自动完成插件
2011/02/03 Javascript
不同的jQuery API来处理不同的浏览器事件
2012/12/09 Javascript
javascript仿qq界面的折叠菜单实现代码
2012/12/12 Javascript
JavaScript建立一个语法高亮输入框实现思路
2013/02/26 Javascript
jquery ajax中使用jsonp的限制解决方法
2013/11/22 Javascript
JavaScript正则表达式中的ignoreCase属性使用详解
2015/06/16 Javascript
用JavaScript获取页面文档内容的实现代码
2016/06/10 Javascript
微信小程序开发之toast提示插件使用示例
2017/06/08 Javascript
深入理解React中何时使用箭头函数
2017/08/23 Javascript
基于百度地图api清除指定覆盖物(Overlay)的方法
2018/01/26 Javascript
原生JS实现的轮播图功能详解
2018/08/06 Javascript
Vue3+elementui plus创建项目的方法
2020/12/01 Vue.js
[56:57]LGD vs VP 2019DOTA2国际邀请赛淘汰赛 胜者组赛BO3 第一场 8.20.mp4
2019/08/22 DOTA
python 自动提交和抓取网页
2009/07/13 Python
利用arcgis的python读取要素的X,Y方法
2018/12/22 Python
Python面向对象之类的定义与继承用法示例
2019/01/14 Python
在VS2017中用C#调用python脚本的实现
2019/07/31 Python
pandas将多个dataframe以多个sheet的形式保存到一个excel文件中
2019/10/10 Python
在Pytorch中计算卷积方法的区别详解(conv2d的区别)
2020/01/03 Python
几个解决兼容IE6\7\8不支持html5标签的几个方法
2013/01/07 HTML / CSS
印度化妆品购物网站:Nykaa
2018/07/22 全球购物
诺心蛋糕官网:LE CAKE
2018/08/25 全球购物
苹果台湾官网:Apple台湾
2019/01/05 全球购物
小学教师培训方案
2014/06/09 职场文书
2016领导干部廉洁自律心得体会
2016/01/13 职场文书
《一面五星红旗》教学反思
2016/02/23 职场文书
2019年朋友圈经典励志语录50条
2019/07/05 职场文书