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 While 循环基础教程
Apr 05 Javascript
js获取上传文件大小示例代码
Apr 10 Javascript
JavaScript onkeydown事件入门实例(键盘某个按键被按下)
Oct 17 Javascript
全面了解构造函数继承关键apply call
Jul 26 Javascript
JavaScript 限制文本框不可输入英文单双引号的方法
Dec 20 Javascript
纯javaScript、jQuery实现个性化图片轮播【推荐】
Jan 08 Javascript
Bootstarp 基础教程之表单部分实例代码
Feb 03 Javascript
微信小程序项目总结之点赞 删除列表 分享功能
Jun 25 Javascript
JS中使用react-tooltip插件实现鼠标悬浮显示框
May 15 Javascript
js实现带搜索功能的下拉框
Jan 11 Javascript
让你30分钟快速掌握vue3教程
Oct 26 Javascript
Vue.Draggable实现交换位置
Apr 07 Vue.js
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无刷新上传文件实现代码
2011/09/19 PHP
计算php页面运行时间的函数介绍
2013/07/01 PHP
编写PHP脚本清除WordPress头部冗余代码的方法讲解
2016/03/01 PHP
获取body标签的两种方法
2011/10/13 Javascript
JavaScript中的eval()函数详解
2013/08/22 Javascript
解析img图片没找到onerror事件 Stack overflow at line: 0
2013/12/23 Javascript
jquery select 设置默认选中的示例代码
2014/02/07 Javascript
jQuery ajax调用WCF服务实例
2014/07/16 Javascript
Javascript中的方法链(Method Chaining)介绍
2015/03/15 Javascript
JavaScript sort数组排序方法和自我实现排序方法小结
2016/06/06 Javascript
详解React-Todos入门例子
2016/11/08 Javascript
NPM 安装cordova时警告:npm WARN deprecated minimatch@2.0.10: Please update to minimatch 3.0.2 or higher to
2016/12/20 Javascript
javascript防篡改对象实例详解
2017/04/10 Javascript
jquery实现异步加载图片(懒加载图片一种方式)
2017/04/24 jQuery
通过源码分析Vue的双向数据绑定详解
2017/09/24 Javascript
vue中eslintrc.js配置最详细介绍
2018/12/21 Javascript
[01:52]2014DOTA2西雅图邀请赛 V社开大会你不知道的小秘密
2014/07/08 DOTA
python批量修改文件后缀示例代码分享
2013/12/24 Python
Python 文件处理注意事项总结
2017/04/10 Python
Python基于QRCode实现生成二维码的方法【下载,安装,调用等】
2017/07/11 Python
简述Python2与Python3的不同点
2018/01/21 Python
使用python批量读取word文档并整理关键信息到excel表格的实例
2018/11/07 Python
flask框架单元测试原理与用法实例分析
2019/07/23 Python
python控制台实现tab补全和清屏的例子
2019/08/20 Python
基于pytorch 预训练的词向量用法详解
2020/01/06 Python
Html5 Canvas 实现一个“刮刮乐”游戏
2019/09/05 HTML / CSS
美国顶级品牌男士大码服装店:DXL
2017/08/30 全球购物
德国领先的大尺码和超大尺码男装在线零售商:Bigtex
2019/06/22 全球购物
Laura官网:加拿大女性的顶级时尚目的地
2019/09/20 全球购物
高考备战决心书
2014/03/11 职场文书
《青海高原一株柳》教学反思
2014/04/25 职场文书
统计员岗位职责范本
2015/04/14 职场文书
驾驶员管理制度范本
2015/08/06 职场文书
观看《筑梦中国》纪录片心得体会
2016/01/18 职场文书
《穷人》教学反思
2016/02/19 职场文书
2019交通安全宣传标语集锦!
2019/06/28 职场文书