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复选框CHECKBOX全选、反选
Aug 30 Javascript
通过node-mysql搭建Windows+Node.js+MySQL环境的教程
Mar 01 Javascript
AngularJS国际化详解及示例代码
Aug 18 Javascript
移动端点击图片放大特效PhotoSwipe.js插件实现
Aug 25 Javascript
ajax前台后台跨域请求处理方式
Feb 08 Javascript
Element-ui table中过滤条件变更表格内容的方法
Mar 02 Javascript
详解如何配置vue-cli3.0的vue.config.js
Aug 23 Javascript
在vue 中使用 less的教程详解
Sep 26 Javascript
vue实现短信验证码登录功能(流程详解)
Dec 10 Javascript
详解如何在JS代码中消灭for循环
Dec 11 Javascript
解决vant-UI库修改样式无效的问题
Nov 03 Javascript
使用这 6个Vue加载动画库来减少我们网站的跳出率
May 18 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
多php服务器实现多session并发运行
2006/10/09 PHP
php下连接mssql2005的代码
2011/01/17 PHP
php 5.6版本中编写一个PHP扩展的简单示例
2015/01/20 PHP
PHP标准类(stdclass)用法示例
2016/09/28 PHP
Yii2框架BootStrap样式的深入理解
2016/11/07 PHP
PHP 数组操作详解【遍历、指针、函数等】
2020/05/13 PHP
IFrame跨域高度自适应实现代码
2012/08/16 Javascript
jquery showModelDialog的使用方法示例详解
2013/11/19 Javascript
JS、CSS加载中的小问题探讨
2013/11/26 Javascript
JS小功能(onmouseover实现选择月份)实例代码
2013/11/28 Javascript
javascript中cookie对象用法实例分析
2015/01/30 Javascript
JavaScript表格常用操作方法汇总
2015/04/15 Javascript
简单实现jQuery进度条轮播实例代码
2016/06/20 Javascript
angular route中使用resolve在uglify压缩后问题解决
2016/09/21 Javascript
require.js 加载 vue组件 r.js 合并压缩的实例
2016/10/14 Javascript
浅谈JS中String()与 .toString()的区别
2016/10/20 Javascript
JS 实现可停顿的垂直滚动实例代码
2016/11/23 Javascript
Angular实现的简单定时器功能示例
2017/12/28 Javascript
bootstrap table实现横向合并与纵向合并
2019/07/18 Javascript
vue实现评价星星功能
2020/06/30 Javascript
Python实现Linux下守护进程的编写方法
2014/08/22 Python
python实现删除文件与目录的方法
2014/11/10 Python
Python中标准模块importlib详解
2017/04/16 Python
基于python的Tkinter编写登陆注册界面
2017/06/30 Python
更换Django默认的模板引擎为jinja2的实现方法
2018/05/28 Python
OpenCV利用python来实现图像的直方图均衡化
2020/10/21 Python
Python排序函数的使用方法详解
2020/12/11 Python
html5指南-6.如何创建离线web应用程序实现离线访问
2013/01/07 HTML / CSS
HTML5 Canvas入门学习教程
2016/03/17 HTML / CSS
大班幼儿评语大全
2014/04/30 职场文书
安全生产承诺书范文
2014/05/22 职场文书
食品仓管员岗位职责
2015/04/01 职场文书
拾金不昧通报表扬范文
2015/05/05 职场文书
警示教育片观后感
2015/06/17 职场文书
2019公司管理制度
2019/04/19 职场文书
Java Kafka 消费积压监控的示例代码
2021/07/01 Java/Android