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 相关文章推荐
一个js封装的不错的选项卡效果代码
Feb 15 Javascript
javascript不同页面传值的改进版
Sep 30 Javascript
写出更好的JavaScript之undefined篇(上)
Nov 22 Javascript
js中的string.format函数代码
Aug 11 Javascript
原生JS实现加入收藏夹的代码
Oct 24 Javascript
JQuery包裹DOM节点的方法
Jun 11 Javascript
jquery.cookie.js实现用户登录保存密码功能的方法
Apr 15 Javascript
JS代码实现table数据分页效果
May 26 Javascript
JS递归遍历对象获得Value值方法技巧
Jun 14 Javascript
Thinkphp5微信小程序获取用户信息接口的实例详解
Sep 26 Javascript
vue实现仿淘宝结账页面实例代码
Nov 08 Javascript
浅谈TypeScript 用 Webpack/ts-node 运行的配置记录
Oct 11 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
我的论坛源代码(三)
2006/10/09 PHP
浅析PHP页面局部刷新功能的实现小结
2013/06/21 PHP
php数组合并array_merge()函数使用注意事项
2014/06/19 PHP
关于PHP中字符串与多进制转换函数的实例代码
2016/11/03 PHP
js模拟类继承小例子
2010/07/17 Javascript
让ie运行js时提示允许阻止内容运行的解决方法
2010/10/24 Javascript
js实现addClass,removeClass,hasClass的函数代码
2011/07/13 Javascript
jQuery标签编辑插件Tagit使用指南
2015/04/21 Javascript
基于css3新属性transform及原生js实现鼠标拖动3d立方体旋转
2016/06/12 Javascript
AngularJS实现标签页的两种方式
2016/09/05 Javascript
jQuery结合jQuery.cookie.js插件实现换肤功能示例
2017/10/14 jQuery
将jquery.qqFace.js表情转换成微信的字符码
2017/12/01 jQuery
vue.js计算属性computed用法实例分析
2018/07/06 Javascript
Python基于twisted实现简单的web服务器
2014/09/29 Python
在Python的Django框架中实现Hacker News的一些功能
2015/04/17 Python
Python 实现使用dict 创建二维数据、DataFrame
2018/04/13 Python
python 获取文件下所有文件或目录os.walk()的实例
2018/04/23 Python
10分钟用python搭建一个超好用的CMDB系统
2019/07/17 Python
python面向对象 反射原理解析
2019/08/12 Python
Python实现RGB与HSI颜色空间的互换方式
2019/11/27 Python
Python读取YAML文件过程详解
2019/12/30 Python
使用Tkinter制作信息提示框
2020/02/18 Python
tensorflow模型文件(ckpt)转pb文件的方法(不知道输出节点名)
2020/04/22 Python
深入了解NumPy 高级索引
2020/07/24 Python
解析HTML5中的新功能本地存储localStorage
2016/03/01 HTML / CSS
旅游管理本科生求职信
2013/10/14 职场文书
毕业生的自我鉴定
2013/10/29 职场文书
应用化学专业职业生涯规划书
2013/12/31 职场文书
中学教师培训制度
2014/01/31 职场文书
经典安踏广告词
2014/03/21 职场文书
个人整改措施落实情况汇报
2014/10/29 职场文书
出纳岗位职责范本
2015/03/31 职场文书
答辩状格式范本
2015/05/22 职场文书
大学生志愿者心得体会
2016/01/15 职场文书
中国式结婚:司仪主持词(范文)
2019/07/25 职场文书
详解Redis瘦身指南
2021/05/26 Redis