Vue 实现穿梭框功能的详细代码
作者:sanyekui 发布时间:2024-05-09 10:51:53
标签:Vue,穿梭框
Vue - 实现穿梭框功能,效果图如下所示:
css
.transfer{
display: flex;
justify-content: center;
align-items: center;
}
.transfer>.list {
width: 200px;
height: 300px;
border: 1px solid #000;
list-style: none;
}
.content{
font-size: 30px;
margin: 0 20px;
}
.list>li{
padding: 5px;
box-sizing: border-box;
}
HTML
<div class="transfer" >
<!-- 左框 -->
<ul class="list left">
<template v-for="(item, index) in info">
<li :key="index">
<input type="checkbox" :id=`checkbox${item.id}` name="checkbox" :checked="item.select" @click="item.select=!item.select" />
<label :for=`checkbox${item.id}` >{{ item.name }} </label>
</li>
</template>
</ul>
<!-- 添加/删除 -->
<div class="content">
<p class="push" @click='push' >>>></p>
<p class="del" @click='del' ><<<</p>
</div>
<!-- 右框 -->
<ul class="list right">
<template v-for="(item, index) in new_info">
<li :key="index" >
<input type="checkbox" :id=`newcheckbox${item.id}` name="newcheckbox" :checked="item.select" @click="item.select=!item.select" />
<label :for=`newcheckbox${item.id}`>{{ item.name }} </label>
</li>
</template>
</ul>
</div>
js
data(){
return{
// 原数据,左框数据
info:[
{id:'1',name:'小明'},
{id:'2',name:'小红'},
{id:'3',name:'小鸡'},
{id:'4',name:'哈哈哈哈'},
{id:'5',name:'啊啊啊啊'},
{id:'6',name:'dddd'},
{id:'7',name:'qwert'},
],
new_info: [],// 新数据,右框数据
}
},
methods:{// 添加数据
push(){
let that = this;
let info = JSON.parse(JSON.stringify(that.info)); // 拷贝原数据, 深拷贝
info.forEach((item, index )=>{
// 执行 select 为true 的数据
if (item.select){
that.new_info = that.new_info.concat(item).sort((a,b)=>{ return a.id - b.id }); // 添加到新数据框, 排序
delete info[index]; // 删除数据
item.select = false;
}
})
info = info.filter(function (val) { return val }); // 过滤 undefined
that.info = info; // 更新原数据\
},
// 移除数据
del(){
let that = this;
let info = JSON.parse(JSON.stringify(that.new_info)); // 拷贝原数据, 深拷贝
info.forEach((item, index )=>{
// 执行 select 为true 的数据
if (item.select){
that.info = that.info.concat(item).sort((a,b)=>{ return a.id - b.id }); // 添加到新数据框, 排序
delete info[index]; // 删除数据
item.select = false;
}
})
info = info.filter(function (val) { return val }); // 过滤 undefined
that.new_info = info; // 更新原数据
},
},
mounted(){
let that = this;
// 给原始数据添加一个 select 字段,判断是否选中
that.info.map((val,key)=>{ that.$set(val,'select',false) });
}
********************************************************************************************************************************************************
这里使用splice删除数据会有问题 this.info.splice(index,1);当选中多个元素时,会发现只删除掉其中一些元素,而还有一些选中的元素还存在因为当删除掉了一个元素后,数组的索引发生的变化,造成了程序的异常。所以就使用了 delete清除数据,然后再 filter过滤 undefined大概思路: 给数据添加一个 select 字段,用多选框的 checked 绑定, click 的时候该字段实现取反转移数据时,只执行 select 为 true 的数据,添加到新数据框中,再把原先的删除
来源:https://www.cnblogs.com/sanyekui/p/13293493.html


猜你喜欢
- 事务概念一个事务可以理解为一组操作,这一组操作要么全部执行,要么全部不执行。特性Read UncommitRead CommitRepeta
- 1. MySQL索引概述1.1 索引的概念什么是索引,索引就是排好序的快速查找数据结构。1.2 索引的特点索引的优点1.提高数据检索的效率,
- RSS是 Really Simple Syndication的缩写(对rss2.0而言,是这三个词的缩写,对rss1.0而言则是RDF Si
- 视频教程教学地址:https://www.bilibili.com/video/BV18441117Hd?p=10x01路由from fla
- MySQL 日期时间教程 在本教程中,我将通过示例解释 MySQL DATE 和 TIME 函数。 DA
- 当您使用FILESYSTEMOBJECT(fso)对象获得某个目录下的文件列表的时候,你有没有发现无法控制它们的排序方式,比如按照名字排序,
- 最近实习需要对若干ppt进行格式上的调整,主要就是将标题的位置、对齐方式、字体等统一,人工修改又麻烦又容易错。因此结合网上的pptx包资料,
- 假设某宝为鼓励大家双12买买买,奖励双十一那天订单最多的两位用户:分别是用户1:“剁手皇帝陈哈哈” 和 用户2:“触手怪刘大莉” 一人一万元
- 本文实例为大家分享了python实现贪吃蛇的具体代码,供大家参考,具体内容如下import pygameimport sysimport r
- 由于谷歌浏览器80以后版本采用了新的加密方式,所以记录在这里# -*- coding:utf-8 -*-import osimport js
- 代码如下:<%@LANGUAGE="VBSCRIPT" CODEPAGE="65001&quo
- 你知道(X)HTML中最多余的标签中是什么吗?在我看来就是这个<a>标签,不错,就是每个网站使用最多的超级链接标签<a&g
- package 的导入语法写 Go 代码的时经常用到 import 这个命令用来导入包,参考如下:import( "f
- map()是python的一个内建函数, 他能够通过函数来处理序列,比如,我们相关一个数组[0,1,2,3,4,5]所有的数字都+2 , 当
- 最近我遇到了一个 bug,我试着通过 Rails 在以“utf8”编码的 MariaDB 中保存一个 UTF-8 字符串,然后出现了一个离奇
- 本文实例讲述了Python实现更改图片尺寸大小的方法。分享给大家供大家参考,具体如下:1、PIL包推荐Pillow 。2、源码:#encod
- 最近需要用python打包一个单页面网页demo,于是准备用python包pyinstaller来打包程序。网上搜索了一下,大部分教程都是打
- 依次前移,实现聊友们的发言的更迭:function form1_onsubmit()if document.form1.
- 背景当前很多文章尝试过最优分箱,python上也有cut等方法进行等宽分箱。为了方便日后输出结果以及分箱要求。做一个简单的轮子以供大家日后使
- 本文实例讲述了Python3爬虫爬取百姓网列表并保存为json功能。分享给大家供大家参考,具体如下:python3爬虫之爬取百姓网列表并保存