Popover 气泡提示

示例

风格

可选的 ui 属性值:s/m

请选择
Move your mouse pointer over here.
<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 属性来指定气泡显示的位置。

top-start
top
top-end
left-start
right-start
left
right
left-end
right-end
bottom-start
bottom
bottom-end
<template>
<article>
  <veui-grid-container :columns="5">
    <veui-grid-row>
      <veui-grid-column
        :span="1"
        :offset="1"
      >
        <span
          ref="ts"
          class="target"
        >top-start</span>
        <veui-popover
          target="ts"
          position="top-start"
        >
          Hello.
        </veui-popover>
      </veui-grid-column>
      <veui-grid-column :span="1">
        <span
          ref="t"
          class="target"
        >top</span>
        <veui-popover
          target="t"
          position="top"
        >
          Hello.
        </veui-popover>
      </veui-grid-column>
      <veui-grid-column :span="1">
        <span
          ref="te"
          class="target"
        >top-end</span>
        <veui-popover
          target="te"
          position="top-end"
        >
          Hello.
        </veui-popover>
      </veui-grid-column>
    </veui-grid-row>
    <veui-grid-row>
      <veui-grid-column :span="1">
        <span
          ref="ls"
          class="target"
        >left-start</span>
        <veui-popover
          target="ls"
          position="left-start"
        >
          Hello.
        </veui-popover>
      </veui-grid-column>
      <veui-grid-column
        :span="1"
        :offset="3"
      >
        <span
          ref="rs"
          class="target"
        >right-start</span>
        <veui-popover
          target="rs"
          position="right-start"
        >
          Hello.
        </veui-popover>
      </veui-grid-column>
    </veui-grid-row>
    <veui-grid-row>
      <veui-grid-column :span="1">
        <span
          ref="l"
          class="target"
        >left</span>
        <veui-popover
          target="l"
          position="left"
        >
          Hello.
        </veui-popover>
      </veui-grid-column>
      <veui-grid-column
        :span="1"
        :offset="3"
      >
        <span
          ref="r"
          class="target"
        >right</span>
        <veui-popover
          target="r"
          position="right"
        >
          Hello.
        </veui-popover>
      </veui-grid-column>
    </veui-grid-row>
    <veui-grid-row>
      <veui-grid-column :span="1">
        <span
          ref="le"
          class="target"
        >left-end</span>
        <veui-popover
          target="le"
          position="left-end"
        >
          Hello.
        </veui-popover>
      </veui-grid-column>
      <veui-grid-column
        :span="1"
        :offset="3"
      >
        <span
          ref="re"
          class="target"
        >right-end</span>
        <veui-popover
          target="re"
          position="right-end"
        >
          Hello.
        </veui-popover>
      </veui-grid-column>
    </veui-grid-row>
    <veui-grid-row>
      <veui-grid-column
        :span="1"
        :offset="1"
      >
        <span
          ref="bs"
          class="target"
        >bottom-start</span>
        <veui-popover
          target="bs"
          position="bottom-start"
        >
          Hello.
        </veui-popover>
      </veui-grid-column>
      <veui-grid-column :span="1">
        <span
          ref="b"
          class="target"
        >bottom</span>
        <veui-popover
          target="b"
          position="bottom"
        >
          Hello.
        </veui-popover>
      </veui-grid-column>
      <veui-grid-column :span="1">
        <span
          ref="be"
          class="target"
        >bottom-end</span>
        <veui-popover
          target="be"
          position="bottom-end"
        >
          Hello.
        </veui-popover>
      </veui-grid-column>
    </veui-grid-row>
  </veui-grid-container>
</article>
</template>

<script>
import { GridContainer, GridRow, GridColumn, Popover } from 'veui'

export default {
  components: {
    'veui-grid-container': GridContainer,
    'veui-grid-row': GridRow,
    'veui-grid-column': GridColumn,
    'veui-popover': Popover
  },
  data () {
    return {
      ui: null
    }
  }
}
</script>

<style lang="less" scoped>
.veui-grid-container {
  width: 80%;
  min-width: 600px;
}

.veui-grid-row {
  margin-bottom: 20px;
}

.veui-grid-column {
  text-align: center;
  vertical-align: middle;
  line-height: 2;
}

.target {
  display: inline-block;
  width: 100%;
  padding: 0.5em 0;
  border: 1px solid #999;
  border-radius: 2px;
  transition: background-color 0.3s;
  cursor: pointer;

  &:hover {
    background-color: #f7f7f7;
  }
}
</style>

触发时机

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

trigger="hover"
Open trigger:
hover
Close trigger:
hover
Trigger hover over here.
<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>

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 属性。

插槽

名称描述
default气泡提示内容。