|
|
|
| Сделал вертикальное меню. Один итем с субитемами выглядит так:
<dt onmouseover="javascript:onOver('smenu1');"
onmouseout="javascript:onOver();">
<a href="#">Полный перечень</a>
</dt>
<div id="smenu1" onmouseover="javascript:onOver('smenu1');" onmouseout="javascript:onOver();">
<ul>
<li><a href="#">Sub Menu 1.1</a></li>
<li><a href="#">Sub Menu 1.2</a></li>
<li><a href="#">Sub Menu 1.3</a></li>
</ul>
</div>
|
Проблема с позиционированием субитемов относительно итема. Они подстраиваются по нижнему краю итема Если итем в одну строку, то всё нормально, учитываю высоту итема и порядок. Если итем в две строки, то субитемы получаются ниже положеного на высоту строки.
Позицию устанавливаю стилями:
#menu div {
position: absolute;
z-index: 10;
left: 204px;
margin-top: -21px;
width: 120px;
}
|
Можно ли определить на js размер итема и подстроить в случае двустрочного итема позицию его субитемов?
Спасибо. | |
|
|
|
|
|
|
|
для: Хулиган
(06.08.2006 в 01:10)
| | Да, offsetHeight - высота любого элемента | |
|
|
|
|
|
|
|
для: 12345
(06.08.2006 в 01:47)
| | Среди испробованых были:
top
offsetTop
posTop
height
offsetHeight
posHeight
y
offsetY
posY
Все возвращают undefined. | |
|
|
|
|
|
|
|
для: Хулиган
(06.08.2006 в 02:45)
| |
<ul>
<li><a href="#" onmouseover=alert([this.offsetHeight,this.offsetWidth])>Sub Menu 1.1</a></li>
<li><a href="#">Sub Menu 1.2</a></li>
<li><a href="#">Sub Menu 1.3</a></li>
</ul>
|
| |
|
|
|
|
|
|
|
для: 12345
(06.08.2006 в 03:42)
| | Хм, вчера возвращало undefined, сегодня - высоту итема. Видимо, что-то не так делал.
Спасибо, всё сделал как хотел. | |
|
|
|
|
|
|
|
для: Хулиган
(06.08.2006 в 09:55)
| | Ещё раз возвращаюсь к определению позиции. В связи с непонятностью поведения js.
Имеется такое:
<input type=button value='v' onClick="alert(this.offsetLeft)">
|
работает исправно и выдает offset, равный 215.
Теперь делаю так:
<input type=button value='v' onClick="foo(this.offsetLeft)">
<script>
function foo(x){
alert(x);
}
</script>
|
Не работает и выдает ошибку: "Объект не поддерживает это свойство или метод".
Что за ерунда такая?
Т.е. получается, что offset'ом я могу воспользоваться только для того, чтобы вывести его в alert, а для передачи в качестве аргумента в функцию - нет. | |
|
|
|
|
|
|
|
для: Хулиган
(07.09.2006 в 16:54)
| | все прекрасно работает. именно ваш код. | |
|
|
|
|
|
|
|
для: AlexSol
(07.09.2006 в 17:08)
| | хочется ругаться самыми последними словами.
В оригинале функция, в которую передаётся параметр, называется sd(), в этом топике для понятности написал foo(), так вот если функцию переименовать в foo(), или fo(), или ss(), то оказывается работает. А вот sd() - ни в какую. | |
|
|
|
|
|
|
|
для: Хулиган
(07.09.2006 в 17:38)
| | Ещё вопрос в тему: как определить абсолютную позицию элемента?
offsetTop/offsetLeft выдают позицию относительно парента элемента, а надо относительно верхнего левого угла страницы.
<body>
<table>
<tr>
<td>
<input type=text id='edit'>
</td>
</tr>
</table>
</body>
|
Можно ли определить абсолютные Top и Left input'a? | |
|
|
|
|
|
|
|
для: Хулиган
(07.09.2006 в 17:55)
| | может
alert(document/getElementById('edit').style.top);
|
а может и нет... | |
|
|
|
|
|
|
|
для: AlexSol
(07.09.2006 в 17:59)
| | это работает только если у элемента был указан стиль position:absolute, в остальных случаях возвращает null.
Может как-то рекурсивно от элемента вверх перебирать парентов, пока не доберешься до body, при этом суммируя все offset'ы. И в сумме будет абсолютная позиция.
Вот только как получить парента элемента, чтобы запросить его offset? | |
|
|
|
|
|
|
|
для: Хулиган
(07.09.2006 в 19:44)
| | такое тебе не подойдет?
<body>
<table width="100%" cellpadding="0" cellspacing="0" style="height:100%;">
<tr>
<td style="text-align:center;">
<input type=text id='edit'>
<br /><br /><br /><br /><br />
<a href="#null" onfocus="blur()" onclick="showRect('edit')">voodoo magic</a>
</td>
</tr>
</table>
<script language="JavaScript" type="text/javascript">
function showRect(what){
if(navigator.userAgent.indexOf("MSIE") != -1){
var thisTop = document.getElementById(what).getBoundingClientRect().top
var thisLeft = document.getElementById(what).getBoundingClientRect().left
alert("top coord: "+thisTop+"px\nleft coord: "+thisLeft+"px");
}
else{
alert("AXTUNG!\nthis works in IE only!");
}
}
</script>
</body>
|
| |
|
|
|