jQuery

индекс
283,92

Плагин для всплывающих подсказок Simpletip

image

Минусы jQuery Tools Tooltip, плюсы SimpleTip, а так же немного о том, как решить некоторые проблемы его использования.


До недавнего времени пользовался удобным и маленьким плагином jQuery Tools Tooltip, который всем меня устраивал.
И вот решил найти другой потому что:

1. Отображается в подсказке текст, который содержится в атрибуте title элемента, для которого нужна подсказка. Можно еще передавать через атрибут tip в конструкторе, но передавать нужно jQuery selector, а не просто текст. В общем не очень удобно и не очень гибко;
2. После создания подсказки невозможно поменять текст и вообще содержимое подсказки (ни простая смена атрибута title, ни последующий вызов конструктора $('#email').tooltip(); не помогает). В общем, нет штатного средства, это огорчает.

Решил поискать альтернативу, так как мне нужно было именно обновлять текст подсказки (так как взаимодействие с сервером через ajax и страница не перегружается).

Нагуглил вот такой плагин SimpleTip

Из приятностей:
1. упакованный файл весит 3.3 кБ против 3.4 у Tools Tooltip;
2. передача текста в конструкторе $('#email').simpletip({content: 'hello world'});, туда же можно передавать html, тоесть отображать вообще что душе угодно;
3. возможность обновить содержимое подсказки через update('new content');, да и вообще динамически можно подгружать из разных источников;
4. больше, больше настроек и возможности управлять поведением всплывающих подсказок.

Неприятным было лишь то, что, несмотря на заверение автора «it allows you to create tooltips with ease on any element „, подсказки для input[type=text] элементов не отображались. После просмотра фаербагом страницы оказалось, что плагин создает скрытый div внутри элемента, для которого нужна подсказка:
  1. var tooltip = jQuery(document.createElement('div'))
  2.                      ...
  3.                      .appendTo(elem);
(26 строка в коде).

Ну и понятное дело, что div внутри input — ход не верный. Поэтому меняем appendTo на insertAfter, и подсказки начинают весело отображаться и для inputов.

Так же есть небольшая проблема с отображением в диалоговых окнах jqueryui. для корректного отображения в них нужно помимо стандартного класса .tooltip создать класс, допустим tooltipForDialogBox, где убрать position: absolute; и тултип будет отображаться и в диалоговых окнах.

И напоследок, если нужно поменять текст сообщения, то нужно использовать уже метод update, так как тултип уже создан. Чтобы определить существует ли он уже, я использовал такую конструкцию:

  1. if ($('#edit').next().hasClass('tooltipForDialogBox'))
  2. {
  3.     var tip = $('#edit').eq(0).simpletip();
  4.     tip.update('New content');
  5. }
  6. else
  7. {
  8.     $('#edit')
  9.     .simpletip({
  10.         content: 'first content',
  11.         baseClass: 'tooltipForDialogBox'
  12.     });
  13. }


На странице плагина имеется хорошее API и demo.

Надеюсь, кому то окажется полезен пост и сохранит ему время, чтобы не жалко было моего потраченного)
+49
1 сентября 2010, 23:30
215

комментарии (12)

+3
Stark #
Лучше уж qTip, от того-же автора юзать — функциональнее в разы.
+6
morph #
фунцкиональнее. но и весит 38кб в упакованном виде против 3.3кб для SimpleTip. С основной задачей (показать подсказку, обновить подсказку, удалить подсказку, произвести действия по событию) SimpleTip справляется, зачем тогда нагружать сайт лишними 30 кб ненужного кода?
0
filippoff #
Спасибо, интересный плагин
–7
Aidsoid #
Для такой ерунды еще и плагины, это же с помощью jQuery делается за минуты.
+4
borius #
на хабре такой ответ можно писать только если %username% хвастается своим гипер крутым плагином, иначе можно огрести.

Плагин кстати действительно УГ.

Чтобы сделать нам нужно всего то описать функцию .tooltip()
1) Получаем данные о диве $(this).width(), $(this).height(), $(this).offset().left, $(this).offset().right
2) Создаем див новый который находится в нашем текущем с специальным классом, подсказки с помощью этих кординат (5 классов школы хватит, чтобы посчитать координаты длину и высоту)
3) Заоплняем див подсказки
4) прикручиваем к $(this).mouseover(function(){}) и $(this).mouseout(function() {}) внутри функции получаем див подсказки и делаем show, hide()

В чем такая сложность самому сделать? Быстрее имхо чем искать чужой код=)
+1
morph #
Зачем изобретать велосипед?
5 минут на поиск плагина + 15 на исправление глюков.
Свое с нужным мне функционалом (учитывая что в верстке я профан) я бы реализовывал гораздо дольше.
0
borius #
Все же стоит отделить 2 класса плагинов:

— Базовое расширение (jquery.pngfix, jquery.keyboard, jquery.corner....)
они реализую базовые часто нужные функции для реализации разнообразных плюшечек

— Плюшечки
всякие подсказки, слайдеры, кнопочки и формочки, собственно то что является дизайном и интерефейсом сайта.

Они в разных проектах часто (чтобы было удобно) сильно отличаются.

=> Есть два пути
1) Изначально написать то что нужно

2) Найти что-то похожее ( и это может очень много времени занять), разбираться в чужом коде, исправлять баги автора, переписать почти все, исправить опять баги, и получить недоделанное первое с багами за намного больше времени….
–2
Kasheftin #
Мне понравился вид подсказок. Буду использовать на одном проекте. Спасибо.
–1
Isis #
Безусловно в избранное
+12
aubt #
на оф. сайте если наводить на checkout qtop, а потом на появившуюся подсказку и затем обратно — будет весьма веселое мигание. это за 5 секунд тестирования. т.е. авторы не поставили .stop() и не сделали throtting исчезания, выпустили глючную хуиту и наверняка будут долго гореть в аду, как и все те, кто вывел это на главную.
0
morph #
пардон, промазал мышкой, хотел плюсануть.

видимо да, глюков у плагина хватает, но критичные для себя я уже исправил и доволен.
–1
developer #
жду в студию самописное УГ, лишенное всех недостатков. Обещаю критически посмотреть и оценить.

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