logo


home map contact


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

Opera, the fastest and most secure web browser     Spread Firefox Affiliate Button

javascript tooltip (всплывающая подсказка)

Всплывающая подсказка - довольно важный элемент оформления современного web сайта. А если ее еще красиво оформить и не злоупотреблять применением...

Перейду сразу к делу:
var d = document;
var offsetfromcursorY=15 // y offset of tooltip
var ie=d.all && !window.opera;
var ns6=d.getElementById && !d.all;
var tipobj,op;
		
function tooltip(el,txt) {
	tipobj=d.getElementById('mess');
	tipobj.innerHTML = txt;
	op = 0.1;	
	tipobj.style.opacity = op; 
	tipobj.style.visibility="visible";
	el.onmousemove=positiontip;
	appear();
}

function hide_info(el) {
	d.getElementById('mess').style.visibility='hidden';
	el.onmousemove='';
}

function ietruebody(){
return (d.compatMode && d.compatMode!="BackCompat")? d.documentElement : d.body
}

function positiontip(e) {
	var curX=(ns6)?e.pageX : event.clientX+ietruebody().scrollLeft;
	var curY=(ns6)?e.pageY : event.clientY+ietruebody().scrollTop;
	var winwidth=ie? ietruebody().clientWidth : window.innerWidth-20
	var winheight=ie? ietruebody().clientHeight : window.innerHeight-20
	
	var rightedge=ie? winwidth-event.clientX : winwidth-e.clientX;
	var bottomedge=ie? winheight-event.clientY-offsetfromcursorY : winheight-e.clientY-offsetfromcursorY;

	if (rightedge < tipobj.offsetWidth)	tipobj.style.left=curX-tipobj.offsetWidth+"px";
	else tipobj.style.left=curX+"px";

	if (bottomedge < tipobj.offsetHeight) tipobj.style.top=curY-tipobj.offsetHeight-offsetfromcursorY+"px"
	else tipobj.style.top=curY+offsetfromcursorY+"px";
}

function appear() {	
	if(op < 1) {
		op += 0.1;
		tipobj.style.opacity = op;
		tipobj.style.filter = 'alpha(opacity='+op*100+')';
		t = setTimeout('appear()', 30);
	}
}
В теле страницы должен присутствовать div с visibility="hidden" и position="absolute". Конечно, его можно создавать динамически, но это я оставляю на ваше усмотрение, как, собственно, и его оформление. Использовать tooltip нужно так:
<h2 onmouseover="tooltip(this,'Это просто пример всплывающей<br /> подсказки JavaScript!')" onmouseout="hide_info(this)">
It is just JavaScript Tooltip example!</h2>
Разберем немного javascript код:
  • функция tooltip собственно, вызывает появление подсказки, в качестве параметров принимает элемент, вызвавший tooltip и текст подсказки
  • функция hide_info скрывает tooltip
  • функция ietruebody нужна для того, чтобы учесть кривизну IE разных версий
  • функция positiontip позиционирует tooltip во время движения мыши над целевым объектом
  • функция appear обеспечивает плавное появление подсказки

пример

наведите мышь на текст ниже

It is just JavaScript Tooltip example!


Применять можно абсолютно ко всем элементам. Заметьте также, что ничего не мешает нам использовать html теги в тексте подсказки.



Комментарии:



kee90@mail.ru    19.10.08 13:56

Класс! Только мне что-то не удаётся вставить себе на страницу. Можно чуть подоходчивее? Для умов средних? :-)




iCanary    10.11.08 10:14

классная подсказочка, НО! как вставить ссылку в подсказку? у меня не получается.. портится вызов функции..




Andrey    12.11.08 17:48

2 iCanary Вставить-то ссылку можно (используй в ссылке вместо двойных кавычек одинарные) только какой от нее толк? Все равно мышкой не торкнешь ее! :-) Авторам статьи два балла за раскрытие статьи (можно было бы и по подробней написать).




anonymous    09.12.08 02:24

Автору статьи спасибо. И вообще ресурс очень хороший. Код понятный, поэтому самому разобрать принцип работы достаточно просто.




