云主机测评网云主机测评网云主机测评网

云主机测评网
www.yunzhuji.net

HTML – HTML拖放可排序表格

HTML拖放可排序表格是一种常见的网页交互效果,它可以让用户通过拖拽表格行来改变它们的顺序,这种效果在很多场景下都非常实用,比如任务管理、商品排序等,本文将详细介绍如何使用HTML和JavaScript实现一个拖放可排序的表格。

(图片来源网络,侵删)

我们需要创建一个HTML表格,并为其添加一些基本的样式,以下是一个简单的HTML表格示例:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF8">
    <meta name="viewport" content="width=devicewidth, initialscale=1.0">
    <title>拖放可排序表格</title>
    <style>
        table {
            width: 100%;
            bordercollapse: collapse;
        }
        th, td {
            padding: 8px;
            textalign: left;
            borderbottom: 1px solid #ddd;
        }
        th {
            backgroundcolor: #f2f2f2;
            cursor: pointer;
        }
    </style>
</head>
<body>
    <table id="sortableTable">
        <thead>
            <tr>
                <th onclick="sortTable(0)">姓名</th>
                <th onclick="sortTable(1)">年龄</th>
                <th onclick="sortTable(2)">城市</th>
            </tr>
        </thead>
        <tbody>
            <tr>
                <td>张三</td>
                <td>25</td>
                <td>北京</td>
            </tr>
            <tr>
                <td>李四</td>
                <td>30</td>
                <td>上海</td>
            </tr>
            <tr>
                <td>王五</td>
                <td>28</td>
                <td>广州</td>
            </tr>
        </tbody>
    </table>
    <script src="sortable.js"></script>
</body>
</html>

接下来,我们需要编写JavaScript代码来实现拖放功能,以下是一个简单的JavaScript实现:

// sortable.js
document.addEventListener('DOMContentLoaded', function () {
    var table = document.getElementById('sortableTable');
    var dragSrcEl = null;
    var dropElem = null;
    var dropRowIndex = null;
    var dropColIndex = null;
    var dragOverElem = null;
    var dragOverRowIndex = null;
    var dragOverColIndex = null;
    var currentSortColumn = null;
    var currentSortOrder = 'asc'; // 默认升序排列
    var sortedRows = []; // 存储排好序的行数据,用于恢复原始顺序
    var originalTableData = []; // 存储原始表格数据,用于恢复原始顺序
    var isDragging = false; // 是否正在拖拽中
    var isSorting = false; // 是否正在排序中
    var sortTimeout = null; // 排序延时器,用于处理点击表头时的排序请求
    var sortInterval = 100; // 排序间隔时间,单位:毫秒
    var sortFunctions = { // 定义排序函数,可以根据需要自定义排序规则
        'asc': function (a, b) { return a b; },
        'desc': function (a, b) { return b a; }
    };
    var sortColumns = ['name', 'age', 'city']; // 定义需要排序的列名,可以根据需要自定义列名列表
    var sortColumnMap = {}; // 列名与索引的映射关系,用于快速查找列索引
    for (var i = 0; i < sortColumns.length; i++) {
        sortColumnMap[sortColumns[i]] = i;
    }
    for (var i = 0; i < table.rows.length; i++) { // 初始化原始表格数据和排好序的行数据数组
        originalTableData[i] = table.rows[i].innerHTML;
        sortedRows[i] = table.rows[i].innerHTML;
    }
    for (var i = 0; i < table.rows.length; i++) { // 为表格的每一行添加拖拽事件监听器和鼠标悬停事件监听器
        table.rows[i].draggable = true;
        table.rows[i].addEventListener('dragstart', function (e) { // 拖拽开始事件处理函数
            dragSrcEl = this;
            dragOverElem = e.target; // 记录拖拽目标元素,用于判断是否在目标元素上释放鼠标左键触发drop事件(即拖拽到目标元素上)
            if (isSorting) { // 如果正在排序中,则取消排序请求,避免拖拽时触发多次排序请求导致页面卡顿的问题(因为排序请求是通过setTimeout延迟执行的)
                clearTimeout(sortTimeout);
                isSorting = false; // 重置排序状态为false,表示当前没有正在进行的排序操作了(因为已经取消了之前的排序请求)
            } else { // 如果当前没有正在进行的排序操作,则将拖拽状态设置为true,表示当前正在拖拽中(即用户正在拖拽表格行)并触发拖拽开始事件(即调用dragStart函数)
打赏
版权声明:主机测评不销售、不代购、不提供任何支持,仅分享信息/测评(有时效性),自行辨别,请遵纪守法文明上网。
文章名称:《HTML &#8211; HTML拖放可排序表格》
文章链接:https://www.yunzhuji.net/jishujiaocheng/45822.html

评论

  • 验证码