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 相关文章推荐
一个很简单的办法实现TD的加亮效果.
Jun 29 Javascript
jQuery maxlength文本字数限制插件
Apr 16 Javascript
JQuery-tableDnD 拖拽的基本使用介绍
Jul 04 Javascript
js实现select组件的选择输入过滤代码
Oct 14 Javascript
js实现字符串和数组之间相互转换操作
Jan 12 Javascript
jQuery封装的屏幕居中提示信息代码
Jun 08 Javascript
浅析js的模块化编写 require.js
Dec 07 Javascript
JS实现图片高斯模糊切换效果的焦点图实例
Jan 21 Javascript
Node.js操作redis实现添加查询功能
May 25 Javascript
对于input 框限定输入值为浮点型的js代码
Sep 25 Javascript
js实现AI五子棋人机大战
May 28 Javascript
微信小程序订阅消息(java后端实现)开发
Jun 01 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数组传递是值传递而非引用传递概念纠正
2013/01/31 PHP
ThinkPHP3.1新特性之字段合法性检测详解
2014/06/19 PHP
AJAX的使用方法详解
2017/04/29 PHP
地址栏上的一段语句,改变页面的风格。(教程)
2008/04/02 Javascript
javascript 密码强弱度检测万能插件
2009/02/25 Javascript
HTML 自动伸缩的表格Table js实现
2009/04/01 Javascript
cnblogs TagCloud基于jquery的实现代码
2010/06/11 Javascript
JavaScript高级程序设计(第3版)学习笔记2 js基础语法
2012/10/11 Javascript
兼容IE、firefox以及chrome的js获取时间(getFullYear)
2014/07/04 Javascript
JavaScript检查某个function是否是原生代码的方法
2014/08/20 Javascript
js中setTimeout()与clearTimeout()用法实例浅析
2015/05/12 Javascript
javascript的BOM汇总
2015/07/16 Javascript
JavaScript函数学习总结以及相关的编程习惯指南
2015/11/16 Javascript
详解AngularJS跨页面传值(ui-router)
2017/08/23 Javascript
详解vue项目的构建,打包,发布全过程
2017/11/23 Javascript
JS和JQuery实现雪花飘落效果
2017/11/30 jQuery
在Vue中使用echarts的方法
2018/02/05 Javascript
vue-cli 默认路由再子路由选中下的选中状态问题及解决代码
2018/09/06 Javascript
解决layer 动态加载select 失效的问题
2019/09/18 Javascript
详解Nuxt内导航栏的两种实现方式
2020/04/16 Javascript
解决VUE 在IE下出现ReferenceError: Promise未定义的问题
2020/11/07 Javascript
关于uniApp editor微信滑动问题
2021/01/15 Javascript
python实现登陆知乎获得个人收藏并保存为word文件
2015/03/16 Python
Python编程之event对象的用法实例分析
2017/03/23 Python
Python实现字典的遍历与排序功能示例
2017/12/23 Python
12个步骤教你理解Python装饰器
2019/07/01 Python
Python搭建Keras CNN模型破解网站验证码的实现
2020/04/07 Python
Python爬虫实现vip电影下载的示例代码
2020/04/20 Python
澳大利亚药房在线:ThePharmacy
2017/10/04 全球购物
艺术系应届生的自我评价
2013/10/19 职场文书
员工薪酬福利制度
2014/01/17 职场文书
学位证书委托书
2014/09/30 职场文书
社区党支部承诺书
2015/04/29 职场文书
发工资啦!教你用Python实现邮箱自动群发工资条
2021/05/10 Python
Python中的datetime包与time包包和模块详情
2022/02/28 Python
Hive导入csv文件示例
2022/06/25 数据库