Vue.js 中制作自定义选择组件的代码附演示demo


Posted in Javascript onFebruary 28, 2020

Vue.js 中制作自定义选择组件的代码附演示demo 

定制 select 标签的设计非常困难。有时候,如果不使用样式化的 div 和自定义 JavaScript 的结合来构建自己的脚本,那是不可能的。在本文中,你将学习如何构建使用完全自定义 CSS 设置样式的 Vue.js 组件。

Vue.js 中制作自定义选择组件的代码附演示demo 

Demo: https://codesandbox.io/s/custom-vuejs-select-component-8nqgd

HTML

<template>
 <div
 class="custom-select"
  :tabindex="tabindex"
  @blur="open = false"
 >
  <div
  class="selected"
  :class="{open: open}"
  @click="open = !open"
 >
  {{ selected }}
 </div>
 <div
  class="items"
  :class="{selectHide: !open}"
 >
  <div
  class="item"
  v-for="(option, i) of options"
  :key="i"
  @click="selected=option; open=false; $emit('input', option)"
  >
  {{ option }}
  </div>
 </div>
 </div>
</template>

需要注意以下几点:

  • tabindex 属性使我们的组件能够得到焦点,从而使它变得模糊。当用户在组件外部单击时, blur 事件将关闭我们的组件。
  • input 参数发出选定的选项,父组件可以轻松地对更改做出反应。

JavaScript

<script>
 export default {
 props:{
  options:{
  type: Array,
  required: true
  },
  tabindex:{
  type: Number,
  required: false,
  default: 0
 }
 },
 data() {
 return {
  selected: this.options.length > 0 ? this.options[0] : null,
  open: false
 };
 },
 mounted(){
 this.$emit('input', this.selected);
 }
};
</script>

另外,要注意的重要事项:

我们还会在 mount 上发出选定的值,以便父级不需要显式设置默认值。如果我们的 select 组件是较大表单的一部分,那么我们希望能够设置正确的 tabindex 。

CSS

<style scoped>
 .custom-select {
 position: relative;
 width: 100%;
 text-align: left;
 outline: none;
 height: 47px;
 line-height: 47px;
}

.selected {
 background-color: #080D0E;
 border-radius: 6px;
 border: 1px solid #858586;
 color: #ffffff;
 padding-left: 8px;
 cursor: pointer;
 user-select: none;
}

.selected.open{
 border: 1px solid #CE9B2C;
 border-radius: 6px 6px 0px 0px;
}

.selected:after {
 position: absolute;
 content: "";
 top: 22px;
 right: 10px;
 width: 0;
 height: 0;
 border: 4px solid transparent;
 border-color: #fff transparent transparent transparent;
}

.items {
 color: #ffffff;
 border-radius: 0px 0px 6px 6px;
 overflow: hidden;
 border-right: 1px solid #CE9B2C;
 border-left: 1px solid #CE9B2C;
 border-bottom: 1px solid #CE9B2C;
 position: absolute;
 background-color: #080D0E;
 left: 0;
 right: 0;
}

.item{
 color: #ffffff;
 padding-left: 8px;
 cursor: pointer;
 user-select: none;
}

.item:hover{
 background-color: #B68A28;
}

.selectHide {
 display: none;
}
</style>

该 CSS只是一个示例,你可以按照你的需求随意修改样式。

我希望这可以帮助你创建自己的自定义选择组件,以下是完整组件要点的链接:

最后,在线演示的示例:https://codesandbox.io/s/custom-vuejs-select-component-8nqgd

总结

