Tooltip 文字提示

一、概述

定义

简单的文字提示气泡框。

使用场景

  • 常用于解释操作按钮/打点字段的的文字说明

交互说明

  • 鼠标移入则立即显示提示,移出则立即消失

  • 不承载复杂文本和操作

二、 基础样式

简单的文字提示。

Tooltip 文字提示 - 图1

  1. <template>
  2. <se-tooltip :content="content">
  3. <se-button type="default">移入鼠标查看提示</se-button>
  4. </se-tooltip>
  5. </template>
  6. <script>
  7. export default {
  8. data() {
  9. return {
  10. content: '最多显示十八个文字不可折行;文字文字最多显示十八个文字不可折行;文字文字'
  11. }
  12. }
  13. }
  14. </script>

三、 提示位置

根据使用场景,提供 12 种不同方向。

Tooltip 文字提示 - 图2

  1. <div class="demo-placement">
  2. <div v-for="(item, key) in directions" :class="key" :key="key">
  3. <se-tooltip v-for="dir in item" :key="dir[0]" :placement="dir[0]" content="深院静,小庭空。">
  4. <se-button>{{dir[1]}}</se-button>
  5. </se-tooltip>
  6. </div>
  7. </div>
  8. <script>
  9. export default {
  10. data() {
  11. return {
  12. directions: {
  13. top: [['top-left', '上左'], ['top', '上边'], ['top-right', '上右']],
  14. left: [['left-top', '左上'], ['left', '左边'], ['left-bottom', '左下']],
  15. right: [['right-top', '右上'], ['right', '右边'], ['right-bottom', '右下']],
  16. bottom: [['bottom-left', '下左'], ['bottom', '下边'], ['bottom-right', '下右']]
  17. }
  18. }
  19. }
  20. }
  21. </script>
  22. <style scoped>
  23. .demo-placement {
  24. width: 500px;
  25. }
  26. .se-button {
  27. margin: 10px;
  28. }
  29. .top {
  30. text-align: center;
  31. }
  32. .left,
  33. .right {
  34. float: left;
  35. width: 120px;
  36. line-height: 3;
  37. }
  38. .right {
  39. float: right;
  40. }
  41. .bottom {
  42. clear: both;
  43. text-align: center;
  44. }
  45. .top .se-button + .se-button,
  46. .bottom .se-button + .se-button {
  47. margin-left: 10px;
  48. }
  49. .right {
  50. text-align: right;
  51. }
  52. </style>

四、 控制显示状态

组件内部默认维护了一个控制显示隐藏的状态。当然,你也可以通过 visible 属性自行控制。

Tooltip 文字提示 - 图3

<template>
  <se-tooltip :content="content" visible>
    <se-button type="default">移入鼠标查看提示</se-button>
  </se-tooltip>
</template>

<script>
  export default {
    data() {
      return {
        content: '最多显示十八个文字不可折行;文字文字最多显示十八个文字不可折行;文字文字'
      }
    }
  }
</script>

五、 事件与状态同步

当 tooltip 的展示状态发生变化时(理论上),我们会向外 emit 一个 visibility-change 事件。

Tooltip 文字提示 - 图4

<template>
  <se-tooltip :content="content" :visible="visible" @visibility-change="visibilityChange">
    <se-button type="default">移入鼠标查看提示</se-button>
  </se-tooltip>
</template>

<script>
  export default {
    data() {
      return {
        visible: false,
        content: '最多显示十八个文字不可折行;文字文字最多显示十八个文字不可折行;文字文字'
      }
    },

    methods: {
      visibilityChange(visible) {
        this.visible = visible
      }
    }
  }
</script>

另外,还可以使用 sync 修饰符实现状态自动同步。

Tooltip 文字提示 - 图5

<template>
  <se-tooltip :content="content" :visible_sync="visible">
    <se-button type="default">移入鼠标查看提示</se-button>
  </se-tooltip>
</template>

<script>
  export default {
    data() {
      return {
        visible: false,
        content: '最多显示十八个文字不可折行;文字文字最多显示十八个文字不可折行;文字文字'
      }
    }
  }
</script>

Props

参数描述类型可选值默认值
contenttooltip 的文字内容string
placement位置见下面'bottom'
visible展示状态,支持 sync 修饰符boolean
show-delay出现延时,毫秒number100
hide-delay消失延时,毫秒number100

位置可选值

const placementTypes = [
  'top-left',
  'top',
  'top-right',

  'right-top',
  'right',
  'right-bottom',

  'bottom-right',
  'bottom',
  'bottom-left',

  'left-top',
  'left',
  'left-bottom'
]

Events

事件名称描述回调函数参数
visibility-changetooltip 展示状态发生变化时触发boolean 类型

Slots

参数描述
contenttooltip 内容 优先级高于 content prop