原生JS 表格列拖拽 适用JqGrid

news2024/11/22 16:20:53

js

$(function () {
    var d1 = new dragTable();
    d1.init({
        tabel: '.drag-table'
    });
})


function dragTable() {
    this.disX = 0; // 相对按下的位置移动的距离
    this.outX = 0; // 鼠标按下的点到大盒子边上的距离
    this.lanX = 0; // 拖动到的位置
    this.$createDiv = null;
    this.$createDivBg = null;
    this.clickEv = null;
    this.set = {
        tabel: '.Report'
    }
}

dragTable.prototype.init = function (opt) {
    $.extend(this.set, opt);
    console.log(opt)

    this.$createDiv = $('<div class="createDiv"></div>');
    this.$createDivBg = $('<div class="createDivBg"></div>'); // 防止复制页面的文字;
    this.events();
}
dragTable.prototype.events = function () {
    var $th = $(this.set.tabel).find('th');
    var that = this;
    $(document).on('mousedown', this.set.tabel + ' th', function (e) {
        that.clickEv = this;
        that.mousedown(this, e);
        that.$createDivBg.show();
    });
    $(document).on('mouseup', this.set.tabel + ' th,.createDiv,.createDivBg', function (e) {
        that.mouseup(this, e);
    })
}
dragTable.prototype.mousedown = function (that, e) {
    $('body').append(this.$createDiv, this.$createDivBg);
    this.$createDiv.html($(that).html()).hide();

    this.outX = e.pageX - $(that).offset().left;
    var initX = e.pageX;
    var that = this;
    $(document).on('mousemove', function (ev) {
        that.mousemove(that, initX, ev);
    });
}

dragTable.prototype.mousemove = function (that, initX, ev) {
    this.disX = ev.pageX - initX;
    this.lanX = ev.pageX;
    this.$createDiv.css({top: ev.pageY - 20, left: ev.pageX - 10});
    this.getCurrentTh('move');
    Math.abs(this.disX) > 4 ? this.$createDiv.show() : this.$createDiv.hide();
}

dragTable.prototype.mouseup = function (that, ev) {
    $(document).unbind('mousemove');
    this.resetTable();
}

dragTable.prototype.resetTable = function () {
    this.$createDiv.remove();
    this.$createDivBg.remove();
    this.getCurrentTh('up');
    this.lanX = 0;
    this.disX = 0; // 重置disX
    // this.showBorder('all', {'border-color': '#d8d8d8'});
}

dragTable.prototype.getCurrentTh = function (type) {
    var that = this;
    $(this.set.tabel + ' th').each(function (index, item) {
        var l = $(item).offset().left;
        var r = $(item).offset().left + $(item).width();

        if (that.lanX > l && that.lanX < r) {
            $(".frozen-div").remove();
            $(".frozen-bdiv").remove();
            // that.showBorder(index, {'border-color': '#d8d8d8'});
            if (that.disX > 4) { // 右
                // that.showBorder(index, {'border-right': '2px solid red'});
                type == 'up' ? that.setThTd(index, 'after') : '';
            }
            if (that.disX < -4) { // 左边
                // that.showBorder(index, {'border-left': '2px solid red'});
                type == 'up' ? that.setThTd(index, 'before') : '';
            }
        } else {
            // that.showBorder(index, {'border-color': '#d8d8d8'})
        }
    })
}

dragTable.prototype.setThTd = function (newsindex, type) {
    var oldIndex = $(this.clickEv).index();

    var $th = $(this.set.tabel + ' th').eq(oldIndex);
    $(this.set.tabel + ' th').eq(newsindex)[type]($th.clone());
    $th.remove();
    $(this.set.tabel + ' tbody tr').each(function (index, tdelement) {
        var $td = $(tdelement).find('td').eq(oldIndex);
        $(tdelement).find('td').eq(newsindex)[type]($td.clone());
        $td.remove();
    });
}

dragTable.prototype.showBorder = function (newsindex, css) {
    if (newsindex == 'all') {
        $(this.set.tabel + ' th').css(css);
        $(this.set.tabel + ' td').css(css);
        return;
    }
    $(this.set.tabel + ' th').eq(newsindex).css(css)
    $(this.set.tabel + ' tbody tr').each(function (index, tdelement) {
        $(tdelement).find('td').eq(newsindex).css(css);
    });
}

