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 相关文章推荐
z-blog SyntaxHighlighter 长代码无法换行解决办法(jquery)
Nov 16 Javascript
node.js中的emitter.emit方法使用说明
Dec 10 Javascript
jQuery中offsetParent()方法用法实例
Jan 19 Javascript
简述jQuery ajax的执行顺序
Jan 05 Javascript
js操作数据库实现注册和登陆的简单实例
May 26 Javascript
JavaScript学习笔记整理_用于模式匹配的String方法
Sep 19 Javascript
AngularJs分页插件使用详解
Jun 30 Javascript
vue form 表单提交后刷新页面的方法
Sep 04 Javascript
JS隐藏号码中间4位代码实例
Apr 09 Javascript
js实现跟随鼠标移动的小球
Aug 26 Javascript
layui 图片上传+表单提交+ Spring MVC的实例
Sep 21 Javascript
JavaScript实现点击自制菜单效果
Feb 02 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
ThinkPHP实现多数据库连接的解决方法
2014/07/01 PHP
PHP动态输出JavaScript代码实例
2015/02/12 PHP
XHProf报告字段含义的解析
2016/05/17 PHP
基于datagrid框架的查询
2013/04/08 Javascript
jQuery添加options点击事件并传值实例代码
2016/05/18 Javascript
AngularJS基础 ng-list 指令详解及示例代码
2016/08/02 Javascript
百度多文件异步上传控件webuploader基本用法解析
2016/11/07 Javascript
基于Vue实现tab栏切换内容不断实时刷新数据功能
2017/04/13 Javascript
JavaScript中常见的八个陷阱总结
2017/06/28 Javascript
VUE前端cookie简单操作
2017/10/17 Javascript
node.js的exports、module.exports与ES6的export、export default深入详解
2017/10/26 Javascript
关于Google发布的JavaScript代码规范你要知道哪些
2018/04/04 Javascript
webpack项目轻松混用css module的方法
2018/06/12 Javascript
微信小程序云开发之使用云数据库
2019/05/17 Javascript
JavaScript修改注册表实例代码
2020/01/05 Javascript
解决vue 给window添加和移除resize事件遇到的坑
2020/07/21 Javascript
Python多线程学习资料
2012/12/19 Python
Python中列表、字典、元组数据结构的简单学习笔记
2016/03/20 Python
浅谈Python类的__getitem__和__setitem__特殊方法
2016/12/25 Python
django orm 通过related_name反向查询的方法
2018/12/15 Python
Python爬虫之UserAgent的使用实例
2019/02/21 Python
python字典一键多值实例代码分享
2019/06/14 Python
win10安装tesserocr配置 Python使用tesserocr识别字母数字验证码
2020/01/16 Python
浅析Python __name__ 是什么
2020/07/07 Python
Numpy中的数组搜索中np.where方法详细介绍
2021/01/08 Python
Lookfantastic瑞典:英国知名美妆购物网站
2018/04/06 全球购物
亚洲在线旅行门户网站:Expedia.com.hk(智游网)
2020/04/14 全球购物
C++:memset ,memcpy和strcpy的根本区别
2013/04/27 面试题
教师求职信范文分享
2013/12/27 职场文书
党支部班子“四风”问题自我剖析材料
2014/09/28 职场文书
2015年秘书个人工作总结
2015/04/25 职场文书
毕业论文答辩开场白
2015/05/27 职场文书
农村结婚典礼主持词
2015/06/29 职场文书
Python基础数据类型tuple元组的概念与用法
2021/08/02 Python
Python GUI编程之tkinter 关于 ttkbootstrap 的使用详解
2022/03/03 Python
Win2008系统搭建DHCP服务器
2022/06/25 Servers