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 相关文章推荐
客户端静态页面玩分页
Jun 26 Javascript
jQuery bind事件使用详解
May 05 Javascript
js 时间函数应用加、减、比较、格式转换的示例代码
Aug 23 Javascript
jQuery的attr与prop使用介绍
Oct 10 Javascript
javascript 数字格式化输出的实现代码
Dec 10 Javascript
深入浅析JavaScript中的Function类型
Jul 09 Javascript
JS取数字小数点后两位或n位的简单方法
Oct 24 Javascript
常用的javascript设计模式
Jan 11 Javascript
详解webpack进阶之插件篇
Jul 06 Javascript
js图片无缝滚动插件使用详解
May 26 Javascript
vue递归组件实战之简单树形控件实例代码
Aug 27 Javascript
基于vue+uniapp直播项目实现uni-app仿抖音/陌陌直播室功能
Nov 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
关于使用coreseek并为其做分页的介绍
2013/06/21 PHP
PHP类中的魔术方法(Magic Method)简明总结
2014/07/08 PHP
PHP使用http_build_query()构造URL字符串的方法
2016/04/02 PHP
深入理解PHP中的empty和isset函数
2016/05/26 PHP
PHP7.3.10编译安装教程
2019/10/08 PHP
WordPress JQuery处理沙发头像
2009/06/22 Javascript
淘宝搜索框效果实现分析
2011/03/05 Javascript
javascript游戏开发之《三国志曹操传》零部件开发(一)让静态人物动起来
2013/01/23 Javascript
为什么JS中eval处理JSON数据要加括号
2015/04/13 Javascript
Javascript中的arguments对象
2016/06/20 Javascript
JS 根据子网掩码,网关计算出所有IP地址范围示例
2020/04/23 Javascript
AngularJS实现用户登录状态判断的方法(Model添加拦截过滤器,路由增加限制)
2016/12/12 Javascript
jQuery Validate验证表单时多个name相同的元素只验证第一个的解决方法
2016/12/24 Javascript
js验证手机号、密码、短信验证码代码工具类
2020/06/24 Javascript
解决vue2中使用axios http请求出现的问题
2018/03/05 Javascript
angular异步验证防抖踩坑实录
2019/12/01 Javascript
javascript利用canvas实现鼠标拖拽功能
2020/07/23 Javascript
Vue+Element UI 树形控件整合下拉功能菜单(tree + dropdown +input)
2020/08/28 Javascript
JavaScript实现网页tab栏效果制作
2020/11/20 Javascript
javascript实现倒计时关闭广告
2021/02/09 Javascript
Python实现保证只能运行一个脚本实例
2015/06/24 Python
编写Python脚本抓取网络小说来制作自己的阅读器
2015/08/20 Python
Python Requests安装与简单运用
2016/04/07 Python
Python基于回溯法解决01背包问题实例
2017/12/06 Python
python爬虫获取淘宝天猫商品详细参数
2020/06/23 Python
Django uwsgi Nginx 的生产环境部署详解
2019/02/02 Python
利用Python实现微信找房机器人实例教程
2019/03/10 Python
使用python实现男神女神颜值打分系统(推荐)
2019/10/31 Python
HTML5之SVG 2D入门5—颜色的表示及定义方式
2013/01/30 HTML / CSS
HTML5事件方法全部汇总
2016/05/12 HTML / CSS
HTML5标签大全
2016/11/23 HTML / CSS
教师党员承诺书
2014/03/25 职场文书
英语感谢信范文
2015/01/20 职场文书
华山导游词
2015/02/03 职场文书
手术室护士个人总结
2015/02/13 职场文书
表扬信范文
2019/04/22 职场文书