Мастер-классы по Javascript Екатеринбург Ростов-на-Дону Москва Узнать больше...
Содержание (скрыть) Содержание (показать)

Подсказка над элементом

Создайте всплывающую подсказку над элементом.

Подсказка должна появляться при наведении на элемент, по центру и на небольшом расстоянии сверху. При уходе курсора с элемента — исчезать.

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

Открыть в новом окне

Способ добавления подсказки к элементу:

new Tooltip(elem, "Вот <b>такая</b> подсказка!");

  • В подсказке и элементе, на который она поставлена, может быть произвольный HTML. Оформление подсказки должно задаваться CSS.
  • Не надо рассматривать случай, когда у вложенного элемента своя подсказка, отдельная от родителя, т.к. такого не бывает.
  • Допустимо вылезание подсказки за пределы видимой области, если элемент расположен у верхней границы окна.
  • Объект подсказки не должен иметь публичных методов, только приватные.

Исходный документ: tutorial/browser/events/tooltip-fixed-src/index.html.

P.S. Возможно, вам понадобятся функции fixEvent и getCoords. Они приложены к документу в файле lib.js.

P.P.S. Можно сверстать подсказки и при помощи CSS, если элементы заранее известны и их мало. JS-подход более универсален и не зависит от вёрстки.

Решение, шаг 1
Решение
Решение, шаг 1

Для управления подсказкой нам понадобятся два события:

  1. Наведение на элемент mouseover
  2. Уход с элемента mouseout

Скелет кода:

function Tooltip(elem, text) {

  var offsetFromElement = 10; // отступ подсказки от элемента 10px
  var tooltipElem; // тут будет DOM-элемент для подсказки

  elem.onmouseout = function() {
    hide(); // спрятать подсказку
  };

  elem.onmouseover = function() {
    show(); // показать подсказку
  };
}

Решение, шаг 2
Решение, шаг 2

Функция show должна при первом показе сгенерировать элемент с подсказкой, а затем — показать в нужном месте страницы.

Для генерации подсказки добавим вспомогательную функцию getTooltipElem(). Она будет возвращать существующий элемент, если он есть, а если нет — генерировать новый.

function getTooltipElem() {
  if (!tooltipElem) {
    tooltipElem = document.createElement('div');
    tooltipElem.className = 'tooltip';
    tooltipElem.innerHTML = text;
  }
  return tooltipElem;
}

Основная настройка вида подсказки будет в CSS-классе tooltip.

Например:

.tooltip {
  position:absolute;
  left: -9999px; /* за пределами экрана */
  z-index:100; /* подсказка должна перекрывать другие элементы */
  background: #F0FFF0;
  padding: 5px;
  border: 1px dashed green;
  text-align: center;
}

Как правильно отпозиционировать подсказку? Для начала, по горизонтали.

Центр подсказки должен быть ровно над центром элемента, который имеет координату getCoords(elem).left + elem.offsetWidth/2.

Если поставить tooltipElem.left в это значение — результат будет выглядеть так:

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

Теперь отпозиционируем по вертикали.

Это гораздо проще: нужно взять координату getCoords(elem).top и вычесть из неё высоту подсказки и дополнительный отступ:

Для того, чтобы определить высоту подсказки offsetHeight, она должна быть в DOM со свойством display, не равным none.

Поэтому мы позиционируем её за пределами видимой области, поставив left:-9999px.

В качестве альтренативы можно было бы использовать для скрытия visibility:hidden. Это свойство, в отличие от display:none, оставляет элементу размеры, просто делает его невидимым.

Полный код решения демонстрирует эти подходы на tutorial/browser/events/tooltip-fixed/index.html.

#402
Наверх

Реклама

Нашли опечатку?

Нашли опечатку на сайте? Что-то кажется странным?
Выделите соответствующий текст и нажмите Ctrl+Enter!

Последние Комментарии

Помоги другим!

Помоги другим узнать о хорошей статье!