到此这篇关于Vue.js 中制作自定义选择组件的代码附演示demo的文章就介绍到这了,更多相关vuejs自定义选择组件内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Javascript 相关文章推荐
ext combox 下拉框不出现自动提示,自动选中的解决方法
Feb 24 Javascript
javascript 学习笔记(八)javascript对象
Apr 12 Javascript
提高javascript效率 一次判断,而不要次次判断
Mar 30 Javascript
js实现ifram取父窗口URL地址的方法
Feb 09 Javascript
JS定义网页表单提交(submit)的方法
Mar 20 Javascript
jQuery.prop() 使用详解
Jul 19 Javascript
jQuery Json数据格式排版高亮插件json-viewer.js使用方法详解
Jun 12 jQuery
原生js实现form表单序列化的方法
Aug 02 Javascript
Layui 数据表格批量删除和多条件搜索的实例
Sep 04 Javascript
原生JS实现萤火虫效果
Mar 07 Javascript
创建nuxt.js项目流程图解
Mar 13 Javascript
js实现星星海特效的示例
Sep 28 Javascript
使用vue-cli3+typescript的项目模板创建工程的教程
Feb 28 #Javascript
基于vue-cli3+typescript的tsx开发模板搭建过程分享
Feb 28 #Javascript
vue 中的 render 函数作用详解
Feb 28 #Javascript
微信小程序动态添加和删除组件的现实
Feb 28 #Javascript
浅析Vue 中的 render 函数
Feb 28 #Javascript
微信小程序实现录制、试听、上传音频功能(带波形图)
Feb 27 #Javascript
基于Element的组件改造的树形选择器(树形下拉框)
Feb 27 #Javascript
You might like
php防盗链的常用方法小结
2010/07/02 PHP
帝国cms目录结构分享
2015/07/06 PHP
PHP XML和数组互相转换详解
2016/10/26 PHP
解决laravel-admin 自己新建页面里 js 需要刷新一次的问题
2019/10/03 PHP
js Map List 遍历使用示例
2013/07/10 Javascript
jQuery中nextAll()方法用法实例
2015/01/07 Javascript
JavaScript让Textarea支持tab按键的方法
2015/06/26 Javascript
javascript实现加载xml文件的方法
2015/11/24 Javascript
JavaScript使用delete删除数组元素用法示例【数组长度不变】
2017/01/17 Javascript
微信小程序通过api接口将json数据展现到小程序示例
2017/01/20 Javascript
axios基本入门用法教程
2017/03/25 Javascript
写一个Vue Popup组件
2019/02/25 Javascript
vue+element搭建后台小总结 el-dropdown下拉功能
2020/04/10 Javascript
浅谈vue使用axios的回调函数中this不指向vue实例,为undefined
2020/09/21 Javascript
[17:36]VG战队纪录片
2014/08/21 DOTA
[46:21]Liquid vs LGD 2018国际邀请赛淘汰赛BO3 第一场 8.23
2018/08/24 DOTA
python在多玩图片上下载妹子图的实现代码
2013/08/13 Python
Python生成随机数的方法
2014/01/14 Python
python打开文件并获取文件相关属性的方法
2015/04/23 Python
python MysqlDb模块安装及其使用详解
2018/02/23 Python
python实现随机调用一个浏览器打开网页
2018/04/21 Python
Python爬取365好书中小说代码实例
2020/02/28 Python
详解python logging日志传输
2020/07/01 Python
Conforama西班牙:您的家具、装饰和电器商店
2020/02/21 全球购物
酒店拾金不昧表扬信
2014/01/18 职场文书
《胡杨》教学反思
2014/02/16 职场文书
材料工程专业毕业生求职信
2014/03/04 职场文书
慈善募捐倡议书
2015/04/27 职场文书
天那边观后感
2015/06/09 职场文书
小学总务工作总结
2015/08/13 职场文书
2015年四年级班主任工作总结
2015/10/22 职场文书
先进基层党组织事迹材料2016
2016/02/29 职场文书
你会写请假条吗?
2019/06/26 职场文书
员工保密协议范本,您一定得收藏!很有用!
2019/08/08 职场文书
《西游记》读后感(3篇)
2019/09/20 职场文书
HTML5基础学习之文本标签控制
2022/03/25 HTML / CSS