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 相关文章推荐
IE6下opacity与JQuery的奇妙结合
Mar 01 Javascript
JQuery文字列表向上滚动的代码
Nov 13 Javascript
js控制input框只读实现示例
Jan 20 Javascript
JQuery 传送中文乱码问题的简单解决办法
May 24 Javascript
JS实现的验证身份证及获取地区功能示例
Jan 16 Javascript
解决IE7中使用jQuery动态操作name问题
Aug 28 jQuery
js禁止表单重复提交
Aug 29 Javascript
express+vue+mongodb+session 实现注册登录功能
Dec 06 Javascript
vue踩坑记-在项目中安装依赖模块npm install报错
Apr 02 Javascript
layui table设置某一行的字体颜色方法
Sep 05 Javascript
Angular 多模块项目构建过程
Feb 13 Javascript
vue下canvas裁剪图片实例讲解
Apr 16 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简介
2006/10/09 PHP
优化PHP代码的53条建议
2008/03/27 PHP
析构函数与php的垃圾回收机制详解
2013/10/28 PHP
Ajax+PHP实现的模拟进度条功能示例
2019/02/11 PHP
PHP的简单跳转提示的实现详解
2019/03/14 PHP
兼容多浏览器的iframe自适应高度(ie8 、谷歌浏览器4.0和 firefox3.5.3)
2009/11/04 Javascript
JavaScript自定义DateDiff函数(兼容所有浏览器)
2012/03/01 Javascript
js为鼠标添加右击事件防止默认的右击菜单弹出
2013/07/29 Javascript
javascript 拷贝节点cloneNode()使用介绍
2014/04/03 Javascript
浅析JavaScript中的事件机制
2015/06/04 Javascript
Windows系统下Node.js的简单入门教程
2015/06/23 Javascript
浅析jQuery 遍历函数,javascript中的each遍历
2016/05/25 Javascript
Bootstrap Table表格一直加载(load)不了数据的快速解决方法
2016/09/17 Javascript
Vue.js对象转换实例
2017/06/07 Javascript
Mongoose实现虚拟字段查询的方法详解
2017/08/15 Javascript
vue router嵌套路由在history模式下刷新无法渲染页面问题的解决方法
2018/01/25 Javascript
webpack css加载和图片加载的方法示例
2018/09/11 Javascript
一次Webpack配置文件的分离实战记录
2018/11/30 Javascript
如何优雅的在一台vps(云主机)上面部署vue+mongodb+express项目
2019/01/20 Javascript
Vue.use()在new Vue() 之前使用的原因浅析
2019/08/26 Javascript
seajs和requirejs模块化简单案例分析
2019/08/26 Javascript
在Vue中实现随hash改变响应菜单高亮
2020/03/09 Javascript
开发Node CLI构建微信小程序脚手架的示例
2020/03/27 Javascript
JavaScript实现京东快递单号查询
2020/11/30 Javascript
python如何通过protobuf实现rpc
2016/03/06 Python
Python md5与sha1加密算法用法分析
2017/07/14 Python
添柏岚英国官方网站:Timberland英国
2019/11/28 全球购物
火锅店创业计划书范文
2014/02/02 职场文书
《兰亭集序》教学反思
2014/02/11 职场文书
企业党员个人自我评价
2014/09/20 职场文书
领导班子四风问题个人对照检查材料
2014/10/04 职场文书
保安2014年终工作总结
2014/12/06 职场文书
基层党建工作简报
2015/07/21 职场文书
浅谈由position属性引申的css进阶讨论
2021/05/25 HTML / CSS
python实现局部图像放大
2021/11/17 Python
SQLServer RANK() 排名函数的使用
2022/03/23 SQL Server