vue实现穿梭框

页面展示

在这里插入图片描述

html
  <body>
    <div id="my">
      <div class="container-fluid">
        <div class="row">
          <!--左侧-->
          <div class="col-xs-5 col-sm-5">
            <div class="panel panel-success">
              <!--标题-->
              <div class="panel-heading clearfix">
                <span class="pull-right"></span>
              </div>
              <!--内容-->
              <div class="panel-body panel-height">
                <ul class="list-unstyled">
                  <li>
                    <div class="checkbox">
                      <label>
                        <input type="checkbox" />
                      </label>
                    </div>
                  </li>
                </ul>
              </div>
            </div>
          </div>
          <!--中间-->
          <div class="col-xs-2 col-sm-2 text-center">
            <div>
              <button type="button" class="btn btn-primary anniu">>></button>
            </div>
            <br />
            <div>
              <button type="button" class="btn btn-primary anniu"><<</button>
            </div>
          </div>
          <!--右侧-->
          <div class="col-xs-5 col-sm-5">
            <div class="panel panel-info">
              <!--标题-->
              <div class="panel-heading clearfix">
                <span class="pull-right"></span>
              </div>
              <!--内容-->
              <div class="panel-body panel-height">
                <ul class="list-unstyled">
                  <li>
                    <div class="checkbox">
                      <label>
                        <input type="checkbox" />
                      </label>
                    </div>
                  </li>
                </ul>
              </div>
            </div>
          </div>
        </div>
      </div>
    </div>
  </body>
javascript
window.onload = function () {
  new Vue({
    el: "#my",
    data: {
      leftData:[
        {id:1,name:'数据1',check:true},
        {id:2,name:'数据2',check:false},
        {id:3,name:'数据3',check:false},
        {id:4,name:'数据4',check:false},
        {id:5,name:'数据5',check:false},
        {id:6,name:'数据6',check:false},
        {id:7,name:'数据7',check:false},
        {id:8,name:'数据8',check:false},
        {id:9,name:'数据9',check:false},
      ],
      rightData:[]//右侧数据
    },
    computed: {
      num() {
        return function(data,state) {
          return this.commonEvt(data,state).length
        }
      }
    },
    methods: {
      // 把左边的数据添加到右边
      toRight() {
        var arr = this.commonEvt(this.leftData,true);
        if(arr.length) {
          this.rightData = [...this.rightData,...arr]; 
          this.leftData = this.commonEvt(this.leftData,false); // 左边显示的数据
        } else {
          alert("请勾选数据")
        }
      },
      toLeft() {
        var arr = this.commonEvt(this.rightData,true)
        if(arr.length) {
          this.leftData = [...this.leftData,...arr]; // 左边显示添加的数据
          this.rightData = this.commonEvt(this.rightData,false); // 右边显示的数据
        } else {
          alert("请勾选数据")
        }
      },
      //  公共筛选方法
      commonEvt(data,state) {
        return data.filter(item => item.check == state)
      }
    },
    mounted() {

    }
  })
}

您好,下面是一个简单的 Vue 穿梭实现,包含复选、全选和筛选功能: ```html <template> <div> <!-- 左侧内容区域 --> <div class="left"> <div class="search"> <input type="text" v-model="searchText" placeholder="请输入关键字"> <button @click="search">搜索</button> </div> <div class="items"> <label v-for="item in leftData" :key="item.id" :title="item.name"> <input type="checkbox" v-model="item.checked" @change="checkAll"> {{ item.name }} </label> </div> </div> <!-- 右侧选择区域 --> <div class="right"> <div class="selected"> <label v-for="item in selectedData" :key="item.id" :title="item.name"> <input type="checkbox" v-model="item.checked" @change="checkAll"> {{ item.name }} </label> </div> </div> </div> </template> <script> export default { data() { return { leftData: [ { id: 1, name: '选项1', checked: false }, { id: 2, name: '选项2', checked: false }, { id: 3, name: '选项3', checked: false }, { id: 4, name: '选项4', checked: false }, { id: 5, name: '选项5', checked: false }, ], selectedData: [], searchText: '', } }, methods: { // 左侧筛选 search() { const text = this.searchText.trim().toLowerCase() this.leftData.forEach(item => { item.hide = !item.name.toLowerCase().includes(text) }) }, // 全选 checkAll() { const allChecked = this.leftData.every(item => item.checked) this.leftData.forEach(item => { item.checked = allChecked }) }, }, // 计算属性 computed: { // 过滤后的左侧数据 filteredLeftData() { return this.leftData.filter(item => !item.hide) }, }, } </script> <style> .left { display: inline-block; width: 400px; border: 1px solid #ccc; padding: 10px; vertical-align: top; } .right { display: inline-block; width: 200px; border: 1px solid #ccc; padding: 10px; vertical-align: top; } .search { margin-bottom: 10px; } .items { max-height: 200px; overflow-y: auto; } .selected { max-height: 200px; overflow-y: auto; } </style> ``` 在这个实现中,左侧区域会显示一组复选,可以通过搜索进行筛选,也可以通过全选按钮进行全选/全不选操作。选中的复选会被添加到右侧区域中。 需要注意的是,这个实现只是一个简单的示例,如果需要更复杂的功能,可能需要进行进一步的扩展和修改。希望这个实现可以对您有所帮助!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

lxslxskxs

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值