拖动表格

<html>

<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<title>网页特效|Linkweb.cn/Js|---可以用鼠标拖动的表格</title>
</head>

<body>
<SCRIPT LANGUAGE="JavaScript">
<!--
var currentMoveObj = null;    //当前拖动对象
var relLeft;    //鼠标按下位置相对对象位置
var relTop;
function f_mdown(obj)
{
    currentMoveObj = obj;        //当对象被按下时,记录该对象
    currentMoveObj.style.position = "absolute";
    relLeft = event.x - currentMoveObj.style.pixelLeft;
    relTop = event.y - currentMoveObj.style.pixelTop;
}
window.document.onmouseup = function()
{
    currentMoveObj = null;    //当鼠标释放时同时释放拖动对象
}
function f_move(obj)
{
    if(currentMoveObj != null)
    {
        currentMoveObj.style.pixelLeft=event.x-relLeft;
        currentMoveObj.style.pixelTop=event.y-relTop;
    }
}

//-->
</SCRIPT>
<BODY>
<TABLE width="100" border=1 onselectstart="return false" style="position:absolute;left:50;top:50" onmousedown="f_mdown(this)" onmousemove="f_move(this)">
<TR>
    <TD bgcolor="#CCCCCC" align="center" style="cursor:move">title1</TD>
</TR>
<TR>
    <TD align="center" height="60">content</TD>
</TR>
</TABLE>
<TABLE width="100" border=1 onselectstart="return false" style="position:absolute;left:350;top:250" onmousedown="f_mdown(this)" onmousemove="f_move(this)">
<TR>
    <TD bgcolor="#CCCCCC" align="center" style="cursor:move">title2</TD>
</TR>
<TR>
    <TD align="center" height="60">content</TD>
</TR>
</TABLE>
</body>

</html>
 

### ElementUI 中实现拖拽表格功能 #### 引入必要的依赖项 为了在 Vue 3 的环境中使用 `element-plus` 并结合 `SortableJS` 来实现表格的拖拽排序,在项目的主入口文件(通常是 `main.js` 或者 `app.js`)中需要引入 `element-plus` 及其样式,并注册全局组件。 ```javascript import { createApp } from 'vue'; import App from './App.vue'; import ElementPlus from 'element-plus'; import 'element-plus/dist/index.css'; const app = createApp(App); app.use(ElementPlus); app.mount('#app'); ``` 对于 `SortableJS`,可以在相应的 `.vue` 文件内局部引入: ```javascript import Sortable from 'sortablejs'; ``` #### 创建带有拖拽功能的表格组件 下面是一个简单的例子展示如何创建一个支持行拖拽的表格。此示例假设已经安装并配置好了上述提到的所有包。 ```html <template> <div id="dragTable"> <el-table :data="tableData" style="width: 100%" @row-drag-end="onRowDragEnd"> <!-- 定义表头 --> <el-table-column prop="date" label="日期"></el-table-column> <el-table-column prop="name" label="姓名"></el-table-column> <el-table-column prop="address" label="地址"></el-table-column> </el-table> </div> </template> <script setup> import { ref, onMounted } from 'vue'; import Sortable from 'sortablejs'; // 初始化表格数据 let tableData = ref([ { date: '2016-05-03', name: 'Tom', address: 'No. 189, Grove St, Los Angeles' }, // 更多的数据... ]); function onRowDragEnd(event) { const newIndex = event.newIndex; const oldIndex = event.oldIndex; console.log(`Item moved from index ${oldIndex} to ${newIndex}`); } onMounted(() => { nextTick().then(() => { new Sortable(document.getElementById('dragTable').querySelector('.el-table__body-wrapper tbody'), { animation: 150, ghostClass: "ghost", chosenClass: "chosen", dragClass: "dragging", handle: '.handle', // 如果有特定的手柄可以指定这里 onUpdate: function (evt) { let targetRow = evt.item.querySelector('.el-table__row'); // 更新视图中的数组顺序以匹配新的 DOM 结构 [...document.querySelectorAll('.el-table__row')].forEach((tr, i) => { tr.dataset.index = i; // 设置每一行的新索引 }); // 这里可以根据实际需求处理逻辑上的重新排列操作 console.log('Updated order:', Array.from(tableData.value).map(item => item.name)); } }); }); }); </script> <style scoped> /* 自定义样式 */ .dragging { opacity: 0.7; } .chosen { background-color: lightblue !important; } .ghost { border-top: 2px solid red; border-bottom: 2px solid red; } .handle { cursor: move; } </style> ``` 这段代码展示了如何通过监听 `@row-drag-end` 事件获取拖动结束后的信息以及利用 `SortableJS` 对象设置回调函数来响应用户的交互行为[^4]。 #### 处理排序结果保存至服务器端 当用户完成拖拽调整后,可以通过发送 HTTP 请求的方式把最新的排序状态同步给后台服务。这通常涉及到向 API 发送 POST/PUT 请求携带更新过的列表作为参数。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值