vue3+typeScript穿梭框的实现示例


Posted in Vue.js onDecember 29, 2020

前言

实现功能:模仿element穿梭框的简单功能
每周分享一个vue3+typeScript的小组件,我只想分享下自己的实现思路,楼主是个菜鸡前端,记录下实现过程,说不定对你有帮助。

效果展示

预览地址

github地址

vue3+typeScript穿梭框的实现示例

开发过程

思路:用两个数组分别记录左右框框里面的值,根据复选框选中状态来实现删除增加即可

html部分

<div class="shuttle">
  <!-- 左边列表 -->
  <div class="shuttle-box">
    <div class="shuttle-box-title">
      <div>列表一</div>
      <div class="index-num">{{itemLeft.length}}</div>
    </div>
    <div class="shuttle-box-list">
      <div class="shuttle-box-item" v-for="(vo,inx) in itemLeft" :key="inx">
        <input type="checkbox" :value="inx" v-model="checkLeft" :disabled="vo.disabled" /> {{vo.label}}
      </div>
    </div>
  </div>
  <!-- 左右操作按钮 -->
  <div class="shuttle-click">
    <span @click="goLeft">←</span>
    <span @click="goRight">→</span>
  </div>
  <!-- 右边列表 -->
  <div class="shuttle-box">
    <div class="shuttle-box-title">
      <div>列表二</div>
      <div class="index-num">{{itemRight.length}}</div>
    </div>
    <div class="shuttle-box-list">
      <div class="shuttle-box-item" v-for="(vo,inx) in itemRight" :key="inx">
        <input type="checkbox" :value="inx" v-model="checkRight" :disabled="vo.disabled" /> {{vo.label}}
      </div>
    </div>
  </div>
</div>

ts部分

<script lang="ts">
import {
  defineComponent,
  reactive,
  toRefs
} from 'vue'

export default defineComponent({
  setup() {

    const data = reactive({
      itemLeft: [{
        label: '列表1的第一条数据',
        disabled: true,
      }, {
        label: '列表1的第二条数据',
        disabled: false,
      }],
      itemRight: [{
        label: '列表2的第一条数据',
        disabled: false,
      }, {
        label: '列表2的第二条数据',
        disabled: false,
      }],
      checkLeft: [],
      checkRight: [],
      goLeft: () => {
        //数组排序
        data.checkRight.sort(data.sortIndex);
        data.checkRight.forEach((item) => {
          //将itemRight对应索引的数据移动到左边去
          data.itemLeft.push(data.itemRight[item]);
          //移除
          data.itemRight.splice(item, 1);
        });
        //清空
        data.checkLeft = [];
        data.checkRight = [];
      },
      goRight: () => {
        //数组排序
        data.checkLeft.sort(data.sortIndex);
        data.checkLeft.forEach((item) => {
          //将itemLeft对应索引的数据移动到右边去
          data.itemRight.push(data.itemLeft[item]);
          //移除
          data.itemLeft.splice(item, 1);
        });
        //清空
        data.checkLeft = [];
        data.checkRight = [];
      },
      //checkbox是绑定的是的数组的索引,所以checkbox的点击的顺序不同的话索引的顺序是不同的,这样删除有可能找不到会报错,排个序从大到小删除就可以
      //这个是排序参数
      sortIndex: (a, b) => {
        return b - a;
      }
    })
    return {
      ...toRefs(data),
    }
  }
})
</script>

css部分

.shuttle {
  width: 800px;
  padding: 50px 0;
  display: flex;
  justify-content: space-between;
  //整个穿梭框
  .shuttle-box {
    width: 300px;
    height: 500px;
    border: 1px solid #ddd;
    //标题
    .shuttle-box-title {
      background: #f5f7fa;
      padding: 0 20px;
      height: 40px;
      line-height: 40px;
      display: flex;
      justify-content: space-between;
      .index-num {
        color: #909399;
        font-size: 12px;
        font-weight: 400;
      }
    }
    //列表
    .shuttle-box-list {
      padding: 20px;
      //一个列表item
      .shuttle-box-item {
        line-height: 2.0;
      }
    }
  }
  //左右穿梭按钮
  .shuttle-click {
    padding-top: 60px;
    cursor: pointer;
    span {
      padding: 5px 10px;
      display: inline-block;
      background: #409eff;
      color: #ffffff;
      margin: 0 5px;
      text-align: center;
    }
  }
}

