Всплывающая подсказка (альтернатива title)
<script>
function getBrowserWidth()
{
var x = 0;
if (self.innerHeight)
{
x = self.innerWidth;
}
else if (document.documentElement && document.documentElement.clientHeight)
{
x = document.documentElement.clientWidth;
}
else if (document.body)
{
x = document.body.clientWidth;
}
return x;
}
//Наведем на объект
function disShow(what)
{
//Позиция появляющегося элемента
posX = $(what).offsetLeft;
posY = $(what).offsetTop;
bWidth = getBrowserWidth();
//Если уходит за край экрана - уменьшаем
if(posX + 200 >= bWidth + 20)
posX = $(what).offsetLeft-140;
//Стилизуем всплывающий элемент
$(help).style.left = posX + 20 + 'px';
$(help).style.top = posY + 40 + 'px';
$(help).style.display = 'block';
//Наполняем содержанием подсказку
$(help).innerHTML = $(what).getAttribute("dis");
$(help).setAttribute("what",what.id);
//Выделяем первоначальный объект на котором лежит подсказка
$(what).innerHTML = $(what).getAttribute("dis");
}
//потеря побъектом курсора
function disHide(what)
{
//Прячим подсказку
$(help).style.display = 'none';
//оставляем подсказке ид объекта на случай, если мы наведем мышкой на подсказу
$(help).setAttribute('what',what.id);
//Снимаем выделение первоначального объекта с подсказкой
$(what).innerHTML = '';
}
//Наведем на подсказку
function disOn()
{
//Получаем имя прежнего объекта
what = $(help).getAttribute("what");
//Так как мы не убрали курсор с обекта, а перевели его на подсказку то возобновляем выделение объекта
$(what).innerHTML = $(help).innerHTML;
//Показываем подсказку
$(help).style.display = 'block';
}
//Потеря подсказкой курсора
function disOff()
{
//Получаем имя прежнего объекта
what = $(help).getAttribute("what");
//Прячим подсказку
$(help).style.display = 'none';
//Снимаем выделение первоначального объекта с подсказкой
$(what).innerHTML = '';
}
function $( el )
{
return typeof el == 'string' ? document.getElementById(el) : el;
}
</script>
<style>
body {padding:0px;margin:0px;}
.item {width:100px;height:50px;background:green;border:2px solid black;}
#help {display:none;background:grey;border:2px solid black;width:200px;position:absolute;}
</style>
<body>
<div class="item" dis="body" id="div1" onMouseOver="disShow(this);" onMouseOut="disHide(this);"></div>
<div style="position:absolute;right:0px;" class="item" dis="skirt" id="div2" onMouseOver="disShow(this);" onMouseOut="disHide(this);"></div>
<div id="help" onMouseOver="disOn();" onMouseOut="disOff();"></div>
</body>
можно ли и нужно ли оптимизировать? думаю, что нужно.. Спасибо за понимание. пс. нет ли у кого нить рабочего example этого скрипта (http://www.noinimod.ru/52/) |
Нужно сделать так, чтобы при перемещении мышки над объектом подсказка тоже двигалась за курсором.
+ я бы сделал сохранение текущего титла не в атрибут, а в переменную-буфер. |
по поводу переменной буфер. это просто var прописать, тогда она будет и вне функции, как я понял.
а с перемещением я думаю будут траблы, тк она скакать будет когда на саму подсказку наводишь \ сводишь с нее мышку.. |
С перемещением никаких трабл не возникает, просто меняйте left/top у элемента при mousemove элемента, на которого наведена мышь. У меня например это реализовано так:
this.onmousemove = function (ev) {
ev = ev || window.event;
_hint = document.getElementById('hint');
_hint.style.top = ev.pageY + 10;
_hint.style.left = ev.pageX + 10;
}
|
<script>
var theWidth, theHeight;
// Window dimensions:
if (window.innerWidth)
{
theWidth=window.innerWidth;
}
else if (document.documentElement && document.documentElement.clientWidth)
{
theWidth=document.documentElement.clientWidth;
}
else if (document.body)
{
theWidth=document.body.clientWidth;
}
if (window.innerHeight)
{
theHeight=window.innerHeight;
}
else if (document.documentElement && document.documentElement.clientHeight)
{
theHeight=document.documentElement.clientHeight;
}
else if (document.body)
{
theHeight=document.body.clientHeight;
}
//Наведем на объект
function disShow(what,ev)
{
ev = ev || window.event;
//Наполняем содержанием подсказку
$(help).innerHTML = $(what).getAttribute("dis");
//Позиция появляющегося элемента
posX = ev.clientX;
posY = ev.clientY;
//украшаем размеры окна ШИРИНА
if(posX + 200 > theWidth)
$(help).style.right = 10 + 'px';
else
$(help).style.left = posX - 20 + 'px';
if(posX - 20 < 10)
$(help).style.left = 10 + 'px';
//Стилизуем всплывающий элемент
$(help).style.display = 'block';
$(help).style.top = posY +20 + 'px';
//Наполняем содержанием подсказку
$(help).innerHTML = $(what).getAttribute("dis");
//Выделяем первоначальный объект на котором лежит подсказка
$(what).style.border = '2px solid red';
}
//потеря побъектом курсора
function disHide(what)
{
//Прячим подсказку
$(help).style.display = 'none';
//Снимаем выделение первоначального объекта с подсказкой
$(what).style.border = '2px solid black';
$(help).style.removeProperty('left');
$(help).style.removeProperty('right');
$(help).style.removeProperty('top');
$(help).style.removeProperty('bottom');
}
function $( el )
{
return typeof el == 'string' ? document.getElementById(el) : el;
}
</script>
<style>
body {padding:0px;margin:0px;}
.item {width:100px;height:50px;background:green;border:2px solid black;padding:5px;}
#help {display:none;background:grey;border:2px solid black;width:200px;position:absolute;padding:2px;}
</style>
<body>
<div class="item" dis="FullPlate Armor" id="div1" onMouseMove="disShow(this,event);" onMouseOut="disHide(this);">item1</div>
<div style="position:absolute;right:0px;" class="item" dis="Fallen Sword" id="div2" onMouseMove="disShow(this,event);" onMouseOut="disHide(this);">item2</div>
<div class="item" dis="FullPlate Armor" id="div1" onMouseMove="disShow(this,event);" onMouseOut="disHide(this);">item1</div>
<div style="position:absolute;right:0px;" class="item" dis="Fallen Sword" id="div2" onMouseMove="disShow(this,event);" onMouseOut="disHide(this);">item2</div>
<div class="item" dis="FullPlate Armor" id="div1" onMouseMove="disShow(this,event);" onMouseOut="disHide(this);">item1</div>
<div style="position:absolute;right:0px;" class="item" dis="Fallen Sword" id="div2" onMouseMove="disShow(this,event);" onMouseOut="disHide(this);">item2</div>
<div id="help" ></div>
</body>
доработан. актуальный вопрос про исходники , образцы (http://www.noinimod.ru/52/) - я так и не смог заставить работать =\ |
чтото здесь туго с style.top если подсказка создает вертикальный скролл.
я убрал странный сложный if про высоту и все вроде как то заработало. но меня смущает то, что после resize окна, у меня в скрипте переменные theWidth и theHeight не меняюцца. |
ап
|
| Часовой пояс GMT +3, время: 03:59. |