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

学校做网站的软件企业画册封面设计

学校做网站的软件,企业画册封面设计,附近哪有学编程的地方,做gif动态图网站为了在多个页面复用表格拖动功能,我们可以将其封装成以下两种形式的公共方法: 方案一:封装为 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/583586.html

相关文章:

  • 帝国网站模板建设视频龙岗区黄阁坑社区
  • rss 网站插件打开百度网页版
  • 网站设计实训心得体会义乌建设网站制作
  • 建网站服务器是什么东西东莞展馆设计公司
  • 互联网公司设计师都设计什么seo推广软件哪个好
  • 濮阳网站建设网站如何把静态图片做成动态视频
  • 怎样建立个人网站山东东成建设咨询有限公司网站
  • 上海网站建设红旗游戏钓鱼网站怎么做
  • asp.net 做g公司网站wordpress主题框架开发
  • 制作网站需要哪些知识wordpress 字段
  • 设计通网站建设做公司网站多少钱
  • 17一起做网站童装赚钱软件app
  • 个人网站可以做推广吗抚州市企业网站建设
  • 义乌网站建设微信开发广东机械加工厂
  • 织梦网站修改首页图片网站后台多附件上传
  • 濮阳手机网站建设福建省建设厅网站
  • 做网站一般用什么系统wordpress制作商城
  • 电子商务网站设计策划书家装网络平台哪家好
  • 怎样提高百度推广排名谷歌seo搜索引擎
  • 怎么做菠菜网站全球ic采购网
  • 梧州网站建设有哪些佛山网站设计外包
  • 企业网站开发培训湖南省建设工程造价管理总站网站
  • 网站建设需要什么资料呼和浩特百度公司
  • 萝岗电子商务网站建设学多久可以做网站 知乎
  • 网站怎么做身份验证电子商务运营推广
  • 网站免费建站 网页不需要备案东莞哪家网站建设专业
  • 企业建网站的案例桂林市国龙外国语学校
  • 网站开发与设计作业网站内链建设和外链的推广
  • 域名备案网站备案怎么关闭网站安全检测
  • 遵义服务好的网站建设公司怎样做货源网站