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制作的可折叠弹出式菜单示例
Apr 04 Javascript
javascript格式化json显示实例分析
Apr 21 Javascript
javascript实现在网页中运行本地程序的方法
Feb 03 Javascript
从零开始学习Node.js系列教程之SQLite3和MongoDB用法分析
Apr 13 Javascript
使用ionic播放轮询广告的实现方法(必看)
Apr 24 Javascript
详解webpack之scss和postcss-loader的配置
Jan 09 Javascript
javascript填充默认头像方法
Feb 22 Javascript
vue select组件的使用与禁用实现代码
Apr 10 Javascript
vuejs实现标签选项卡动态更改css样式的方法
May 31 Javascript
ES6中let、const的区别及变量的解构赋值操作方法实例分析
Oct 15 Javascript
google广告之另类js调用实现代码
Aug 22 Javascript
vue-cli3项目打包后自动化部署到服务器的方法
Sep 16 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与MySQL交互使用详解
2006/10/09 PHP
BBS(php &amp; mysql)完整版(二)
2006/10/09 PHP
PHP SQLite类
2009/05/07 PHP
Laravel实现表单提交
2017/05/07 PHP
JavaScript 事件系统
2010/07/22 Javascript
客户端 使用XML DOM加载json数据的方法
2010/09/28 Javascript
jquer之ajaxQueue简单实现代码
2011/09/15 Javascript
基于jquery的bankInput银行卡账号格式化
2012/08/22 Javascript
Extjs4 消息框去掉关闭按钮(类似Ext.Msg.alert)
2013/04/02 Javascript
禁止选中文字兼容IE、Chrome、FF等
2013/09/04 Javascript
js如何取消事件冒泡
2013/09/23 Javascript
js动态修改整个页面样式达到换肤效果
2014/05/23 Javascript
JavaScript仿静态分页实现方法
2015/08/04 Javascript
vue 实现类似淘宝星级评分的示例
2018/03/01 Javascript
vue中如何实现后台管理系统的权限控制的方法步骤
2019/09/05 Javascript
浅谈如何优雅处理JavaScript异步错误
2019/11/12 Javascript
vue2路由基本用法实例分析
2020/03/06 Javascript
Python httplib,smtplib使用方法
2008/09/06 Python
python中使用%与.format格式化文本方法解析
2017/12/27 Python
python中如何使用分步式进程计算详解
2019/03/22 Python
python下的opencv画矩形和文字注释的实现方法
2019/07/09 Python
Python 解决相对路径问题:&quot;No such file or directory&quot;
2020/06/05 Python
BONIA官方网站:国际奢侈品牌和皮革专家
2016/11/27 全球购物
公司前台接待岗位职责
2013/12/03 职场文书
学生自我鉴定模板
2013/12/30 职场文书
消防先进事迹材料
2014/02/10 职场文书
高级编程求职信模板
2014/02/16 职场文书
《李广射虎》教学反思
2014/04/27 职场文书
祖国在我心中演讲稿450字
2014/09/05 职场文书
入党积极分子学习党的纲领思想汇报
2014/09/13 职场文书
私用公车造成事故检讨书
2014/11/16 职场文书
2014年志愿者工作总结
2014/11/20 职场文书
优秀团员事迹材料
2014/12/25 职场文书
实习单位意见
2015/06/04 职场文书
仅用一句SQL更新整张表的涨跌幅、涨跌率的解决方案
2021/05/06 MySQL
python语言中pandas字符串分割str.split()函数
2022/08/05 Python