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 相关文章推荐
基于dom编程中 动态创建与删除元素的使用
Apr 17 Javascript
jquerydom对象的事件隐藏显示和对象数组示例
Dec 10 Javascript
jquery 3D 标签云示例代码
Jun 12 Javascript
javascript实现时间格式输出FormatDate函数
Jan 13 Javascript
jQuery 处理页面的事件详解
Jan 20 Javascript
BOOTSTRAP时间控件显示在模态框下面的bug修复
Feb 05 Javascript
利用纯js + transition动画实现移动端web轮播图详解
Sep 10 Javascript
Vue2.2.0+新特性整理及注意事项
Aug 22 Javascript
浅析js中mvvm模式实现的原理
Oct 06 Javascript
Angular7创建项目、组件、服务以及服务的使用
Feb 19 Javascript
阿望教你用vue写扫雷小游戏
Jan 20 Javascript
jQuery实现评论模块
Aug 19 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
phpMyAdmin 链接表的附加功能尚未激活的问题
2010/08/01 PHP
通过JavaScript或PHP检测Android设备的代码
2011/03/09 PHP
使用PHP备份MySQL和网站发送到邮箱实例代码
2013/11/28 PHP
php动态添加url查询参数的方法
2015/04/14 PHP
关于eval 与new Function 到底该选哪个?
2013/04/17 Javascript
JQuery制作的放大效果的popup对话框(未添加任何jquery plugin)分享
2013/04/28 Javascript
showModalDialog在谷歌浏览器下会返回Null的解决方法
2013/11/27 Javascript
js中for in的用法示例解析
2013/12/25 Javascript
深入理解JavaScript系列(45):代码复用模式(避免篇)详解
2015/03/04 Javascript
详解ECharts使用心得总结
2016/12/06 Javascript
js实现抽奖效果
2017/03/27 Javascript
详解vue项目首页加载速度优化
2017/10/18 Javascript
Express本地测试HTTPS的示例代码
2018/06/06 Javascript
详解VSCode配置启动Vue项目
2019/05/14 Javascript
原生JS实现音乐播放器
2021/01/26 Javascript
如何在JavaScript中使用localStorage详情
2021/02/04 Javascript
[50:01]Ti4 冒泡赛第二天 NEWBEE vs Titan
2014/07/15 DOTA
[42:32]完美世界DOTA2联赛PWL S2 LBZS vs FTD.C 第二场 11.27
2020/12/01 DOTA
python实现划词翻译
2020/04/23 Python
Python和C/C++交互的几种方法总结
2017/05/11 Python
css3+jq创作含苞待放的荷花
2014/02/20 HTML / CSS
10分钟理解CSS3 FlexBox弹性布局
2018/12/20 HTML / CSS
火山动力Java笔试题
2014/06/26 面试题
英文自荐信格式
2013/11/28 职场文书
《花的勇气》教后反思
2014/02/12 职场文书
医院护士见习期自我鉴定
2014/04/10 职场文书
优秀团干部个人事迹
2014/05/29 职场文书
2014年数学教师工作总结
2014/12/03 职场文书
2014酒店客房部工作总结
2014/12/16 职场文书
学生会主席任命书
2015/09/21 职场文书
2016十一国庆节感言
2015/12/09 职场文书
党员公开承诺书(2016最新版)
2016/03/24 职场文书
学生早退检讨书(范文)
2019/08/19 职场文书
创业计划书之淘宝网店
2019/10/08 职场文书
浅谈Redis位图(Bitmap)及Redis二进制中的问题
2021/07/15 Redis
MySQL使用IF语句及用case语句对条件并结果进行判断 
2022/09/23 MySQL