Полное руководство по созданию пользовательского компонента всплывающей подсказки Vue.js с нуля.

Подсказка — это функция, которая предлагает подсказку, описательное сообщение или часть информации об элементе. Когда пользователь наводит курсор, фокусируется или щелкает элемент, всплывающая подсказка отображается в виде небольшой метки рядом с элементом. Всплывающие подсказки особенно полезны для предоставления пояснений, определений или следующих шагов для пользователей, не загромождая ваш пользовательский интерфейс.

В этой статье мы рассмотрим варианты, доступные в настоящее время для создания всплывающих подсказок в приложениях Vue.js. Затем мы создадим наш собственный компонент всплывающей подсказки Vue.js с нуля, используя предоставленную информацию. В нашем примере мы будем использовать Vuetify и библиотеки BootstrapVue.

Начиная

Во-первых, убедитесь, что на вашем компьютере установлен Vue CLI 4.X. Чтобы создать новый проект Vue, выполните в терминале следующую команду:

vue create tooltips

Давайте удалим компоненты по умолчанию в нашем новом проекте и убедимся, что в браузере ничего не отображается. Наш файл App.vue должен выглядеть как блок кода ниже:

<template>
</template>
<script>
export default {
  name: 'App',
  components: {
  },
  data: () => ({
    //
  }),
};
</script>

Создайте всплывающую подсказку в Vuetify

Чтобы установить Vuetify, выполните в терминале следующую команду:

vue add vuetify

Теперь интерфейс командной строки Vue.js установит для нас Vuetify. Чтобы создать всплывающую подсказку, добавьте следующий код в app.vue и снова запустите проект:

<template>
<div>

<v-app>
  <div class="text-center d-flex align-center justify-space-around">
    <v-tooltip bottom>
      <template v-slot:activator="{ on, attrs }">
        <v-btn
          color="primary"
          dark
          v-bind="attrs"
          v-on="on"
        >
          Hover on me
        </v-btn>
      </template>
      <span>Bottom tooltip</span>
    </v-tooltip>

  </div>
</v-app>
</div>
</template>
<script>
export default {
  name: 'App',
  components: {
  },
  data: () => ({
    //
  }),
};
</script>
<style>
.container{
margin-top:50px
}
</style>

Каждый компонент из Vuetify должен отображаться внутри компонента <v-app>, а <v-tooltip> может охватывать любой компонент.

В приведенном выше коде у нас есть два основных элемента: <template>, который отображается как простой текст, и <span>. При наведении на кнопку атрибут v-slot активирует всплывающую подсказку, а на экране отображается содержимое <span>:

Вы также можете динамически активировать поведение всплывающей подсказки с помощью следующего кода:

<template>
<div>
<v-app>
  <div class="text-center d-flex align-center justify-space-around">
<v-btn @click="show = !show">
          toggle
        </v-btn>
</div>
  <div class="text-center d-flex align-center justify-space-around">
    <v-tooltip v-model="show"
 bottom>
      <template v-slot:activator="{ on, attrs }">
        <v-btn
          color="primary"
          dark
          v-bind="attrs"
          v-on="on"
        >
          Hover on me
        </v-btn>
      </template>
      <span >Bottom tooltip</span>
    </v-tooltip>
  </div>
</v-app>
</div>
</template>
<script>
export default {
  name: 'App',
  components: {
  },
   data () {
      return {
        show: false,
      }
    },
};
</script>
<style>
.container{
  margin-top:50px
}
</style>

В приведенном выше блоке кода мы создали новую кнопку и добавили состояние внутри компонента.

Изначально для всплывающей подсказки установлено значение false. v-modal позволяет нам выбрать, отображать всплывающую подсказку или нет. Состояние изменяется при нажатии кнопки, как показано на изображении ниже:

Создайте всплывающую подсказку в BootstrapVue

Чтобы установить BootstrapVue, выполните в терминале следующую команду:

npm install vue bootstrap bootstrap-vue

Теперь мы должны зарегистрировать BootstrapVue в основной точке входа нашего приложения. Перейдите к main.js и добавьте код ниже:

import Vue from "vue";
import App from "./App.vue";
import { BootstrapVue, IconsPlugin } from "bootstrap-vue";
import "bootstrap/dist/css/bootstrap.css";
import "bootstrap-vue/dist/bootstrap-vue.css";
import vuetify from "./plugins/vuetify";
Vue.config.productionTip = false;
Vue.use(BootstrapVue);
Vue.use(IconsPlugin);
new Vue({
  vuetify,
  render: (h) => h(App),
}).$mount("#app");

У нас есть два разных метода создания всплывающих подсказок в BootstrapVue, подход компонентов и подход директив. В то время как компонентный подход хорошо подходит для простого стандартного использования, подход с директивами предлагает больше возможностей для настройки поведения всплывающей подсказки.

Имейте в виду, что мы можем вызывать всплывающую подсказку, наводя курсор, фокусируясь или щелкая элемент.

У нас также есть 12 вариантов расположения всплывающей подсказки, где top используется по умолчанию: top, topleft, topright, right, righttop, rightbottom, bottom, bottomleft, bottomright, left, lefttop и leftbottom.

Компонентный подход

В BootstrapVue всплывающие подсказки представляют собой компоненты, которые прикрепляются к целевому элементу через идентификатор компонента. Чтобы создать всплывающую подсказку с использованием компонентного подхода, мы можем просто создать кнопку и поместить идентификатор в целевой атрибут.

Добавьте следующий код в App.vue:

<template>
  <div class='main'>
  <b-button id="tooltip-target-1">
    Hover Me
  </b-button>
  <b-tooltip target="tooltip-target-1" triggers="hover"   placement="bottom"
>
    I am tooltip <b>component</b> content!
  </b-tooltip>
  </div>
