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对html元素取值与赋值的方法
Nov 20 Javascript
jquery.post用法示例代码
Jan 03 Javascript
简单谈谈jQuery(function(){})与(function(){})(jQuery)
Dec 19 Javascript
JavaScript使用RegExp进行正则匹配的方法
Jul 11 Javascript
学习JavaScript设计模式(单例模式)
Nov 26 Javascript
浅析AngularJs HTTP响应拦截器
Dec 28 Javascript
完美实现八种js焦点轮播图(上篇)
Jul 18 Javascript
vue2.0 中#$emit,$on的使用详解
Jun 07 Javascript
JavaScript在控件上添加倒计时功能的实现代码
Jul 04 Javascript
JavaScript中Array方法你该知道的正确打开方法
Sep 11 Javascript
用vscode开发vue应用的方法步骤
May 06 Javascript
基于vue+element实现全局loading过程详解
Jul 10 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
日本十大惊悚动漫
2020/03/04 日漫
php数据结构 算法(PHP描述) 简单选择排序 simple selection sort
2011/08/09 PHP
php中this关键字用法分析
2016/12/07 PHP
ext form 表单提交数据的方法小结
2008/08/08 Javascript
Jquery获得控件值的三种方法总结
2014/02/13 Javascript
jQuery多项选项卡的实现思路附样式及代码
2014/06/03 Javascript
Html5的placeholder属性(IE兼容)实现代码
2014/08/30 Javascript
js简单实现点击左右运动的方法
2015/04/10 Javascript
详解javascript中原始数据类型Null和Undefined
2015/12/17 Javascript
Bootstrap源码学习笔记之bootstrap进度条
2016/12/24 Javascript
微信小程序实现图片预加载组件
2017/01/18 Javascript
使用ng-packagr打包Angular的方法示例
2018/09/21 Javascript
微信小程序实现登录遮罩效果
2018/11/01 Javascript
layui实现数据分页功能(ajax异步)
2019/07/27 Javascript
jQuery事件模型默认行为执行顺序及trigger()与 triggerHandler()比较实例分析
2020/04/30 jQuery
[50:02]完美世界DOTA2联赛PWL S2 Magma vs FTD 第三场 11.29
2020/12/03 DOTA
Python语言的12个基础知识点小结
2014/07/10 Python
python通过imaplib模块读取gmail里邮件的方法
2015/05/08 Python
python2.7 mayavi 安装图文教程(推荐)
2017/06/22 Python
python实现跨excel的工作表sheet之间的复制方法
2018/05/03 Python
Python使用到第三方库PyMuPDF图片与pdf相互转换
2019/05/03 Python
Python多叉树的构造及取出节点数据(treelib)的方法
2019/08/09 Python
python numpy 常用随机数的产生方法的实现
2019/08/21 Python
关于Python解包知识点总结
2020/05/05 Python
Python request中文乱码问题解决方案
2020/09/17 Python
Python中Yield的基本用法
2020/10/18 Python
英国网上购买门:Direct Doors
2018/06/07 全球购物
波兰化妆品和护肤品购物网站:eKobieca
2019/08/30 全球购物
查询优化的一般准则有哪些
2015/03/08 面试题
执行总经理岗位职责
2014/02/03 职场文书
建筑安全员岗位职责
2014/03/13 职场文书
解除劳动合同证明书
2014/09/26 职场文书
思想作风整顿个人剖析材料
2014/10/06 职场文书
销售员态度差检讨书
2014/10/26 职场文书
遗愿清单观后感
2015/06/09 职场文书
Html5调用企业微信的实现
2021/04/16 HTML / CSS