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

室内设计找工作网站免费网站优化排名

室内设计找工作网站,免费网站优化排名,免费建一级域名网站,temu跨境电商前言: 使用vue2element UI,且完全使用原生的拖拽事件,无需引入外部库。 如果表格数据量较大,或需要更多复杂功能,可以考虑使用 vuedraggable库,提供更多配置选项和拖拽功能。 思路: 1. 通过el-table的ro…

前言:

使用vue2+element UI,且完全使用原生的拖拽事件,无需引入外部库。

如果表格数据量较大,或需要更多复杂功能,可以考虑使用 vuedraggable库,提供更多配置选项和拖拽功能。

思路:

1. 通过el-table的row-class-name设置行的自定义class类名

2. 在 mountedupdated 生命周期钩子中调用this.$nextTick,确保 DOM 元素渲染完成后,使用 document.querySelectorAll 获取所有 .drag-row 元素。

3. 设置dom的 draggable为true,并增加拖拽事件处理函数:

  • ondragstart:记录拖拽开始的索引,并设置拖拽效果。
  • ondragover:在拖拽经过时,阻止默认行为,允许放置。
  • ondrop:在拖拽放下时,交换源位置和目标位置的数据,并更新列表。

在拖拽事件内 通过 修改数据的index的方式实现 行位置的移动

  • handleDragStart 方法

    • 记录当前拖拽行的索引 draggingIndex
    • 使用 event.dataTransfer.setData 方法存储拖拽数据,方便在 ondrop 中使用。
  • handleDrop 方法

    • 获取拖拽的源索引 sourceIndex 和目标索引 targetIndex
    • 通过数组的 splice 方法删除源位置的项目,并插入到目标位置。
    • 更新组件的数据 projects,触发 Vue 的响应式更新,表格会重新渲染显示新的排序。

效果演示:

完整代码:

<template><div class="sort-container"><span class="title">项目排序</span><!-- 通过 row-class-name 为每一行动态添加行的类名 --><el-table:data="projects"row-class-name="drag-row"@row-contextmenu.preventborder><el-table-column prop="index" label="序号" width="200"><template slot-scope="scope">{{ scope.$index + 1 }}</template></el-table-column><el-table-column prop="name" label="项目名称"></el-table-column></el-table></div>
</template><script>
export default {data() {return {projects: [{ id: '1', name: '男子10米气步枪' },{ id: '2', name: '女子50米步枪三姿' },{ id: '3', name: '男子双向飞碟' },{ id: '4', name: '女子25米手枪' },{ id: '5', name: '男子50米步枪卧射' },],draggingIndex: null,// 当前正在拖拽的行索引};},mounted() {// 组件挂载后添加拖拽事件this.addDragEvents();},updated() {// 数据更新后重新添加拖拽事件// 使用 this.$nextTick 获取表格行的 DOM 元素this.$nextTick(() => {this.addDragEvents();});},methods: {// 添加拖拽事件addDragEvents() {// 获取所有带有类名 'drag-row' 的表格行const rows = document.querySelectorAll('.drag-row');// 遍历每一行,添加拖拽事件rows.forEach((row, index) => {row.draggable = true; // 设置行元素为可拖拽// 开始拖拽时的事件处理row.ondragstart = (event) => this.handleDragStart(event, index);// 拖拽经过时的事件处理row.ondragover = (event) => this.handleDragOver(event);// 拖拽放下时的事件处理row.ondrop = (event) => this.handleDrop(event, index);});},// 处理拖拽开始事件handleDragStart(event, index) {this.draggingIndex = index; // 记录当前拖拽行的索引event.dataTransfer.effectAllowed = 'move'; // 设置拖拽效果为移动event.dataTransfer.setData('text/plain', index); // 将索引存储到拖拽数据中},// 处理拖拽经过事件handleDragOver(event) {event.preventDefault(); // 阻止默认事件,允许放置event.dataTransfer.dropEffect = 'move'; // 设置拖拽效果为移动},// 处理拖拽放下事件handleDrop(event, targetIndex) {const sourceIndex = this.draggingIndex; // 获取开始拖拽时记录的索引// 如果源索引和目标索引相同,直接返回if (sourceIndex === targetIndex) return;// 创建项目列表的副本const projects = [...this.projects];// 删除源位置的项目,并存储被拖拽的项目const [movedItem] = projects.splice(sourceIndex, 1);// 在目标位置插入被拖拽的项目projects.splice(targetIndex, 0, movedItem);// 更新项目列表数据this.projects = projects;this.draggingIndex = null; // 重置拖拽索引},},
};
</script><style lang='scss' scoped>
.sort-container{padding: 15px;.title{font-size: 24px;font-weight: bold;}.el-table{margin-top: 20px;}
}
/* 自定义拖拽行样式 */
.drag-row {cursor: move;user-select: none;
}
.drag-row:hover {background-color: #f0f9ff;
}
</style>

http://www.yayakq.cn/news/242764/

相关文章:

  • 网上购物网站建设需求wordpress 主题包
  • 个人备案网站描述苏州网站建设姜超
  • 郑州做网站外包的公司c2c网站制作
  • 仿163源码交易平台宽屏整站源码 网站模板交易平台源码中国作文网官网
  • 盐山做网站价格wordpress引入外部js
  • 外贸互联网推广的抖音搜索优化
  • soho做网站要写品牌吗微信公众号转入公司网站建设
  • 新网站上线 怎么做seo网页设计培训 机构
  • 类似17做网店的网站网站开发软件系统
  • 网站备案的接入商优设网官方网
  • 网站内部数据搜索怎么做网站图片修改
  • 如何建设一免费的网站wordpress 权限修改
  • 手机上网网站建设企业网站需求文档
  • 怎么做网站评论免费晋江网站建设
  • 深圳vi设计公司全力设计班级优化大师官方免费下载
  • 如何自己制作免费网站建设网站是否需要一个主机
  • 龙江做网站ui设计培训班是坑吗
  • 网站搭建步骤无锡做智能网站
  • 网站建设后端技术如何给网站做宣传
  • 男人女人做那事网站网站策划资料方案
  • 宝山顺德网站建设提供秦皇岛网站建设
  • 网站注销主体注销国家企业信用信息公示系统换官网
  • 广东手机网站建设品牌网站平台建设方案
  • 牛商网网站模板深圳龙霸网站建设物三
  • 收录网站有哪些浦东新区专业网站建设
  • 中国银行门户网站石家庄网站优化推广
  • 网站建设类工作描述网站建设新闻发布
  • 长沙网站建设哪家公司好深圳南山住房和建设局网站
  • 昌吉网站建设公司有哪些网站可以做问卷调查
  • 廊坊专业网站制作服务花溪网站建设