Salamandra    08.04.09 18:56

Всем салют. Я вот в создании сайтов на жвижке LDE новичёч, и вот какая у меня проблема. Я не знаю куда надо вписать этот скрипт? Я пользуюсь Dreamweaver CS3 т что-то получается, а вот куда скрепты устанавливать я ни как не могу понять( Если не трудно, то могли бы вы мне подробно рассказать что куда пихать?




anonymous    21.04.09 12:19

А зачем ты вообще полез создавать сайты не зная даже самый простых вещей?




froex    21.04.09 22:51

ИМХО, надо смотреть код этой страницы, если не знаете, как разместить что-то




someone    21.05.09 20:40

Хм. Скопировала .js, созала div как описывалось. Посказка появляется но не позицинируется относительно курсор мышки( Причем сама функция positiontip задействуется, но что-то ничего не меняет =(




mt    21.06.09 15:59

Спасибо огромное, все отлично работает :)




gaga    06.07.09 19:02

Непонятно, как использовать данный скрипт... Где и как выглядит элемент с id='mess'? У меня скрипт не работает, IE выдаёт ошибку, в остальных браузерах ничего не происходит.
Попытался разобраться как сделана эта подсказка на данной страничке, но и тут ничего не понял. Даже ту же самую функцию tooltip и загадочный элемент с id='mess' не смог найти. Можно ли дать скрипт данной подсказки просто в коде html без всяких подключений скриптов, чтобы можно было скопировать в браузере и вставить в файл с расширением html?




Arris    31.07.09 05:05

А если еще и на jQuery переписать - так вообще будет коротко.

Кстати, можно как-нибудь сделать, чтобы распознавался атрибут rel и по нему совершалось действие?

типа <h1 rel="tooltip"> ... <h1>




Pahen    30.12.09 02:17

Спасибо огромное отлично работает!! Супер...
Много что нашел на вашем сайте))

PS
Кому не ясно... id='mess' надо писать в Div...




Antony    31.12.09 03:50

Спасибо за пример. Использовал на своем сайте.
Правда в IE отображается не совсем так как надо, при позиционировании подсказки ее ширина уменьшается при достижении края элемента.




hellobody    15.01.10 00:24

Привет! Не работает перемещение подсказки. Подскажите в чем может быть причина?




hellobody    15.01.10 20:57

Юзать так!

<html>
<head>
<script type="text/javascript" src="nicetitle.js"></script>
<style type="text/css">
.block1 {
width: 200px;
background: #ccc;
padding: 5px;
padding-right: 20px;
border: solid 1px black;
float: left;
}
.block2 {
width: 200px;
background: #fc0;
padding: 5px;
border: solid 1px black;
float: left;
position: relative;
top: 40px;
left: -70px;
}
</style>
</head>
<body>

<h2 onmouseover="tooltip(this,'Hello!')" onmouseout="hide_info(this)">
It is just JavaScript Tooltip example!</h2>

<div class="block2" id="mess"></div>

</body>
</html>




Наблюдатель    10.02.10 13:10

скрипт который опубликован, неработоспособен в сафари и хроме между прочим. Подсказка-пример позиционируется не такой функцией :-)))))))




Наблюдатель    10.02.10 15:57

Перед применением каких то встроенных в хтмл объекты методов советую проверять их не таким образом: ( document.getElementById && !document.all ) или ( document.all && !window.opera ) или еще каким то образом, а проверять есть ли такой метод который вам нужен. Напрмер вот так:
var cursorX = e.pageX ? e.pageX : e.clientX + ietruebody().scrollLeft;

И странно что тут написано в одних местах переменная e в другом event в данном скрипте это одно и то же. Людей в заблуждение вводят




Alek Veritov    11.02.10 18:49

to Наблюдатель:
а какой функцией по вашему подсказка-пример позиционируется? Хоть бы в исходный код потрудились заглянуть прежде чем писать.
Следующий пост комментировать не осмелюсь, поскольку словосочетание "встроенные в хтмл объекты методы" никакого отношения к объективной реальности явно не имеет.
Посоветуйте еще что-нибудь для моей коллекции бреда ...