页面引用js就不用多说了,在class添加
在这里插入图片描述
不是JqGrid可以注释这个
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1153306.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Java面向对象(进阶)特征之二:继承性

文章目录 一、继承的概述&#xff08;1&#xff09;生活中的继承&#xff08;2&#xff09; Java中的继承1、角度一&#xff1a;从上而下2、角度二&#xff1a;从下而上 &#xff08;3&#xff09;继承的好处&#xff08;4&#xff09;总结 二、继承的语法与应用举例&#xff0…

vue3引入并加载unity工程的两种方式

1、使用unity-webgl插件 npm i unity-webglunity打包后的build文件夹是这样的 需要手动删除.unityweb这个后缀&#xff0c;完成后放在vue3项目的根目录下的public文件夹下。 下面是引入unity的vue组件,其中实例化UnityWebgl时的参数地址直接引用上面的对应文件地址 <scri…

Soul CEO张璐团队创新技术与用户共建,推动网络社交空间绿色发展

近年来,随着互联网社交成为青年人交友的主要方式之一,网络黑灰产业也随之蓬勃发展,新型网络犯罪层出不穷,给用户的安全带来了巨大挑战。为了维护用户的社交安全,国家相关部门不断开展着"净网"、"清朗"等专项行动。在这个背景下,Soul App的CEO张璐及其团队积…

一招教你,如何快速搭建属于自己的AI数字人直播系统!

随着AI技术的不断发展&#xff0c;AI数字人直播系统成为了直播行业的新宠。本文将向大家介绍如何在短时间内快速搭建AI数字人直播系统&#xff0c;并寻找合适的服务商进行OEM合作&#xff0c;为用户带来全新的直播体验。 这边有2种方法你可以选择代理加盟可靠的AI数字人直播系统…

【Java 进阶篇】Java BeanUtils 使用详解

Java中的BeanUtils是一组用于操作JavaBean的工具&#xff0c;它允许你在不了解JavaBean的具体内部结构的情况下&#xff0c;访问和修改其属性。本文将详细介绍Java BeanUtils的使用&#xff0c;包括如何获取和设置JavaBean的属性&#xff0c;复制属性&#xff0c;以及如何处理嵌…

VS Code 全局搜索代码变量名时,有些文件中有这个变量但是没有被搜索到的问题

可以打开visual studio code&#xff0c;打开文件->首选项->设置&#xff0c;去掉 Use Ignore Files 这个选项。

FL Studio21.2中文版终身免费更新

FL Studio水果音乐编曲软件中文版,一款强大的音乐制作软件,可以进行音乐编曲、剪辑、录音、混音。FL Studio中文官网提供各个版本编曲软件的正版购买与下载和众多编曲软件教程。 FL Cloud 音效库包含开放版权的Loop和采样&#xff0c;以及来自 FL Studio 著名用户的艺术家独家…

【安装】自建Rustdesk Server

文章目录 RustDesk说明RustDesk优点RustDesk相关链接非Docker基于CentOSRustDesk默认程序占用端口说明 启动 hbbr 是中继服务器启动 hbbs 是ID服务器客户端配置 RustDesk说明 RustDesk优点 自建服务端。搭建在自己的云服务器就相当于独享高速带宽&#xff01;点对点通信。TCP…

程序从编译到运行

一、程序的编译流程&#xff08;以 C 语言为例&#xff09; 编译一个 C 程序从可以分为四个阶段&#xff1a;预处理 --> 编译&#xff08;生成汇编代码&#xff09;--> 汇编 --> 链接。 下面以大家最熟悉的 hello world 程序为例&#xff0c;编译器为 linux 下的 gcc…

C语言实现斐波那契数列的多种方法

斐波那契数列&#xff08;Fibonacci sequence&#xff09;&#xff0c;又称黄金分割数列&#xff0c;因数学家莱昂纳多斐波那契&#xff08;Leonardo Fibonacci&#xff09;以兔子繁殖为例子而引入&#xff0c;故又称为“兔子数列”。对于解决此类问题方法有四&#xff0c;前两…

