在web開發中,表格是常見的展示數據的方式。而表格的列寬通常是由列內容的寬度決定的,這往往無法滿足用戶的需求。有時候,我們需要控制表格的列寬,使得表格展示更加美觀。Vue框架提供了許多自定義組件和指令,可以幫助我們實現自定義拖拽表格列寬。
<table> <thead> <tr> <th v-for="header in headers" :key="header.key" :style="{width: header.width + 'px'}" @mousedown="startDrag($event, header)" @mousemove="dragging($event, header)" @mouseup="endDrag"> {{header.title}} </th> </tr> </thead> <tbody> <tr v-for="item in data" :key="item.id"> <td v-for="header in headers" :key="header.key" :style="{width: header.width + 'px'}"> {{item[header.key]}} </td> </tr> </tbody> </table>
以上是一個示例模板代碼,我們需要在`th`元素上綁定鼠標事件,以實現列寬拖拽的功能。下面是對應的代碼實現。
<script> export default { data() { return { isDragging: false, // 是否處于拖拽狀態 startX: 0, // 鼠標按下時的X坐標 startWidth: 0, // 列的寬度在拖拽時會發生變化,需要記錄初始寬度 headers: [ // 表格頭部數據 {key: 'name', title: '姓名', width: 100}, {key: 'age', title: '年齡', width: 50}, {key: 'gender', title: '性別', width: 80}, ], data: [ // 表格數據 {id: 1, name: '小明', age: 18, gender: '男'}, {id: 2, name: '小紅', age: 16, gender: '女'}, {id: 3, name: '小麗', age: 20, gender: '女'}, ], } }, methods: { startDrag(event, header) { // 鼠標按下事件 this.isDragging = true this.startX = event.clientX this.startWidth = header.width }, dragging(event, header) { // 鼠標移動事件 if (this.isDragging) { const delta = event.clientX - this.startX // 計算鼠標移動距離 header.width = this.startWidth + delta // 計算新的列寬度 } }, endDrag() { // 鼠標松開事件 this.isDragging = false }, }, } </script>
以上代碼實現了列寬拖拽的功能,通過修改`header`對象的寬度屬性,實現了表格列寬的可拖拽調整。用戶可以通過拖拽表格列邊緣來修改列寬,達到更好的展示效果。在實際項目中,我們還可以添加一些其它的功能,比如最小列寬、固定表頭等,使得表格更加實用。
下一篇json批量轉圖片