</template>
<script>
export default {
  name: "App",
  components: {},
};
</script>
<style>
.main{
display:flex;
justify-content:space-around;
}
</style>

В приведенном выше коде мы создали кнопку с именем b-button и присвоили ей определенный идентификатор tooltip-target-1. Чтобы вызвать всплывающую подсказку для hover, мы можем просто использовать компонент b-tooltip и поместить идентификатор нашей кнопки в целевой атрибут.

Атрибут триггера отвечает за поведение всплывающей подсказки. По умолчанию у нас есть триггеры для hover, focus, click и hover+focus. Мы можем определить положение всплывающей подсказки, используя placement:

Директивный подход

Подход с директивами позволяет нам использовать пользовательские директивы для указания поведения нашего компонента всплывающей подсказки. Чтобы создать всплывающую подсказку с использованием директив, просто используйте v-b-tooltip внутри компонента.

Например, мы можем добавить блок кода ниже к App.vue:

<template>
  <div>
         <b-button v-b-tooltip.hover.right="'Tooltip!'" variant="primary">Right</b-button>
  </div>
</template>
<script>
export default {
  name: "App",
  components: {},

};
</script>
<style></style>

Служите проекту и перейдите в браузер. Ваша всплывающая подсказка должна выглядеть так, как показано на рисунке ниже:

Мы можем изменить поведение всплывающей подсказки при действиях мыши с помощью директив. Давайте добавим больше кнопок в App.vue:

<template>
  <div class='main'>
    <b-button v-b-tooltip.hover.right="'Tooltip!'" variant="primary"
      >hover</b-button
    >
    <b-button v-b-tooltip.focus.right="'Tooltip!'" variant="primary"
      >focus</b-button
    >
    <b-button v-b-tooltip.click.left="'Tooltip!'" variant="primary"
      >click</b-button
    >
  </div>
</template>
<script>
export default {
  name: "App",
  components: {},
};
</script>
<style>
.main{
display:flex;
justify-content:space-around;
}
</style>

Создать всплывающую подсказку с нуля

С методами, которые мы рассмотрели до сих пор, мы должны установить внешние пакеты для создания всплывающей подсказки, что приводит к увеличению размеров зависимостей. Изменения в наших зависимостях могут привести к поломке нашего приложения. Однако, если вы используете одну всплывающую подсказку, вы можете создать ее с нуля всего за несколько минут вместо установки библиотеки.

В папке component создайте новый файл с именем Tooltip.vue и добавьте следующий код:

<template>
  <div class="tooltip-container">
    <slot />
    <div
      class="tooltip"
    >
      <span
        class="text"
      >{{ text }}</span>
    </div>
  </div>
</template>

В приведенном выше блоке кода мы создали основной контейнер всплывающей подсказки, в котором будет размещен весь компонент. Тег slot внедряет дочерний компонент, который активирует всплывающую подсказку. Наконец, простой <span> содержит текст для нашей всплывающей подсказки:

<script>
export default {
  props: { 
    text: {
      type: String,
      required: true
    }
  },
}
</script>

Наконец, мы добавим реквизит для нашего текста в виде строки:

<style scoped>
.tooltip-container { 
  position: relative;
  display: inline-block;
  margin:100px;
}
.tooltip-container:hover .tooltip{
  opacity: 1;
}
.tooltip { 
  color: #ffffff;
  text-align: center;
  padding: 5px 0;
  border-radius: 2px;
  width: 120px;
  bottom: 100%;
  left: 50%;
  margin-left: -60px;
  opacity: 0;
  transition: opacity 1s;
  position: absolute;
  z-index: 1;
  background: #000000;
}
.text::after {
  content: " ";
  position: absolute;
  top: 100%;
  left: 50%;
  margin-left: -5px;
  border-width: 5px;
  border-style: solid;
  border-color: #000000 transparent transparent transparent;
}
</style>

Положение основного контейнера является относительным. Для всплывающей подсказки мы установили z-index на 1, отображая всплывающую подсказку над элементом.

Затем мы визуализировали небольшой простой кончик стрелки. По умолчанию непрозрачность установлена ​​на 0. Когда пользователь наводит курсор на компонент внутри нашего компонента всплывающей подсказки, непрозрачность устанавливается на 1, отображая нашу всплывающую подсказку над элементом.

Чтобы использовать нашу пользовательскую подсказку, импортируйте и зарегистрируйте подсказку в App.vue:

<template>
  <div >
<Tooltip
  text="I am  button"
 &gt;
   <button> hover over me </button>
 </Tooltip>
  </div>
</template>
<script>
  import Tooltip from './components/Tooltip';
export default {
  name: "App",
  components: {
    Tooltip
  },
};
</script>

Давайте запустим наш проект и посмотрим результат в браузере:

Заключение

Всплывающие подсказки — это полезное и интуитивно понятное дополнение к вашему приложению, которое улучшает ваш UX, направляя пользователей и заранее отвечая на вопросы. Теперь вы знаете несколько различных способов создания всплывающей подсказки в Vue.js: от использования таких библиотек, как BootstrapVue и Vuetify, до создания с нуля.

Использование библиотеки для создания всплывающей подсказки довольно просто, однако, если вас беспокоит размер вашего дерева зависимостей, создать собственную всплывающую подсказку так же просто.

Хотя в наших примерах использовался простой компонент всплывающей подсказки, вы можете настроить свой с помощью других цветов, значков, движений и многого другого. Надеюсь, вам понравился этот урок!

Исходное сообщение было опубликовано на LogRocket

Дополнительные материалы на PlainEnglish.io. Подпишитесь на нашу бесплатную еженедельную рассылку новостей. Подпишитесь на нас в Twitter и LinkedIn. Присоединяйтесь к нашему сообществу Discord.