Vue实现穿梭框效果


Posted in Javascript onSeptember 30, 2020

用vue实现的穿梭框,实现基本的功能(数据移动、全选、反选、搜索)。

Vue实现穿梭框效果

代码:

<!DOCTYPE html>
<html>
 <head>
 <meta charset="utf-8">
 <title>穿梭框</title>
  <script src="./js/vue.js" type="text/javascript" charset="utf-8"></script>
  <style type="text/css">
   * {
    margin: 0;
    padding: 0;
   }
   
   #transfer {
    width: 388px;
    height: 218px;
    border: gray solid 1px;
    display: flex;
   }
   
   .container {
    margin: 10px;
    width: 150px;
    height: 200px;
   }
   
   #btns {
    width: 50px;
    height: 60px;
    margin: auto;
   }
   
   .to {
    margin: 0 10px 10px 10px;
    width: 30px;
   }
   
   .search {
    width: 140px;
    outline: 0;
    margin: 10px 0;
   }
   
   .content {
    list-style: none;
    margin-bottom: 10px;
   }
  </style>
 </head>
 <body>
  <div id="transfer">
   <container :datas="contents" :type="0"></container>
   <div id="btns">
    <input type="button" value=">" @click="change_type(0)" class="to"/>
    <input type="button" value="<" @click="change_type(1)" class="to"/>
   </div>
   <container :datas="contents" :type="1"></container>
  </div>
  <script type="text/javascript">
   Vue.component('container', {
    props: ['datas', 'type'],
    data() {
     return {
      search_word: ''
     }
    },
    template: `
    <div class="container">
     <div class="top">
      <input type="checkbox" name="all" @click="all" :checked="filter_chosen === filter && filter"/>
      <span v-show="filter_chosen">{{filter_chosen}}/</span>{{filter_search_word}}项
     </div>
     <input type="text" placeholder="搜索" @keyup="change_search_word" class="search"/>
     <ul class="contents">
      <li class="content" v-for="(content, idx) in datas" v-show="content.type === type && has_search_word(content.content)">
       <input type="checkbox" @click="change(idx)" :checked="content.chosen"/>{{content.content}}
      </li>
     </ul>
    </div>`,
    methods: {
     change(idx) {
      this.datas[idx].chosen = !this.datas[idx].chosen;
     },
     all() {
      this.change_chosen(!(this.filter_chosen === this.filter));
     },
     change_chosen(bool) {
      this.datas.map(x => {
       if (x.type === this.type ) {
        x.chosen = bool;
       }
      });
     },
     change_search_word(e) {
      this.search_word = e.target.value;
     },
     has_search_word(content) {
      if (this.search_word) {
       return content.includes(this.search_word);
      }
      return true;
     }
    },
    computed: {
     filter() {
      return this.datas.filter(x => x.type === this.type).length;
     },
     filter_chosen() {
      return this.datas.filter(x => x.type === this.type && x.chosen).length;
     },
     filter_search_word() {
      return this.datas.filter(x => x.type === this.type && this.has_search_word(x.content)).length;
     }
    }
   });
   
   new Vue({
    el: '#transfer',
    data: {
     contents: [
      { content: 'a', type: 0, chosen: false },
      { content: 'b', type: 0, chosen: false },
      { content: 'c', type: 0, chosen: false },
      { content: 'd', type: 0, chosen: false },
     ]
    },
    methods: {
     change_type(type) {
      for (content of this.$data.contents) {
       if (content.chosen && content.type === type) {
        content.chosen = false;
        content.type = Number(!type);
       }
      }
     }
    }
   })
  </script>
 </body>
</html>

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
js判断为空Null与字符串为空简写方法
Feb 24 Javascript
常用的几段javascript代码分享
Mar 25 Javascript
复制网页内容,粘贴之后自动加上网址的实现方法(脚本之家特别整理)
Oct 16 Javascript
JavaScript生成随机数的4种自定义函数分享
Feb 28 Javascript
HTML5+setCutomValidity()函数验证表单实例分享
Apr 24 Javascript
jquery插件jquery.dragscale.js实现拖拽改变元素大小的方法(附demo源码下载)
Feb 25 Javascript
不能不知道的10个angularjs英文学习网站
Mar 23 Javascript
js表单元素checked、radio被选中的几种方法(详解)
Aug 22 Javascript
jQuery图片加载显示loading效果
Nov 04 Javascript
Vue.js双向绑定实现原理详解
Dec 22 Javascript
微信小程序 九宫格实例代码
Jan 21 Javascript
微信小程序实现点击返回顶层的方法
Jul 12 Javascript
原生js实现表格翻页和跳转
Sep 29 #Javascript
vue实现井字棋游戏
Sep 29 #Javascript
js实现移动端图片滑块验证功能
Sep 29 #Javascript
js+cavans实现图片滑块验证
Sep 29 #Javascript
如何利用JS将手机号中间四位变成*号
Sep 29 #Javascript
原生JavaScript实现刮刮乐
Sep 29 #Javascript
原生JavaScript实现拖动校验功能
Sep 29 #Javascript
You might like
php开发工具之vs2005图解
2008/01/12 PHP
PHP字符串处理的10个简单方法
2010/06/30 PHP
PHP实现QQ快速登录的方法
2016/09/28 PHP
MAC下通过改apache配置文件切换php多版本的方法
2017/04/26 PHP
在javascript中实现函数数组的方法
2013/12/25 Javascript
JS cookie中文乱码解决方法
2014/01/28 Javascript
js生成的验证码的实现与技术分析
2014/09/17 Javascript
Javascript进制转换实例分析
2015/05/14 Javascript
浅谈js图片前端预览之filereader和window.URL.createObjectURL
2016/06/30 Javascript
jquery动态遍历Json对象的属性和值的方法
2016/07/27 Javascript
bootstrap-datetimepicker实现只显示到日期的方法
2016/11/25 Javascript
js判断是否是手机页面
2017/03/17 Javascript
深入理解Javascript中的作用域链和闭包
2017/04/25 Javascript
简单的网页广告特效实例
2017/08/19 Javascript
利用js实现前后台传送Json的示例代码
2018/03/29 Javascript
解决vue中修改export default中脚本报一大堆错的问题
2018/08/27 Javascript
cordova+vue+webapp使用html5获取地理位置的方法
2019/07/06 Javascript
python操作 hbase 数据的方法
2016/12/18 Python
python with提前退出遇到的坑与解决方案
2018/01/05 Python
Python实现绘制双柱状图并显示数值功能示例
2018/06/23 Python
浅谈利用numpy对矩阵进行归一化处理的方法
2018/07/11 Python
Python逐行读取文件中内容的简单方法
2019/02/26 Python
用Python配平化学方程式的方法
2019/07/20 Python
Python常用模块logging——日志输出功能(示例代码)
2019/11/20 Python
Python生成个性签名图片获取GUI过程解析
2019/12/16 Python
Python如何使用turtle库绘制图形
2020/02/26 Python
keras实现多GPU或指定GPU的使用介绍
2020/06/17 Python
python闭包与引用以及需要注意的陷阱
2020/09/18 Python
医学生职业规划范文
2014/01/05 职场文书
运动会通讯稿500字
2014/02/20 职场文书
学校志愿者活动总结
2014/06/27 职场文书
2014红色之旅心得体会
2014/10/07 职场文书
Python Parser的用法
2021/05/12 Python
Redis高级数据类型Hyperloglog、Bitmap的使用
2021/05/24 Redis
Vue实现导入Excel功能步骤详解
2021/07/03 Vue.js
如何避免mysql启动时错误及sock文件作用分析
2022/01/22 MySQL