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_13_执行模型详解
Oct 20 Javascript
js中将URL中的参数提取出来作为对象的实现代码
Aug 16 Javascript
Javascript实现网络监测的方法
Jul 31 Javascript
谈一谈javascript中继承的多种方式
Feb 19 Javascript
js实现div在页面拖动效果
May 04 Javascript
js与applet相互调用的方法
Jun 22 Javascript
jQuery 特性操作详解及实例代码
Sep 29 Javascript
详解从新建vue项目到引入组件Element的方法
Aug 29 Javascript
纯js代码生成可搜索选择下拉列表的实例
Jan 11 Javascript
开发一个Parcel-vue脚手架工具(详细步骤)
Sep 22 Javascript
Vue引用Swiper4插件无法重写分页器样式的解决方法
Sep 27 Javascript
Node.js 多进程处理CPU密集任务的实现
May 26 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
Linux Apache PHP Oracle 安装配置(具体操作步骤)
2013/06/17 PHP
PHP图片等比例缩放生成缩略图函数分享
2014/06/10 PHP
Zend Framework实现多文件上传功能实例
2016/03/21 PHP
PHP基于openssl实现的非对称加密操作示例
2019/01/11 PHP
js获取和设置属性的方法
2014/02/20 Javascript
table行随鼠标移动变色示例
2014/05/07 Javascript
深入分析jquery解析json数据
2014/12/09 Javascript
Javascript中arguments用法实例分析
2015/06/13 Javascript
JS实现适合于后台使用的动画折叠菜单效果
2015/09/21 Javascript
Javascript的无new构建实例详解
2016/05/15 Javascript
jQuery新窗口打开外链接
2016/07/21 Javascript
jQuery组件easyui对话框实现代码
2016/08/25 Javascript
jQuery实现的模拟弹出窗口功能示例
2016/11/24 Javascript
帝国cms首页列表页实现点赞功能
2017/10/30 Javascript
解决vue-router进行build无法正常显示路由页面的问题
2018/03/06 Javascript
JS实现为动态创建的元素添加事件操作示例
2018/03/17 Javascript
Vue项目pdf(base64)转图片遇到的问题及解决方法
2018/10/19 Javascript
利用Webpack实现小程序多项目管理的方法
2019/02/25 Javascript
浅谈Vue 自动化部署打包上线
2020/06/14 Javascript
[00:23]DOTA2群星共贺开放测试 25日无码时代来袭
2013/09/23 DOTA
[01:19:54]DOTA2上海特级锦标赛主赛事日 - 2 败者组第二轮#1Alliance VS EHOME
2016/03/03 DOTA
总结python实现父类调用两种方法的不同
2017/01/15 Python
Python 数值区间处理_对interval 库的快速入门详解
2018/11/16 Python
tensorflow实现二维平面模拟三维数据教程
2020/02/11 Python
Perfume’s Club法国站:购买香水和化妆品
2019/05/02 全球购物
Stokke美国官方网店:高级儿童家具、推车、汽车座椅和配件
2020/06/06 全球购物
C++是不是类型安全的
2014/02/18 面试题
电力公司个人求职信范文
2014/02/04 职场文书
保密工作实施方案
2014/02/24 职场文书
财务管理专业求职信
2014/06/11 职场文书
2014年前台个人工作总结
2014/11/14 职场文书
详解CSS不定宽溢出文本适配滚动
2021/05/24 HTML / CSS
总结高并发下Nginx性能如何优化
2021/11/01 Servers
Android超详细讲解组件ScrollView的使用
2022/03/31 Java/Android
golang定时器
2022/04/14 Golang
科学家测试在太空中培育人造肉,用于未来太空旅行
2022/04/29 数码科技