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插件validate验证的小例子
May 08 Javascript
js日期相关函数总结分享
Oct 15 Javascript
JavaScript检测鼠标移动方向的方法
May 22 Javascript
jQuery图片轮播滚动切换代码分享
Apr 20 Javascript
node.js中module.exports与exports用法上的区别
Sep 02 Javascript
用js实现博客打赏功能
Oct 24 Javascript
利用Vue.js实现checkbox的全选反选效果
Jan 18 Javascript
jQuery实现优雅的弹窗效果(6)
Feb 08 Javascript
JS实现微信里判断页面是否被分享成功的方法
Jun 06 Javascript
微信小程序swiper组件用法实例分析【附源码下载】
Dec 07 Javascript
webpack HappyPack实战详解
Oct 08 Javascript
JavaScript交换两个变量方法实例
Nov 25 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网站地图生成类示例
2014/01/13 PHP
Zend Framework教程之前端控制器Zend_Controller_Front用法详解
2016/03/07 PHP
php简单生成一组与多组随机字符串的方法
2017/05/09 PHP
JS写的贪吃蛇游戏(个人练习)
2013/07/08 Javascript
子窗体与父窗体传值示例js代码
2013/08/01 Javascript
js函数名与form表单元素同名冲突的问题
2014/03/07 Javascript
代码获取历史上的今天发生的事
2014/04/11 Javascript
JavaScript数组常用操作技巧汇总
2014/11/17 Javascript
JavaScript中判断变量是数组、函数或是对象类型的方法
2015/02/25 Javascript
cookie的secure属性详解
2015/04/08 Javascript
javascript常用的方法分享
2015/07/01 Javascript
跟我学习javascript的arguments对象
2015/11/16 Javascript
有关jquery与DOM节点操作方法和属性记录
2016/04/15 Javascript
JS获取屏幕高度的简单实现代码
2016/05/24 Javascript
jQuery on()方法绑定动态元素的点击事件实例代码浅析
2016/06/16 Javascript
jQuery simpleModal插件的使用介绍
2016/08/30 Javascript
jQuery页面弹出框实现文件上传
2017/02/09 Javascript
微信小程序 自定义Toast实例代码
2017/06/12 Javascript
详解Angular 自定义结构指令
2017/06/21 Javascript
结合mint-ui移动端下拉加载实践方法总结
2017/11/08 Javascript
vue2.0 资源文件assets和static的区别详解
2018/04/08 Javascript
JavaScript事件冒泡与事件捕获实例分析
2018/08/01 Javascript
javascript实现留言板功能
2020/02/08 Javascript
[02:42]DOTA2英雄基础教程 杰奇洛
2013/12/23 DOTA
跟老齐学Python之开始真正编程
2014/09/12 Python
Python读取键盘输入的2种方法
2015/06/16 Python
判断python字典中key是否存在的两种方法
2018/08/10 Python
python实现简单的购物程序代码实例
2020/03/03 Python
PyCharm 2020.2下配置Anaconda环境的方法步骤
2020/09/23 Python
CSS3只让背景图片旋转180度的实现示例
2021/03/09 HTML / CSS
实习销售业务员自我鉴定
2013/09/21 职场文书
社区包粽子活动方案
2014/01/21 职场文书
门卫岗位职责
2015/02/09 职场文书
2015年度培训工作总结范文
2015/04/02 职场文书
一篇合格的广告文案,其主要目的是什么?
2019/07/12 职场文书
编写python程序的90条建议
2021/04/14 Python