Простая всплывающая подсказка для существующих и динамически добавленых элементов на Jquery 1.4
Значит начну с CSS:
.tooltip {position: absolute;
z-index: 5000;/*эта штука не обязательна, но и не мешает :)*/
top: 0; left: 0;/*задаем начальную позицию*/
max-width: 220px;/*произвольная ширина подсказки не больше 220px*/
margin: 0; padding: 0;/*эт важная штука, поверте*/
display: none;/*и скрываем, она же должна появляться*/}
/*А далее настройки для тега внутри tooltip'а*/
.tooltip div {margin: 0; padding: 2px 5px; font-family: "Times New Roman"; font-size: 16px; font-weight: bolder; line-height: 1.08em; color: white/*вот этот тег можно менять как хочештся*/}
Далее скрипт производитель:
$(function(){
$('<div class="tooltip"></div>').appendTo('body');/*Здесь создается DIV главный, в файле CSS он display:none вместе с его содержимым он не покажется раньше времени*/
var eltooltip = $('.help'),/*тут выбираем все объекты в которых есть, заранее расставленый класс .help, не забудте также расставить TITLE с текстом подсказки (ниже будет пример тега, сами всё поймёте)*/
tooltip = $('div.tooltip'),/*Заносим подсказку в перименную*/
title;/*пустая переменная для текста подсказки(временного хранения)*/
eltooltip.live('mouseenter', function(){/*при наведении мыши*/
title = $(this).attr('title');/*Забираем у элемента TITLE*/
$(this).attr('title','');/*Стираем текст из title*/
tooltip.html('<div>'+title+'</div>').css('opacity', '0.7');/*Вставляем DIV с текстом подсказки*/
$(this).mousemove(function(e){/*при движении мышки*/
tooltip.show().css({left: e.pageX, top: e.pageY+25});/*появляется подсказка и позиционируется по местонахождению курсора мышки*/
});
});
eltooltip.live('mouseleave', function(){/*передвигаем курсор за пределы курентного элемента*/
tooltip.empty().hide();/*убираем подсказку*/
$(this).attr('title', title);/* и возвращаем элементу текст из его TITLE*/
});
/*И в дополнение*/
eltooltip.live('click', function(){/*если кто кликнет на объект*/
tooltip.fadeOut('slow');/*опять таки подсказка исчезает :)*/
});
});
А теперь пример HTML элемента, при наведении на который, подсказка появится
<div class="help" title="Я подсказка, вот она я, ку-ку :)">Наведи на меня курсор</div>
Вот и всё!
Работает на всех популярных браузерах, на счёт IE6 и IE8 незнаю, а 7-я версия работает нормально.
|
Код слабо читаемый.. Поправить слабо?
Подредактировал, сейчас читается лучше
Вопрос на засыпку. Работает ли подсказка если title будет не в самом высоком элементе?
Работает на всех тегах, в которых есть class="help" и title="с текстом". Или я не правильно понял вопрос
Да, я уже сам прочитал как работает live. через closest()
На счёт Apple Safari последнюю версию качнул для винды, если быстро мышку туда-сюда водить по тегам с подсказками, Сафари выпадает(выключается), остальные выдерживают интенсивную работу. А Опера держится как будто для всплывающих подсказок создана скрипт работает отлично...
Промежуточные итоги тестирования: FF, GChrome, Opera работают даже если дополнительных эффектов добавить, таких как в примере и ещё slideUp/slideDown и свои с помощью animate() (версии тестируемых браузеров последние)
кстати, судя по алгоритму closest в jQuery то подсказка будет выводится только последняя
Т.е. выведется подсказка2 (как для подсказок и задумано), но в других случаях .live будет не правильно отрабатывать механизм, задуманный для .live.
Зачем такая конструкция тегов?
А если один див смещён относительно другово, всё отлично...
Но можно и так сделать:
Неплохо, но код написан как-то не в jquery стиле
Например вместо
$('
').appendTo('body');
").class("tooltip").appendTo("body");можно бы
$("
итд.
Всё без этого работает нормально, у каждого есть возможность, отталкиваясь от моей идеи, усовершенствовать код как угодно...
Можно и так:
var offsetY = 10;
var offsetX = 7;
$(".check").hover(function(evt) {
$("
").css("top", evt.pageY+offsetY).css("left", evt.pageX+offsetX).appendTo("body");
}, function() {
$("#check_files_hint").remove();
});
$(".check").mousemove(function(evt) {
$("#check_files_hint").css("top", evt.pageY+offsetY).css("left", evt.pageX+offsetX);
});
CSS:
#check_files_hint{
width: 300px;
text-align: justify;
position: absolute;
padding: 0.5em;
background-color: #ffff80;
font-family: Verdana, Geneva, Arial, Helvetica, sans-serif;
font-size: 12px;
}
Тогда придётся для каждого элемента писать такой код, а если подсказки нужны для 40-ка элементов?... или для всех подсказок один и тот же текст?
А про динамически добавленые элементы я вообще молчу...
Немного обновил код в части:
Вместо удаления атрибута, подсмотрел у одного разработчика, просто затираем его, чтоб текста не было в title
Roksa wodzislaw slaski
Roksa dzielnice
Отправить комментарий
Приветствуются комментарии:Для остальных вопросов и обсуждений есть форум.