Popover 气泡提示

示例

风格

可选的 ui 属性值:s / m

请选择
Move your mouse pointer over here.
在 GitHub 上编辑此页编辑
<template>
<article>
  <section>
    <veui-select
      v-model="ui"
      :options="options"
    />
    <veui-button @click="reset">
      reset
    </veui-button>
  </section>
  <section>
    <span ref="text">Move your mouse pointer over here.</span>
    <veui-popover
      :ui="ui"
      target="text"
    >
      This is a popover.
    </veui-popover>
  </section>
</article>
</template>

<script>
import { Popover, Select, Button } from 'veui'

export default {
  components: {
    'veui-select': Select,
    'veui-button': Button,
    'veui-popover': Popover
  },
  data () {
    return {
      ui: null,
      options: [
        {
          label: 's',
          value: 's'
        },
        {
          label: 'm',
          value: 'm'
        }
      ]
    }
  },
  methods: {
    reset () {
      this.ui = null
    }
  }
}
</script>

<style lang="less" scoped>
section + section {
  margin-top: 20px;
}
.veui-select {
  max-width: 120px;
  margin-right: 10px;
}
</style>

定位

使用 position 属性来指定气泡显示的位置。

使用 aim-center 属性来设置浮层提示箭头始终对准目标元素中心,适合用于目标元素较小的场景。

在 GitHub 上编辑此页编辑
<template>
<article>
  <section>
    <veui-checkbox
      v-model="aimCenter"
      ui="s"
    >
      Aim center
    </veui-checkbox>
  </section>
  <section class="grid">
    <veui-popover
      :open.sync="open"
      :target="target"
      :position="position"
      :aim-center="aimCenter"
    >
      Hello.
    </veui-popover>
    <veui-button
      ref="top-start"
      style="grid-area: 1 / 2"
      @mouseenter="show('top-start')"
    >
      top-start
    </veui-button>
    <veui-button
      ref="top"
      style="grid-area: 1 / 3"
      @mouseenter="show('top')"
    >
      top
    </veui-button>
    <veui-button
      ref="top-end"
      style="grid-area: 1 / 4"
      @mouseenter="show('top-end')"
    >
      top-end
    </veui-button>
    <veui-button
      ref="right-start"
      style="grid-area: 2 / 5"
      @mouseenter="show('right-start')"
    >
      right-start
    </veui-button>
    <veui-button
      ref="right"
      style="grid-area: 3 / 5"
      @mouseenter="show('right')"
    >
      right
    </veui-button>
    <veui-button
      ref="right-end"
      style="grid-area: 4 / 5"
      @mouseenter="show('right-end')"
    >
      right-end
    </veui-button>
    <veui-button
      ref="bottom-start"
      style="grid-area: 5 / 2"
      @mouseenter="show('bottom-start')"
    >
      bottom-start
    </veui-button>
    <veui-button
      ref="bottom"
      style="grid-area: 5 / 3"
      @mouseenter="show('bottom')"
    >
      bottom
    </veui-button>
    <veui-button
      ref="bottom-end"
      style="grid-area: 5 / 4"
      @mouseenter="show('bottom-end')"
    >
      bottom-end
    </veui-button>
    <veui-button
      ref="left-start"
      style="grid-area: 2 / 1"
      @mouseenter="show('left-start')"
    >
      left-start
    </veui-button>
    <veui-button
      ref="left"
      style="grid-area: 3 / 1"
      @mouseenter="show('left')"
    >
      left
    </veui-button>
    <veui-button
      ref="left-end"
      style="grid-area: 4 / 1"
      @mouseenter="show('left-end')"
    >
      left-end
    </veui-button>
  </section>
</article>
</template>

<script>
import { Popover, Button, Checkbox } from 'veui'

export default {
  components: {
    'veui-popover': Popover,
    'veui-button': Button,
    'veui-checkbox': Checkbox
  },
  data () {
    return {
      target: null,
      position: null,
      open: false,
      aimCenter: false
    }
  },
  methods: {
    show (position) {
      this.target = this.$refs[position]
      this.position = position
      this.open = true
    }
  }
}
</script>

<style lang="less" scoped>
section + section {
  margin-top: 20px;
}

.grid {
  display: grid;
  grid-template-columns: auto auto auto auto auto;
  grid-gap: 12px;
  justify-content: center;
  align-items: center;
}
</style>

触发时机