Flash    14.03.10 13:41

Народ у меня проблема с этим скриптом:
Если mess находится рядом(в коде) с вызывающим объктом, то все работает(но другие объекты перекрывают его), а если внизу перед </body>, то замещает собой вызывающий объект.
подскажите, что делать?




Flash    14.03.10 17:00

Все окей, разабрался! Спасибо за скрипт!




Саша    14.07.10 08:58

Работает очень хорошо
спасибо автору за скрипт




idkvik@gmail.com    16.10.10 23:04

Люди! Все Ваши комментарии посмотрел почитал:
попробую объяснить тому кто произнёс фразу "ЕЁ ВСЁ РАВНО НЕ ТОРКНЕШЬ" не двигай вслед за курсором и "торкнешь"....
А вообще-то советую!!! почитать здесь же div'ное окно и станет!!! ясно и понятно.
Спасибо автору.




Санек    21.10.10 13:58

Работает отлично! Хочется узнать как можно сделать на сайте чтобы эти всплывающие подсказки указывали что надо делать на сайте!?? т.е. НАПРИМЕР человек попал на сайт, и всплывающая подсказка указала на поле для "регистрациии", когда человек перешел на страницу регистрации такаяже подсказка указала что делать дальше!




toff    22.10.10 13:30

Все прикрасно работает!Если кто-то не соображает в html-програмировании,и руки не из того места откуда надо,то нечего заниматься созданием сайтов.Сначала учите язык!




Newpassible    08.01.11 12:03

При наведении на сам текст, вместо подсказки появляется новое окно с белым фоном, объясните, в чём проблема?! х)




Дмитрий    13.02.11 18:25

Но почему! когда помещаешь в подсказку кроме текста - html теги, происходит подергивание блока с подсказкой?




Виктор    13.02.11 19:21

Дмитрий,

На рабочий код!

http://snippy.ru/snippet/47/

Не мучайся с тем отродьем у которого куча недостатков с позиционированием и как ты сказал - Дергается титле ; (




***    14.02.11 23:09

<div Style="visibility: hidden; position: absolute" id="mess"></div>




Антон    11.05.11 14:44

Все работает. Спасибо.




Дмитрий    11.08.11 21:51

Спасибо за простой, понятный, работающий скрипт.




Paintmonster    11.10.11 09:16

Все отлично работает! Спасибо! Не разжевано, но хорошо!




Макс, do-zapravka.ru    19.10.11 21:19

Спасибо за отличную статью.
Все понятно и работает. Долго мучился, только здесь наконец-то нашел нормальный понятный пример, который удалось реализовать.




Андрей    30.10.11 15:21

Интересная статья! кстати если кому интересно есть еще способ на jQuery на http://sitemaker.x10.bz/articles.php?id=12




Юрий    08.11.11 06:53

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




Михаил    08.12.11 10:24

Спасибо огромное за скрипт. Все просто и понятно.






Если вам помогла или просто понравилась эта статья вы можете отблагодарить автора кликнув по рекламе. Спасибо!





комментировать:
прежде чем писать комментарий убедитесь, пожалуйста, что он не попадает в нижеследующие категории:
  • не стоит писать "я чайник, помогите ..." или "я начинающий, объясните ..." - уважайте себя! может вы и новичок, но ведь не тупой же! сами вполне способны во всем разобраться, тем более, что материал здесь изложен весьма доступно

  • не пишите вопросы типа "как мне сделать такую же менюху как наверху?", "куда вставлять этот код?", "как устроен интернет?" и т.д. - уважайте время автора!

  • комментарии вида "все, что здесь написано - бред" будут оставлены только если будут подписаны "я такой-то, разработчик сайта такого-то с посещаемостью 1000 хостов в день" и т.п. Если вы не согласны с чем-то - обоснуйте, напишите как правильно, а писать простые ругательства не надо, это не забор

прямые оскорбления кого бы то ни было будут удалятся!
здоровая критика приветствуется!



от кого:  

security picture