代码随想录算法训练营第三十九天 | LeetCode 62. 不同路径、63. 不同路径 II

代码随想录算法训练营第三十九天 | LeetCode 62. 不同路径、63. 不同路径 II 文章链接&#xff1a;不同路径 不同路径II 视频链接&#xff1a;不同路径 不同路径II 1. LeetCode 62. 不同路径 1.1 思路 本题是个二维矩阵&#xff0c;因此 dp 数组也定义为二维的&…

select...for update 锁表了?

在MySQL中&#xff0c;事务A中使用select...for update where id1锁住了&#xff0c;某一条数据&#xff0c;事务还没提交&#xff0c;此时&#xff0c;事务B中去用select ... where id1查询那条数据&#xff0c;会阻塞等待吗&#xff1f; select...for update在MySQL中&#…

chatgpt 安卓版本提供google play商店版本太旧更新方法

多击play商店版本&#xff0c;开启开发者模式&#xff0c;再点击更新play商店。会自动下载最新版安装。记得开梯子。

太极培训机构展示服务预约小程序的作用如何

太极是适合男女老幼的&#xff0c;很多地方也有相关的学校或培训机构&#xff0c;由于受众广且不太受地域影响&#xff0c;因此对培训机构来说&#xff0c;除了线下经营外&#xff0c;线上宣传、学员获取和发展也不可少。 接下来让我们看下通过【雨科】平台制作太极教培服务预…

面试算法45:二叉树最低层最左边的值

题目 如何在一棵二叉树中找出它最低层最左边节点的值&#xff1f;假设二叉树中最少有一个节点。例如&#xff0c;在如图7.5所示的二叉树中最低层最左边一个节点的值是5。 分析 可以用一个变量bottomLeft来保存每一层最左边的节点的值。在遍历二叉树时&#xff0c;每当遇到新…

Apollo上车实践:打造安全、高效、舒适的出行体验

上车实践 概述自动驾驶车辆适配线控标准协议开环验证车辆 自动驾驶车辆集成了解传感器布置与连接了解车辆标定了解传感器标定循迹实践 自动驾驶测试与调车了解车辆安全操作流程了解实车控制调试了解实车定位调试 福利活动 主页传送门&#xff1a;&#x1f4c0; 传送 概述 通过…

C++设计模式_18_State 状态模式

State和Memento被归为“状态变化”模式。 文章目录 1. “状态变化”模式1.1 典型模式 2. 动机 (Motivation)3. 代码演示State 状态模式3.1 常规方式3.2 State 状态模式 4. 模式定义5. 结构( Structure )6. 要点总结7. 其他参考 1. “状态变化”模式 在组件构建过程中&#xf…

Apache ActiveMQ (版本 < 5.18.3) (CNVD-2023-69477)RCE修复方案/缓解方案

一、漏洞描述 Apache ActiveMQ 是美国阿帕奇&#xff08;Apache&#xff09;基金会的一套开源的消息中间件&#xff0c;它支持 Java 消息服务、集群、Spring Framework 等。 二、漏洞成因 ActiveMQ 默认开放了 61616 端口用于接收 OpenWire 协议消息&#xff0c;由于针对异常…

sqlite3 关系型数据库语言 SQL 语言

SQL(Structured Query Language)语言是一种结构化查询语言,是一个通用的,功能强大的关系型数据库操作语言. 包含 6 个部分: 1.数据查询语言(DQL:Data Query Language) 从数据库的二维表格中查询数据,保留字 SELECT 是 DQL 中用的最多的语句 2.数据操作语言(DML) 最主要的关…

视频下载工具Downie4 mac中文支持格式

Downie4 mac是一款视频下载工具。它支持下载各种视频网站上的视频&#xff0c;并且具有快速、稳定、易于使用的特点。 Downie支持下载各种视频网站上的视频&#xff0c;包括YouTube、Vimeo、Netflix、Hulu、Amazon等等。它具有快速、稳定的下载速度&#xff0c;可以帮助用户轻松…