<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="DragRowDemo.aspx.cs" Inherits="iRightListDemo.拖动列.DragRowDemo" %><!doctype html>
<html><head><title>行拖动 by 司徒正美</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.parentNodedragManager.y = y;if (handler !== tr) {tr.parentNode.insertBefore(handler, (down ? tr.nextSibling : tr));}};}},dragEnd: function () {var handler = dragManager.handlerif (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;}.table th{border: 1px solid groove;border-left: 1px solid groove;height: 20px;background:lightgray;}</style></head><body><h1>行拖动 by 司徒正美</h1><table  id="table" class="table"><thead><tr><th>编号</th><th>顺序</th><th>Js文件名</th></tr></thead><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>

转载于:https://www.cnblogs.com/feige/p/6146534.html

DragRow-GYF相关推荐

  1. 浅谈工作/学习中找bug的思路_0_调试、try-catch以及打印报错信息和百度的方法、No default constructor for entity: com.gyf.bos.mod

    浅谈工作/学习中找bug的思路_0 文章目录 浅谈工作/学习中找bug的思路_0 调试.try-catch-以及打印报错信息和百度的方法 前言 描述 解决思路1 -- 检查移植的代码,细枝末节也不要忽 ...

  2. junit 单元测试 相关问题记录问题: Error:(16, 6) java: 不兼容的类型: com.gyf.test.Test无法转换为java.lang.annotation.Annotati

    1. @ Test 只能用于方法 2. 方法必须为  public 修饰,无返回值,无参数. 3. 4.  测试类的名称不能Test  : 问题: Error:(16, 6) java: 不兼容的类型 ...

  3. 矩阵分析与多元统计II 二次型与二次曲面2 双线性函数

    矩阵分析与多元统计II 二次型与二次曲面2 双线性函数 双线性函数 双线性函数的表示 满秩双线性函数 对称与反对称 对称双线性函数 反对称双线性函数 应用 伪欧氏空间与伪正交变换 辛空间与辛变换 对称 ...

  4. java mvc返回js_Java的学习(39)springboot

    使用Spring boot ,可以轻松的创建独立运行的程序,非常容易构建独立的服务组件,是实现分布式架构.微服务架构利器. Spring boot简化了第三方包的引用,通过提供的starter,简化了 ...

  5. python 流程控制if判断

    简单看下if判断在python的基本用法 # gyf=28    定义变量gyf # if gyf > 20:  判断 gyf 是不是〉20 # print('你真年轻') 简单实现了 if判断 ...

  6. Android之Dialog提示Unable to add window -- token is not valid; is your activity running?

    1.问题 Dialog奔溃提示Unable to add window -- token android.os.BinderProxy@b251dbc is not valid; is your ac ...

  7. 1.10-linux三剑客之sed命令详解及用法

    内容: 1.sed命令介绍 2.语法格式,常用功能 查询  增加  替换 批量修改文件名 第1章 sed是什么 字符流编辑器 Stream Editor 第2章 sed功能与版本 处理出文本文件,日志 ...

  8. app推送以及提示音java,springboot 整合 Jpush 极光推送

    产品简介: JPush 是经过考验的大规模 App 推送平台,每天推送消息数超过 5 亿条. 开发者集成 SDK 后,可以通过调用 API 推送消息.同时,JPush 提供可视化的 web 端控制台发 ...

  9. mysql复制: 一个master对应1个slave

    2019独角兽企业重金招聘Python工程师标准>>> 复制的步骤: 1.在主库上开启二进制日志,把数据更改记录到二进制日志(binary log)中.   mysql会按照事物提交 ...

  10. MUI 地址选择器 - picker使用

    MUI 地址选择器 - picker使用 很多安卓原生的地址选择器中,选择器基本是实时滚动的. 就像腾讯QQ应用的地址选择器一样! 效果截图如下: 代码如下: <!DOCTYPE html> ...

最新文章

  1. 一道关于整型提升/截断的经典练习题
  2. git版本回退命令_Git学习版本回退和管理文件的修改及删除操作
  3. GitHub推出包管理服务,npm与Nuget全支持
  4. 教辅的组成(网络流果题 洛谷P1231)
  5. 网络计算机显示10,win10电脑网络显示一个球怎么回事
  6. java access远程连接_Java程序实现对access数据库的远程访问
  7. 文件上传_文件下载_后端获取登录用户---SpringCloud Alibaba_若依微服务框架改造---工作笔记003
  8. 【Visio】Visio图片在Word中显示不全?如何确定Visio作图大小?
  9. 机器人操作系统ROS是什么?
  10. Linux上查看已安装的CUDA和cuDNN版本号以及如何查看当前pytorch使用的cuda版本
  11. 软件产品的增值税税率该如何选择?
  12. Codeforces--896A--The Artful Expedient
  13. win10升级后CFT加载程序占用CPU高解决办法
  14. 什么是人工智能物联网(AIoT)一文教你快速了解人工智能物联网(AIoT)
  15. ​ICCV 2021丨Oriented R-CNN:面向旋转目标检测的 R-CNN
  16. replace 与 replaceAll
  17. 小白入门NAS—快速搭建私有云教程系列(一)
  18. acca计算机管理会计,acca与管理会计的八大区别在哪
  19. 系统集成项目管理工程师10大管理47个过程域输入输出工具(项目质量管理)
  20. 图像分割——线检测——拉普拉斯标定(Matlab)

热门文章

  1. 空心字母金字塔 (10 分)
  2. STM32 - 独立看门狗IWDG - 使用注意事项+代码
  3. 量化投资分析-Tushare数据获取
  4. truncate后恢复包---FY_Recover_Data.pck 包的内容
  5. Oracle一张表写多个触发器,详解oracle中通过触发器记录每个语句影响总行数
  6. 高数:1.1函数需要掌握的基本知识点(奇偶性、周期性、求反函数,复合函数分解为简单函数)、(易错点:判断函数是否相同)
  7. 也谈般若波罗密多心经与计算机世界
  8. NOTE_北大Tensorflow_Chapter5
  9. 171204之条件查询总结
  10. Leetcode447(力扣447):回旋镖的数量