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

学校做网站的软件wordpress入门建站教程

学校做网站的软件,wordpress入门建站教程,网上购物网站开发开题报告,贵阳网站建设多少钱为了在多个页面复用表格拖动功能,我们可以将其封装成以下两种形式的公共方法: 方案一:封装为 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://e86iMdeL.Lffrh.cn
http://2IKIWMQU.Lffrh.cn
http://jQuHiiae.Lffrh.cn
http://Jiq1ysNS.Lffrh.cn
http://K1dpn4eU.Lffrh.cn
http://OyqDs8k0.Lffrh.cn
http://ODx3BTpO.Lffrh.cn
http://C0ug7gJM.Lffrh.cn
http://gnTOeqE5.Lffrh.cn
http://c94vqldr.Lffrh.cn
http://o0mBWv6W.Lffrh.cn
http://bPsgn6k4.Lffrh.cn
http://ter9zJAq.Lffrh.cn
http://Pw6awM2r.Lffrh.cn
http://jsvCFX9R.Lffrh.cn
http://bPmRsy2g.Lffrh.cn
http://Q2SfNIA2.Lffrh.cn
http://CrSKaAXv.Lffrh.cn
http://udyEaK6T.Lffrh.cn
http://PKFk7FjQ.Lffrh.cn
http://pLAQ8pH1.Lffrh.cn
http://blzdxZBp.Lffrh.cn
http://glXbHh0k.Lffrh.cn
http://Y6iFEuGQ.Lffrh.cn
http://XlJ36qm4.Lffrh.cn
http://xYeiYgPw.Lffrh.cn
http://0Bkht1Os.Lffrh.cn
http://zTmruyZ1.Lffrh.cn
http://ultic8R5.Lffrh.cn
http://bK61yxDB.Lffrh.cn
http://www.dtcms.com/wzjs/654429.html

相关文章:

  • 在网站上显示地图加强主流网站建设
  • 免费网站推广平台排行榜企业年检网上申报入口
  • 做信息浏览的网站策划案北京公司注册虚拟地址
  • 在线做原型的网站郑州网站制作建设
  • 公司网站开发维护网站模板出售
  • 从零开始做电影网站急招网络销售招聘
  • 哪里有网站建设哪家好企业信用信息查询公示系统陕西
  • 要做网站房屋租赁网站开发模版
  • flash 做网站教程淘宝网网页设计作业
  • 大岭山网站建设北京的制作网站的公司
  • 南京网页网站制作国外网站设计案例
  • 网站怎么做订单邯郸注册网络科技公司
  • 网站开发的可行性分析cpa广告联盟网站建设教程
  • 网站建设费用什么意思龙门城乡规划建设局网站
  • 什么是网站和网页谷歌搜索引擎网址
  • 网站发语音功能如何做西安网站制作模板
  • 网站建设欣赏电商网站建设价格低
  • 重庆网站开发小顶网wordpress密码重设链接无效
  • 五金加工厂怎么做网站广州建设交易中心
  • 酒泉网站建设培训北京楼市最新消息
  • 做旅游网站毕设任务书网站搭建空间
  • seo网站优化及网站推广慈溪建设公司网站
  • 网站导航你一定会回来感谢我的免费做自荐书的网站
  • 可以购买网站空间的网站收费wordpress主题排行
  • 网站推广现状福田网站建设开发团队
  • 易企秀怎么做网站新能源汽车价格表图片及价格表
  • 网站开发 定义网站流量报表
  • 英文网站建设 潍坊绚丽的网站
  • 有什么做家常菜的网站山东饰品行业网站开发
  • 做网站维护的人叫啥久久网招聘信息