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 相关文章推荐
基于jquery的一个图片hover的插件
Apr 24 Javascript
Jquery优化效率 提升性能解决方案
Sep 06 Javascript
jquery实现输入框动态增减的实例代码
Jul 14 Javascript
JS交换变量的方法
Jan 21 Javascript
JSON格式的键盘编码对照表
Jan 29 Javascript
js中数组的常用方法小结
Dec 30 Javascript
JS双向链表实现与使用方法示例(增加一个previous属性实现)
Jan 31 Javascript
浅谈vue限制文本框输入数字的正确姿势
Sep 02 Javascript
vue实现多级菜单效果
Oct 19 Javascript
vue使用prop可以渲染但是打印台报错的解决方式
Nov 13 Javascript
微信小程序单选框自定义赋值
May 26 Javascript
在Echarts图中给坐标轴加一个标识线markLine
Jul 20 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控制用户的浏览器--ob*函数的使用说明
2007/03/16 PHP
PHPMailer邮件类利用smtp.163.com发送邮件方法
2008/09/11 PHP
php中global和$GLOBALS[]的分析之一
2012/02/02 PHP
PHP更新购物车数量(表单部分/PHP处理部分)
2013/05/03 PHP
php将字符串随机分割成不同长度数组的方法
2015/06/01 PHP
JavaScript CSS菜单功能 改进版
2008/12/20 Javascript
比较详细的关于javascript 解析json的代码
2009/12/16 Javascript
初识JQuery 实例一(first)
2011/03/16 Javascript
15条JavaScript最佳实践小结
2013/08/09 Javascript
js获取IP地址的方法小结
2014/07/01 Javascript
jQuery中first()方法用法实例
2015/01/06 Javascript
使用jQuery实现返回顶部
2015/01/26 Javascript
javascript中call,apply,bind的用法对比分析
2015/02/12 Javascript
JavaScript跨浏览器获取页面中相同class节点的方法
2015/03/03 Javascript
jQuery AjaxUpload 上传图片代码
2016/02/02 Javascript
js删除局部变量的实现方法
2016/06/25 Javascript
jQuery实现的checkbox级联选择下拉菜单效果示例
2016/12/26 Javascript
React Native 使用Fetch发送网络请求的示例代码
2017/12/02 Javascript
JavaScript递归函数定义与用法实例分析
2019/01/24 Javascript
15分钟学会vue项目改造成SSR(小白教程)
2019/12/17 Javascript
windows系统中python使用rar命令压缩多个文件夹示例
2014/05/06 Python
python基于隐马尔可夫模型实现中文拼音输入
2016/04/01 Python
python爬虫 使用真实浏览器打开网页的两种方法总结
2018/04/21 Python
Python多重继承的方法解析执行顺序实例分析
2018/05/26 Python
150行Python代码实现带界面的数独游戏
2020/04/04 Python
win10安装python3.6的常见问题
2020/07/01 Python
HTML5梦幻之旅——炫丽的流星雨效果实现过程
2013/08/06 HTML / CSS
HTML5中外部浏览器唤起微信分享功能的代码
2020/09/15 HTML / CSS
戴森美国官网:Dyson美国
2016/09/11 全球购物
平面设计求职信
2014/03/10 职场文书
2015年五四青年节演讲稿
2015/03/18 职场文书
慈善募捐倡议书
2015/04/27 职场文书
给朋友的赠语
2015/06/23 职场文书
2016年寒假社会实践活动总结
2015/10/10 职场文书
Redis 操作多个数据库的配置的方法实现
2022/03/23 Redis
css3 文字断裂效果
2022/04/22 HTML / CSS