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 相关文章推荐
跨浏览器通用、可重用的选项卡tab切换js代码
Sep 20 Javascript
jquery的选择器的使用技巧之如何选择input框
Sep 22 Javascript
javacript获取当前屏幕大小
Jun 04 Javascript
jquery 正整数数字校验正则表达式
Jan 10 Javascript
VUE JS 使用组件实现双向绑定的示例代码
Jan 10 Javascript
JavaScript Uploadify文件上传实例
Feb 28 Javascript
微信小程序微信支付接入开发实例详解
Apr 12 Javascript
js实现放大镜特效
May 18 Javascript
js仿微信抢红包功能
Sep 25 Javascript
浅谈从React渲染流程分析Diff算法
Sep 08 Javascript
vue-form表单验证是否为空值的实例详解
Oct 29 Javascript
利用vue3+ts实现管理后台(增删改查)
Oct 30 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实现一维数组转二维数组的方法
2015/02/25 PHP
Docker配置PHP开发环境教程
2016/12/21 PHP
Javascript读取cookie函数代码
2010/10/16 Javascript
FireBug 调试JS入门教程 如何调试JS
2013/12/23 Javascript
jQuery Trim去除字符串首尾空字符的实现方法说明
2014/02/11 Javascript
jQuery表单域属性过滤器用法分析
2015/02/10 Javascript
JavaScript动态修改网页元素内容的方法
2015/03/21 Javascript
JavaScript观察者模式(经典)
2015/12/09 Javascript
js select实现省市区联动选择
2020/04/17 Javascript
bootstrap modal弹出框的垂直居中
2016/12/14 Javascript
vue组件 $children,$refs,$parent的使用详解
2017/07/31 Javascript
ionic2懒加载配置详解
2017/09/01 Javascript
JS实现将二维数组转为json格式字符串操作示例
2018/07/12 Javascript
JavaScript去掉数组重复项的方法分析【测试可用】
2018/07/19 Javascript
vue3.0 CLI - 2.1 -  component 组件入门教程
2018/09/14 Javascript
Vue混入mixins滚动触底的方法
2019/11/22 Javascript
Vue2.4+新增属性.sync、$attrs、$listeners的具体使用
2020/03/08 Javascript
Python序列之list和tuple常用方法以及注意事项
2015/01/09 Python
python实现汉诺塔递归算法经典案例
2021/03/01 Python
Python文件和流(实例讲解)
2017/09/12 Python
Python的条件表达式和lambda表达式实例
2019/01/31 Python
Python学习笔记之视频人脸检测识别实例教程
2019/03/06 Python
详解numpy.meshgrid()方法使用
2019/08/01 Python
python实现静态web服务器
2019/09/03 Python
python安装和pycharm环境搭建设置方法
2020/05/27 Python
Keras: model实现固定部分layer,训练部分layer操作
2020/06/28 Python
Python接口自动化系列之unittest结合ddt的使用教程详解
2021/02/23 Python
CSS3制作精致的照片墙特效
2016/06/07 HTML / CSS
HTML5之WebGL 3D概述(上)—WebGL原生开发开启网页3D渲染新时代
2013/01/31 HTML / CSS
canvas绘制太极图的实现示例
2020/04/29 HTML / CSS
旅游管理实习自我鉴定
2013/09/29 职场文书
外贸业务员求职信
2014/06/16 职场文书
死者家属慰问信
2015/03/24 职场文书
撤诉申请书法院范本
2015/05/18 职场文书
信用卡收入证明范本
2015/06/12 职场文书
干部考核工作总结2015
2015/07/24 职场文书