vue手写穿梭框
以下是一个基于Vue的简单手写穿梭框示例:
<template>
<div class="transfer">
<div class="transfer-panel">
<h3>可选项</h3>
<ul>
<li v-for="item in leftList" :key="item.id">
<input type="checkbox" v-model="item.checked" @change="handleChange(item, 'left')" />
{{ item.label }}
</li>
</ul>
</div>
<div class="transfer-operation">
<button @click="moveToLeft">←</button>
<button @click="moveToRight">→</button>
</div>
<div class="transfer-panel">
<h3>已选项</h3>
<ul>
<li v-for="item in rightList" :key="item.id">
<input type="checkbox" v-model="item.checked" @change="handleChange(item, 'right')" />
{{ item.label }}
</li>
</ul>
</div>
</div>
</template>
<script>
export default {
data() {
return {
leftList: [
{ id: 1, label: '选项1', checked: false },
{ id: 2, label: '选项2', checked: false },
{ id: 3, label: '选项3', checked: false },
{ id: 4, label: '选项4', checked: false },
{ id: 5, label: '选项5', checked: false },
],
rightList: [],
};
},
methods: {
// 移动选项到左侧
moveToLeft() {
const selected = this.rightList.filter((item) => item.checked);
this.leftList = [...this.leftList, ...selected];
this.rightList = this.rightList.filter((item) => !item.checked);
},
// 移动选项到右侧
moveToRight() {
const selected = this.leftList.filter((item) => item.checked);
this.rightList = [...this.rightList, ...selected];
this.leftList = this.leftList.filter((item) => !item.checked);
},
// 处理选项状态改变
handleChange(item, panel) {
const list = panel === 'left' ? this.leftList : this.rightList;
const index = list.findIndex((i) => i.id === item.id);
if (index > -1) {
list[index].checked = item.checked;
}
},
},
};
</script>
<style scoped>
.transfer {
display: flex;
align-items: center;
}
.transfer-panel {
width: 200px;
border: 1px solid #ccc;
padding: 10px;
}
.transfer-operation {
margin: 0 20px;
}
.transfer-operation button {
display: block;
margin-bottom: 10px;
}
</style>
这个示例中,我们使用了Vue的模板语法来渲染界面,并在组件的data选项中定义了左侧和右侧两个选项列表的数据。moveToLeft和moveToRight方法分别用于将选中的选项移动到左侧和右侧列表中,handleChange方法用于处理选项状态改变的事件。最后,我们使用了一些CSS样式来美化界面。
原文地址: https://www.cveoy.top/t/topic/4jQ 著作权归作者所有。请勿转载和采集!