以下是一个基于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选项中定义了左侧和右侧两个选项列表的数据。moveToLeftmoveToRight方法分别用于将选中的选项移动到左侧和右侧列表中,handleChange方法用于处理选项状态改变的事件。最后,我们使用了一些CSS样式来美化界面。

vue手写穿梭框

原文地址: https://www.cveoy.top/t/topic/4jQ 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录