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 相关文章推荐
JavaScript延迟加载
Mar 09 Javascript
基于jQuery的日期选择控件
Oct 27 Javascript
jquery 操作单选框,复选框,下拉列表实现代码
Oct 27 Javascript
javascript 设计模式之单体模式 面向对象学习基础
Apr 18 Javascript
Function.prototype.bind用法示例
Sep 16 Javascript
兼容FF和IE的动态table示例自写
Oct 21 Javascript
利用JS解决ie6不支持max-width,max-height问题的方法
Jan 02 Javascript
js+jquery实现图片裁剪功能
Jan 02 Javascript
js实现Select列表内容自动滚动效果代码
Aug 20 Javascript
Vuerouter的beforeEach与afterEach钩子函数的区别
Dec 26 Javascript
js常见遍历操作小结
Jun 06 Javascript
jQuery事件模型默认行为执行顺序及trigger()与 triggerHandler()比较实例分析
Apr 30 jQuery
原生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下利用curl判断远程文件是否存在的实现代码
2011/10/08 PHP
php Hex RGB颜色值互换的使用
2013/05/10 PHP
php页面缓存方法小结
2015/01/10 PHP
JS解析XML文件和XML字符串详解
2015/04/17 Javascript
JS中字符串trim()使用示例
2015/05/26 Javascript
基于PHP和Mysql相结合使用jqGrid读取数据并显示
2015/12/02 Javascript
详解JavaScript数组和字符串中去除重复值的方法
2016/03/07 Javascript
Jquery修改image的src属性,图片不加载问题的解决方法
2016/05/17 Javascript
JS封装的自动创建表格的实现代码
2016/06/15 Javascript
JS原型链怎么理解
2016/06/27 Javascript
Angularjs的Controller间通信机制实例分析
2016/11/07 Javascript
使用nodejs爬取前程无忧前端技能排行
2017/05/06 NodeJs
基于JavaScript实现图片连播和联级菜单实例代码
2017/07/28 Javascript
JS返回顶部实例代码
2020/08/09 Javascript
element-ui中的select下拉列表设置默认值方法
2018/08/24 Javascript
使用ng-packagr打包Angular的方法示例
2018/09/21 Javascript
element-ui中Table表格省市区合并单元格的方法实现
2019/08/07 Javascript
Python多进程池 multiprocessing Pool用法示例
2018/09/07 Python
python-pyinstaller、打包后获取路径的实例
2019/06/10 Python
PyQt5 对图片进行缩放的实例
2019/06/18 Python
python单向循环链表原理与实现方法示例
2019/12/03 Python
Eclipse配置python默认头过程图解
2020/04/26 Python
HTML5新特性之用SVG绘制微信logo
2016/02/03 HTML / CSS
Kathmandu英国网站:新西兰户外运动品牌
2017/03/27 全球购物
JAVA高级程序员面试题
2013/09/06 面试题
教育实习生的自我评价分享
2013/11/21 职场文书
优秀员工年终发言演讲稿
2014/01/01 职场文书
保密承诺书
2014/03/27 职场文书
雷人标语集锦
2014/06/19 职场文书
2014年物业公司工作总结
2014/11/22 职场文书
2014普法依法治理工作总结
2014/12/18 职场文书
中国现代文学之经典散文三篇
2019/09/18 职场文书
Matplotlib绘制混淆矩阵的实现
2021/05/27 Python
Python中 range | np.arange | np.linspace三者的区别
2022/03/22 Python
小程序实现侧滑删除功能
2022/06/25 Javascript
Win10玩csgo闪退如何解决?Win10玩csgo闪退的解决方法
2022/07/23 数码科技