当前位置: 首页 > wzjs >正文

容桂做pc端网站优化设计数学

容桂做pc端网站,优化设计数学,wordpress模板原创,wordpress tag文件为了在多个页面复用表格拖动功能,我们可以将其封装成以下两种形式的公共方法: 方案一:封装为 Vue 指令(推荐) 1. 创建指令文件 src/directives/tableDrag.js import interact from interactjs;export default {inse…

为了在多个页面复用表格拖动功能,我们可以将其封装成以下两种形式的公共方法:

方案一:封装为 Vue 指令(推荐)

1. 创建指令文件 src/directives/tableDrag.js

import interact from 'interactjs';export default {inserted(el, binding) {const tableBody = el.querySelector('.el-table__body-wrapper');if (!tableBody) return;// 设置初始样式tableBody.style.cursor = 'grab';tableBody.style.userSelect = 'none';// 初始化交互interact(tableBody).draggable({modifiers: [interact.modifiers.restrictRect({restriction: 'parent'})],listeners: {start: () => {tableBody.style.cursor = 'grabbing';},move: (event) => {tableBody.scrollLeft -= event.dx * (binding.value?.damping || 1);},end: () => {tableBody.style.cursor = 'grab';}},inertia: binding.value?.inertia || true,autoScroll: binding.value?.autoScroll || true});},unbind(el) {const tableBody = el.querySelector('.el-table__body-wrapper');if (tableBody) {interact(tableBody).unset();}}
};

2. 全局注册指令 src/main.js

import tableDrag from '@/directives/tableDrag';Vue.directive('table-drag', tableDrag);

3. 在组件中使用

<template><el-tablev-table-drag="{ damping: 0.8, inertia: true }":data="tableData"style="width: max-content"border><!-- 表格列 --></el-table>
</template>

方案二:封装为混合 (Mixin)

1. 创建混入文件 src/mixins/tableDrag.js

import interact from 'interactjs';export default {methods: {initTableDrag(tableRef, options = {}) {const tableEl = this.$refs[tableRef]?.$el;if (!tableEl) return;const tableBody = tableEl.querySelector('.el-table__body-wrapper');if (!tableBody) return;// 设置样式tableBody.style.cursor = 'grab';tableBody.style.userSelect = 'none';// 初始化交互this.tableDragInteract = interact(tableBody).draggable({modifiers: [interact.modifiers.restrictRect({restriction: 'parent'})],listeners: {start: () => {tableBody.style.cursor = 'grabbing';},move: (event) => {tableBody.scrollLeft -= event.dx * (options.damping || 1);},end: () => {tableBody.style.cursor = 'grab';}},inertia: options.inertia !== false,autoScroll: options.autoScroll !== false});},destroyTableDrag(tableRef) {const tableEl = this.$refs[tableRef]?.$el;if (!tableEl) return;const tableBody = tableEl.querySelector('.el-table__body-wrapper');if (tableBody && this.tableDragInteract) {this.tableDragInteract.unset();}}},beforeDestroy() {if (this.tableDragInteract) {this.tableDragInteract.unset();}}
};

2. 在组件中使用

<template><el-tableref="myTable":data="tableData"style="width: max-content"border><!-- 表格列 --></el-table>
</template><script>
import tableDragMixin from '@/mixins/tableDrag';export default {mixins: [tableDragMixin],mounted() {this.initTableDrag('myTable', {damping: 0.7,inertia: true});}
};
</script>

方案三:封装为高阶组件

1. 创建高阶组件 src/components/DraggableTable.vue

<template><div class="table-container"><el-tableref="table"v-bind="$attrs"v-on="$listeners"style="width: max-content"><slot></slot></el-table></div>
</template><script>
import interact from 'interactjs';export default {name: 'DraggableTable',props: {damping: {type: Number,default: 1},inertia: {type: Boolean,default: true}},mounted() {this.initDrag();},beforeDestroy() {this.destroyDrag();},methods: {initDrag() {const tableBody = this.$refs.table?.$el.querySelector('.el-table__body-wrapper');if (!tableBody) return;tableBody.style.cursor = 'grab';tableBody.style.userSelect = 'none';this.interactInstance = interact(tableBody).draggable({modifiers: [interact.modifiers.restrictRect({restriction: 'parent'})],listeners: {start: () => {tableBody.style.cursor = 'grabbing';},move: (event) => {tableBody.scrollLeft -= event.dx * this.damping;},end: () => {tableBody.style.cursor = 'grab';}},inertia: this.inertia});},destroyDrag() {if (this.interactInstance) {this.interactInstance.unset();}}}
};
</script><style scoped>
.table-container {width: 100%;overflow: hidden;
}
</style>

2. 在组件中使用

<template><draggable-table:data="tableData":damping="0.8"border><el-table-column prop="date" label="日期" width="180"></el-table-column><!-- 其他列 --></draggable-table>
</template><script>
import DraggableTable from '@/components/DraggableTable';export default {components: {DraggableTable},data() {return {tableData: []}}
};
</script>

对比三种方案

方案优点缺点适用场景
Vue 指令使用简单,全局可用配置选项较少简单拖动需求
Mixin灵活性高,可配置性强需要在组件中调用方法需要不同配置的多表格场景
高阶组件封装彻底,使用最简洁需要修改现有表格组件结构新项目或可接受组件替换的场景

推荐按项目需求选择合适的方案,对于大多数项目,Vue 指令方案是最简单实用的选择。

http://www.dtcms.com/wzjs/63591.html

相关文章:

  • 青岛博彩做网站多少钱企业网络
  • 做网站用备案吗极速建站网站模板
  • 栾川网站建设各种网站
  • 做网站的人山东服务好的seo
  • 网站建设计什么费用郑州专业seo推荐
  • 监控安防的网站怎么做长春网站公司哪家好
  • 做公众号的网站模板下载吗企业如何注册自己的网站
  • 招聘网站有哪些谷歌搜索引擎怎么才能用
  • 好好建站产品如何做线上推广
  • 大学网站建设方案游戏如何在网上推广
  • 网站301和302优化问题
  • 让人家做网站需要问什么问题百度推广开户需要多少钱
  • 吉安建设工程项目网站搜索引擎营销的方式
  • 企业网站建设的几种形式域名ip查询查网址
  • 绍兴cms建站系统免费引流微信推广
  • 好的网站你们会感谢我的网络广告代理
  • 温州网站 公司属于免费的网络营销方式
  • 山东能源网站党风廉政建设网站设计费用
  • 网站建设贰金手指下拉壹玖深圳全网营销推广平台
  • 内蒙古网站建设三只松鼠有趣的软文
  • 天津网站建设托管百度收录批量提交入口
  • wordpress当前版本seo百度排名优化
  • 如何做好一个企业网站设计国内最新新闻大事
  • 阳江做网站百度导航官网
  • 网站建设和维护怎么学正规教育培训机构
  • vs怎么建手机网站徐州seo代理计费
  • 三网合一 网站建设英文seo推广
  • 电脑设计培训学校推荐seo关键词排名报价
  • 一站式外贸服务平台快速整站排名seo教程
  • wordpress企业站被黑百度小说排行榜2020前十名