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 相关文章推荐
分享8款优秀的 jQuery 加载动画和进度条插件
Oct 24 Javascript
JavaScript中的Math 使用介绍
Apr 21 Javascript
JavaScript jquery及AJAX小结
Jan 24 Javascript
纯JavaScript代码实现文本比较工具
Feb 17 Javascript
AngularJS内建服务$location及其功能详解
Jul 01 Javascript
Bootstrap基本插件学习笔记之按钮(21)
Dec 08 Javascript
jQuery dateRangePicker插件使用方法详解
Jul 28 jQuery
Vue 项目中遇到的跨域问题及解决方法(后台php)
Mar 28 Javascript
详解vue中router-link标签所必备了解的属性
Apr 15 Javascript
微信小程序 image组件遇到的问题
May 28 Javascript
js实现窗口全屏示例详解
Sep 17 Javascript
vue 使用 canvas 实现手写电子签名
Mar 06 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设计模式 Visitor 访问者模式
2011/06/28 PHP
关于ob_get_contents(),ob_end_clean(),ob_start(),的具体用法详解
2013/06/24 PHP
解析阿里云ubuntu12.04环境下配置Apache+PHP+PHPmyadmin+MYsql
2013/06/26 PHP
PhpStorm terminal无法输入命令的解决方法
2016/10/09 PHP
PDO::getAttribute讲解
2019/01/28 PHP
jquery struts 验证唯一标识(公用方法)
2013/03/27 Javascript
JS去除右边逗号的简单方法
2013/07/03 Javascript
js 调用百度地图api并在地图上进行打点添加标注
2014/05/13 Javascript
jquery事件preventDefault()方法用法实例
2015/01/16 Javascript
javascript中的Base64、UTF8编码与解码详解
2015/03/18 Javascript
jQuery EasyUI tree增加搜索功能的实现方法
2017/04/27 jQuery
nodejs使用express获取get和post传值及session验证的方法
2017/11/09 NodeJs
浅谈react性能优化的方法
2018/09/05 Javascript
基于node+vue实现简单的WebSocket聊天功能
2020/02/01 Javascript
element el-table表格的二次封装实现(附表格高度自适应)
2021/01/19 Javascript
[00:58]他们到底在电话里听到了什么?
2017/11/21 DOTA
Python中的字典与成员运算符初步探究
2015/10/13 Python
Python通过Django实现用户注册和邮箱验证功能代码
2017/12/11 Python
tensorflow实现简单的卷积神经网络
2018/05/24 Python
Python匿名函数及应用示例
2019/04/09 Python
python实现淘宝购物系统
2019/10/25 Python
Python 中的 import 机制之实现远程导入模块
2019/10/29 Python
Python项目跨域问题解决方案
2020/06/22 Python
马来西亚最热门的在线时尚商店:FashionValet
2018/11/11 全球购物
精灵市场:Pixie Market
2019/06/18 全球购物
Kate Spade澳大利亚官方网站:美国设计师手袋品牌
2019/09/10 全球购物
施工资料员岗位职责
2014/01/06 职场文书
幼儿园美术教学反思
2014/01/31 职场文书
抄作业检讨书
2014/02/17 职场文书
机关作风建设工作总结
2014/10/23 职场文书
2014大学班主任工作总结
2014/11/08 职场文书
追讨欠款律师函
2015/06/24 职场文书
校运会通讯稿
2015/07/18 职场文书
2016年学校禁毒宣传活动工作总结
2016/04/05 职场文书
七年级话题作文之执着
2019/11/19 职场文书
Mysql存储过程、触发器、事件调度器使用入门指南
2022/01/22 MySQL