到此这篇关于vue3+typeScript穿梭框的实现示例的文章就介绍到这了,更多相关vue3+typeScript穿梭框内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Vue.js 相关文章推荐
vue element实现表格合并行数据
Nov 30 Vue.js
vue3.0中友好使用antdv示例详解
Jan 05 Vue.js
vue仿携程轮播图效果(滑动轮播,下方高度自适应)
Feb 11 Vue.js
vue项目两种方式实现竖向表格的思路分析
Apr 28 Vue.js
vue引入Excel表格插件的方法
Apr 28 Vue.js
Vue实现导入Excel功能步骤详解
Jul 03 Vue.js
详解Vue slot插槽
Nov 20 Vue.js
Vue实现跑马灯样式文字横向滚动
Nov 23 Vue.js
vue+iview实现手机号分段输入框
Mar 25 Vue.js
vue中this.$http.post()跨域和请求参数丢失的解决
Apr 08 Vue.js
解决vue中provide inject的响应式监听
Apr 19 Vue.js
Vue router配置与使用分析讲解
Dec 24 Vue.js
Vue.extend 登录注册模态框的实现
Dec 29 #Vue.js
vue实现简易的双向数据绑定
Dec 29 #Vue.js
vue中配置scss全局变量的步骤
Dec 28 #Vue.js
为什么推荐使用JSX开发Vue3
Dec 28 #Vue.js
Vue仿百度搜索功能
Dec 28 #Vue.js
vue中watch的用法汇总
Dec 28 #Vue.js
浅析vue中的nextTick
Dec 28 #Vue.js
You might like
逆序二维数组插入一元素的php代码
2012/06/08 PHP
教你如何解密 “ PHP 神盾解密工具 ”
2014/06/20 PHP
PHP设计模式之 策略模式Strategy详解【对象行为型】
2020/05/01 PHP
用JavaScript实现UrlEncode和UrlDecode的脚本代码
2008/07/23 Javascript
浅谈javascript构造函数与实例化对象
2015/06/22 Javascript
基于html5和nodejs相结合实现websocket即使通讯
2015/11/19 NodeJs
你不知道的高性能JAVASCRIPT
2016/01/18 Javascript
Knockoutjs 学习系列(一)ko初体验
2016/06/07 Javascript
Bootstrap树形菜单插件TreeView.js使用方法详解
2016/11/01 Javascript
实现隔行换色效果的两种方式【实用】
2016/11/27 Javascript
利用Chrome DevTools直接调试Node.js和JavaScript的方法详解(并行)
2017/02/16 Javascript
详解在Vue中如何使用axios跨域访问数据
2017/07/07 Javascript
vue内置指令详解
2018/04/03 Javascript
angularjs http与后台交互的实现示例
2018/12/21 Javascript
vue-router二级导航切换路由及高亮显示的实现方法
2019/07/10 Javascript
微信小程序自定义navigationBar顶部导航栏适配所有机型(附完整案例)
2020/04/26 Javascript
[02:03]永远的信仰DOTA2 中国军团历届国际邀请赛回顾
2016/06/26 DOTA
使用Python编写提取日志中的中文的脚本的方法
2015/04/30 Python
Python实现的中国剩余定理算法示例
2017/08/05 Python
Python入门之三角函数sin()函数实例详解
2017/11/08 Python
Python使用Scrapy保存控制台信息到文本解析
2017/12/27 Python
Python统计时间内的并发数代码实例
2019/12/28 Python
pytorch 使用加载训练好的模型做inference
2020/02/20 Python
Anaconda的安装及其环境变量的配置详解
2020/04/22 Python
用css3制作纸张效果(外翻卷角)
2013/02/01 HTML / CSS
深入剖析HTML5 内联框架iFrame
2016/05/04 HTML / CSS
复古风格的女装和装饰品:ModCloth
2017/12/29 全球购物
Blue Nile中国官网:全球知名的钻石和珠宝网络零售商
2020/03/22 全球购物
日本AOKI官方商城:AOKI西装
2020/06/11 全球购物
学子宴答谢词
2014/01/25 职场文书
三年级音乐教学反思
2014/01/28 职场文书
银行竞聘演讲稿范文
2014/04/23 职场文书
个人遵守党的政治纪律情况对照检查材料
2014/09/26 职场文书
2014年手术室工作总结
2014/11/26 职场文书
优秀教师先进材料
2014/12/16 职场文书
导游词之广东佛山(南风古灶)
2019/09/24 职场文书