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

个体做外贸的网站互联网营销成功案例

个体做外贸的网站,互联网营销成功案例,网站中点击链接怎么做的,网站用国外的服务器打不开为了在多个页面复用表格拖动功能,我们可以将其封装成以下两种形式的公共方法: 方案一:封装为 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/322400.html

相关文章:

  • 个人的网站建设的目的seo综合排名优化
  • 客厅装修设计广东网络seo推广公司
  • 徐州网站开发价位网站免费推广的方法
  • 网站的尾页要怎么做自媒体平台排名前十
  • 视频网站代理网店营销与推广策划方案
  • 蓬莱做网站价格电脑编程培训学校
  • 宝山北京网站建设免费b站软件下载
  • 上海做网站开发的公司有哪些seo网站有优化培训班吗
  • 做和别人一样的网站济南seo网站排名优化工具
  • 南昌哪里学做网站网络推广专员
  • 开展农业信息网站建设工作总结网络平台推广是干什么
  • 做网站多久学会uc浏览器网页版入口
  • 内蒙古微网站建设网站域名查询
  • 天津做网站哪个公司好网络推广文案策划
  • 成都市建设工程质量协会网站网络seo优化平台
  • 51个人网站怎么做网站广告
  • 做时时彩网站被抓企业官方网站怎么申请
  • 请简述企业网站建设的流程郑州发布最新通告
  • 个人网站模板html全国疫情防控最新数据
  • 如何做微信公众号seo管理是什么
  • b2c购物网站广告主广告商对接平台
  • 廊坊关键词排名推广深圳关键词优化软件
  • 安徽网站建设服务平台跨境电商平台注册开店流程
  • 网页做好怎么变成网站app注册接单平台
  • 网站底部给网站地图做链接网站百度关键词seo排名优化
  • 企业网站建seo网站制作优化
  • 网站建设课程设计报告总结优化师
  • 做网站一定要用cms吗广告
  • 网站开发黄色片小程序开发需要哪些技术
  • 怎么做自己的博客网站小程序制作费用一览表