Vue3编写气泡对话框组件

 更新时间:2022年08月30日 09:37:33   作者:sonicwater  
这篇文章主要为大家详细介绍了Vue3编写气泡对话框组件,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

Vue3气泡对话框组件,使用 TypeScript枚举限定类型,样式用到了 TailwindCSS

组件代码

<template>
  <div class="mt-5 mb-5 p-2 bg-white border-solid border-gray-300 border-l border-t border-r border-b border-light-blue-500 rounded-md relative">
    <div :class="{
      'w-2.5 h-2.5 border-gray-300 bg-white transform absolute': true,
      'border-l border-t rotate-45 -top-1.5 left-4': placement === 'top-start',
      'border-l border-t rotate-45 -top-1.5 inset-x-2/4 -translate-x-1.5': placement === 'top',
      'border-l border-t rotate-45 -top-1.5 right-4': placement === 'top-end',
      'border-l border-t -rotate-45 top-4 -left-1.5': placement === 'left-start',
      'border-l border-t -rotate-45 inset-y-2/4 -left-1.5 -translate-y-1.5': placement === 'left',
      'border-l border-t -rotate-45 bottom-4 -left-1.5': placement === 'left-end',
      'border-r border-b rotate-45 -bottom-1.5 left-4': placement === 'bottom-start',
      'border-r border-b rotate-45 -bottom-1.5 inset-x-2/4 -translate-x-1.5': placement === 'bottom',
      'border-r border-b rotate-45 -bottom-1.5 right-4': placement === 'bottom-end',
      'border-r border-b -rotate-45 top-4 -right-1.5': placement === 'right-start',
      'border-r border-b -rotate-45 inset-y-2/4 -right-1.5 -translate-y-1.5': placement === 'right',
      'border-r border-b -rotate-45 bottom-4 -right-1.5': placement === 'right-end',
    }"></div>
    <slot></slot>
  </div>
</template>

<script lang="ts">
import {
  defineComponent,
  PropType
} from 'vue';

enum EnumPlacement {
  TopStart = "top-start",
  Top = "top",
  TopEnd = "top-end",
  LeftStart = "left-start",
  Left = "left",
  LeftEnd = "left-end",
  BottomStart = "bottom-start",
  Bottom = "bottom",
  BottomEnd = "bottom-end",
  RightStart = "right-start",
  Right = "right",
  RightEnd = "right-end"
}

export default defineComponent({
  name: 'popover-warpper',
  props: {
    placement:{
      type: String as PropType<EnumPlacement>,
      default: 'top-start'
    }
  }
});
</script>
  • 所有样式均使用 TailwindCSS
  • 枚举类型 EnumPlacement 定义了气泡对话框的箭头位置。
  • 组件接收参数 placement,并用 PropType 结合枚举类型限制该参数的值。
  • 参数 placement 可以不传,默认值是 top-start,即箭头指向上方,位置在左端。

使用组件

<template>
  <PopoverWarpper>
    <div class="text-black text-lg">标题</div>
    <div class="mt-2">内容内容内容内容</div>
    <div class="mt-2">内容内容内容内容</div>
  </PopoverWarpper>
</template>
<script>
import { defineComponent } from 'vue';
import PopoverWarpper from '@/components/PopoverWarpper.vue';
export default defineComponent({
  components:{ PopoverWarpper }
})
</script>

展示效果

给组件传参 <PopoverWarpper placement=“right-end”> 可以控制箭头位置。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

相关文章

  • Vuex中的getter和mutation的区别详解

    Vuex中的getter和mutation的区别详解

    在现代前端开发中,状态管理是一个不可忽视的话题,而Vuex作为Vue.js的官方状态管理库,在大型应用中扮演着至关重要的角色,当我们使用Vuex进行状态管理时,getter和mutation是两个重要的概念,在本文中,我们将详细探讨getter和mutation的区别,需要的朋友可以参考下
    2024-12-12
  • Vue.js+Layer表格数据绑定与实现更新的实例

    Vue.js+Layer表格数据绑定与实现更新的实例

    下面小编就为大家分享一篇Vue.js+Layer表格数据绑定与实现更新的实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-03-03
  • Vue.js项目前端多语言方案的思路与实践

    Vue.js项目前端多语言方案的思路与实践

    前端的国际化是一个比较常见的需求,但网上关于这一方面的直接可用的方案却不多,这篇文章主要给大家介绍了关于Vue.js项目前端多语言方案的思路与实践,需要的朋友可以参考下
    2021-07-07
  • vue实现显示消息提示框功能

    vue实现显示消息提示框功能

    这篇文章主要介绍了vue实现显示消息提示框功能,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-04-04
  • 将vue项目打包成电脑端应用.exe的完整步骤

    将vue项目打包成电脑端应用.exe的完整步骤

    最近接了个小活,其中甲方要求把vue项目打包成exe安装在windows上,其中有也会出现一些小问题和优化,特此记录,这篇文章主要给大家介绍了关于将vue项目打包成电脑端应用.exe的完整步骤,需要的朋友可以参考下
    2023-10-10
  • vue-router 源码实现前端路由的两种方式

    vue-router 源码实现前端路由的两种方式

    这篇文章主要介绍了vue-router 源码实现前端路由的两种方式,主要介绍Hash 路由和History 路由,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-07-07
  • vue.js 表格分页ajax 异步加载数据

    vue.js 表格分页ajax 异步加载数据

    Vue.js通过简洁的API提供高效的数据绑定和灵活的组件系统.这篇文章主要介绍了vue.js 表格分页ajax 异步加载数据的相关资料,需要的朋友可以参考下
    2016-10-10
  • vue3 使用socket的完整代码

    vue3 使用socket的完整代码

    这篇文章主要介绍了vue3 使用socket的完整代码,包括vue3客户端和服务端的实例讲解,本文给大家介绍的非常详细,感兴趣的朋友跟随小编一起看看吧
    2024-03-03
  • vue与vue-i18n结合实现后台数据的多语言切换方法

    vue与vue-i18n结合实现后台数据的多语言切换方法

    下面小编就为大家分享一篇vue与vue-i18n结合实现后台数据的多语言切换方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-03-03
  • Vue使用Axios库请求数据时跨域问题的解决方法详解

    Vue使用Axios库请求数据时跨域问题的解决方法详解

    在 VUE 项目开发时,遇到个问题,正常设置使用 Axios 库请求数据时,报错提示跨域问题,那在生产坏境下,该去怎么解决呢?下面小编就来和大家详细讲讲
    2024-01-01

最新评论