使用 trigger 属性来指定显示/隐藏气泡的时机。

trigger="hover"
Open trigger:
hover
Close trigger:
hover
Trigger hover over here.
在 GitHub 上编辑此页编辑
<template>
<article>
  <section>
    <code>trigger="{{ trigger }}"</code>
  </section>
  <section>
    Open trigger: <veui-select
      v-model="open"
      :options="triggers"
    />
  </section>
  <section>
    Close trigger: <veui-select
      v-model="close"
      :options="triggers"
    />
  </section>
  <section>
    <span
      ref="text"
      tabindex="0"
    >Trigger <b><code>{{ open }}</code></b> over here.</span>
    <veui-popover
      target="text"
      :trigger="trigger"
    >
      This is a popover.
    </veui-popover>
  </section>
</article>
</template>

<script>
import { Popover, Select } from 'veui'

export default {
  components: {
    'veui-popover': Popover,
    'veui-select': Select
  },
  data () {
    return {
      open: 'hover',
      close: 'hover',
      triggers: [
        { label: 'hover', value: 'hover' },
        { label: 'click', value: 'click' },
        { label: 'mousedown', value: 'mousedown' },
        { label: 'mouseup', value: 'mouseup' },
        { label: 'focus', value: 'focus' }
      ]
    }
  },
  computed: {
    trigger () {
      if (this.open === this.close) {
        return this.open
      }
      return `${this.open}-${this.close}`
    }
  }
}
</script>

<style lang="less" scoped>
section + section {
  margin-top: 20px;
}

span {
  outline: none;

  &.focus-visible {
    outline: 2px solid #ccc;
    outline-offset: 3px;
  }
}
</style>

标题区域和操作区域

使用 title 属性或title 插槽来指定气泡的标题。

使用 foot 属性开启底部操作区,使用 ok-label 属性和 cancel-label 属性来设置气泡的按钮内容。使用 foot 插槽来自定义底部操作区。

在 GitHub 上编辑此页编辑
<template>
<article>
  <section>
    <veui-button ref="btn1">
      按钮1
    </veui-button>
    <veui-button ref="btn2">
      按钮2
    </veui-button>
    <veui-popover
      target="btn1"
      title="Popover Title"
      ok-label="好"
      cancel-label="否"
      foot
    >
      This is a popover.
    </veui-popover>
    <veui-popover
      target="btn2"
      title="Popover Title"
      foot
    >
      This is a popover.
      <template #foot>
        Popover foot
      </template>
    </veui-popover>
  </section>
</article>
</template>

<script>
import { Popover, Button } from 'veui'

export default {
  components: {
    'veui-button': Button,
    'veui-popover': Popover
  }
}
</script>

<style lang="less" scoped>
.veui-button + .veui-button {
  margin-left: 200px;
}
</style>

API

属性

名称类型默认值描述
uistring=-

预设样式。

描述
s小尺寸样式。
m中尺寸样式。
openbooleanfalse

.sync

是否显示气泡提示。

targetstring | Vue | Node-参考 Overlay 组件的 target 属性。
positionstring'top'

指定定位参数。使用 Popper.js 风格的定位语法指定,可参考 Popper.placements

triggerstring'hover'

触发气泡提示的方式。支持指定的值为 v-outside 指令绑定值的 trigger 参数,并支持使用 `${open}-${close}` 语法分别指定触发打开/关闭提示的时机。另外,当 trigger 指定为 custom 时,将不会使用 v-outside 功能自动进行处理。

例如:click 表示点击 target 后打开,在空白处点击时关闭;hover-mousedown 表示光标移入 target 后打开,在空白处按下鼠标时关闭。

hide-delaynumbertooltip.hideDelays触发关闭条件满足后延迟关闭等待时间的毫秒数。可以用来防止光标移出 target 后移入气泡进行交互前已经自动关闭。
overlay-classstring | Array | Object=-参考 Overlay 组件的 overlay-class 属性。
overlay-stylestring | Array | Object=-参考 Overlay 组件的 overlay-style 属性。
titlestring=-用于自定义标题内容。
footbooleanfalse用于开启底部操作区。
ok-labelstring=-“确定”按钮的文字内容。
cancel-labelstring=-“取消”按钮的文字内容。

插槽

名称描述
default气泡提示内容。
title用于自定义标题内容。
foot用于自定义底部操作区。
在 GitHub 上编辑此页编辑