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 相关文章推荐
JQuery扩展插件Validate—4设置错误提示的样式
Sep 05 Javascript
js实现在页面上弹出蒙板技巧简单实用
Apr 16 Javascript
js获取时间并实现字符串和时间戳之间的转换
Jan 05 Javascript
JavaScript 模块的循环加载实现方法
Dec 13 Javascript
js仿3366小游戏选字游戏
Apr 14 Javascript
node.js 中国天气预报 简单实现
Jun 06 Javascript
基于jQuery实现弹出可关闭遮罩提示框实例代码
Jul 18 Javascript
使用vue.js编写蓝色拼图小游戏
Mar 17 Javascript
d3.js实现立体柱图的方法详解
Apr 28 Javascript
详解swipe使用及竖屏页面滚动方法
Jun 28 Javascript
vue.js页面加载执行created,mounted的先后顺序说明
Nov 07 Javascript
如何实现vue的tree组件
Dec 03 Vue.js
使用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
dede3.1分页文字采集过滤规则详说(图文教程)
2007/04/03 PHP
PHP中的生成XML文件的4种方法分享
2012/10/06 PHP
php+curl 发送图片处理代码分享
2015/07/09 PHP
PHP.vs.JAVA
2016/04/29 PHP
看了就知道什么是JSON
2007/12/09 Javascript
分享几个超级震憾的图片特效
2012/01/08 Javascript
js onkeypress与onkeydown 事件区别详细说明
2012/12/13 Javascript
jQuery内容过滤选择器用法分析
2015/02/10 Javascript
javascript编写实用的省市选择器
2015/02/12 Javascript
jQuery实现简单的日期输入格式化控件
2015/03/12 Javascript
js实现鼠标点击左上角滑动菜单效果代码
2015/09/06 Javascript
jquery判断输入密码两次是否相等
2020/04/22 Javascript
JQuery核心函数是什么及使用方法介绍
2016/05/03 Javascript
js倒计时简单实现代码
2016/08/11 Javascript
浅谈js script标签中的预解析
2016/12/30 Javascript
element-ui upload组件多文件上传的示例代码
2018/10/17 Javascript
jQuery表单选择器用法详解
2019/08/22 jQuery
解决vue打包后刷新页面报错:Unexpected token
2019/08/27 Javascript
JS通用方法触发点击事件代码实例
2020/02/17 Javascript
解决Echarts 显示隐藏后宽度高度变小的问题
2020/07/19 Javascript
一文读懂vue动态属性数据绑定(v-bind指令)
2020/07/20 Javascript
jquery+ajax实现异步上传文件显示进度条
2020/08/17 jQuery
vue-router定义元信息meta操作
2020/12/07 Vue.js
python多线程方式执行多个bat代码
2016/06/07 Python
python设计模式大全
2016/06/27 Python
Python中Proxypool库的安装与配置
2018/10/19 Python
Pytorch实现各种2d卷积示例
2019/12/30 Python
PyQt5高级界面控件之QTableWidget的具体使用方法
2020/02/23 Python
django从后台返回html代码的实例
2020/03/11 Python
tensorflow指定CPU与GPU运算的方法实现
2020/04/21 Python
python中复数的共轭复数知识点总结
2020/12/06 Python
详解python3 GUI刷屏器(附源码)
2021/02/18 Python
西海岸男士和男童服装:Johnnie-O
2018/03/15 全球购物
酒店总经理工作职责
2013/12/13 职场文书
干部作风建设年活动剖析材料
2014/10/23 职场文书
Python趣味实战之手把手教你实现举牌小人生成器
2021/06/07 Python