Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В. PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В. PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В. PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

HTML+CSS+JavaScript

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Позиция субитема меню относительно итема
 
 автор: Хулиган   (06.08.2006 в 01:10)   письмо автору
 
 

Сделал вертикальное меню. Один итем с субитемами выглядит так:

      <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 размер итема и подстроить в случае двустрочного итема позицию его субитемов?
Спасибо.

   
 
 автор: 12345   (06.08.2006 в 01:47)   письмо автору
 
   для: Хулиган   (06.08.2006 в 01:10)
 

Да, offsetHeight - высота любого элемента

   
 
 автор: Хулиган   (06.08.2006 в 02:45)   письмо автору
 
   для: 12345   (06.08.2006 в 01:47)
 

Среди испробованых были:
top
offsetTop
posTop
height
offsetHeight
posHeight
y
offsetY
posY

Все возвращают undefined.

   
 
 автор: 12345   (06.08.2006 в 03:42)   письмо автору
 
   для: Хулиган   (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> 

   
 
 автор: Хулиган   (06.08.2006 в 09:55)   письмо автору
 
   для: 12345   (06.08.2006 в 03:42)
 

Хм, вчера возвращало undefined, сегодня - высоту итема. Видимо, что-то не так делал.
Спасибо, всё сделал как хотел.

   
 
 автор: Хулиган   (07.09.2006 в 16:54)   письмо автору
 
   для: Хулиган   (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, а для передачи в качестве аргумента в функцию - нет.

   
 
 автор: AlexSol   (07.09.2006 в 17:08)   письмо автору
 
   для: Хулиган   (07.09.2006 в 16:54)
 

все прекрасно работает. именно ваш код.

   
 
 автор: Хулиган   (07.09.2006 в 17:38)   письмо автору
 
   для: AlexSol   (07.09.2006 в 17:08)
 

хочется ругаться самыми последними словами.
В оригинале функция, в которую передаётся параметр, называется sd(), в этом топике для понятности написал foo(), так вот если функцию переименовать в foo(), или fo(), или ss(), то оказывается работает. А вот sd() - ни в какую.

   
 
 автор: Хулиган   (07.09.2006 в 17:55)   письмо автору
 
   для: Хулиган   (07.09.2006 в 17:38)
 

Ещё вопрос в тему: как определить абсолютную позицию элемента?
offsetTop/offsetLeft выдают позицию относительно парента элемента, а надо относительно верхнего левого угла страницы.



<body>
  <table>
    <tr>
      <td>
        <input type=text id='edit'>
      </td>
    </tr>
  </table>
</body>


Можно ли определить абсолютные Top и Left input'a?

   
 
 автор: AlexSol   (07.09.2006 в 17:59)   письмо автору
 
   для: Хулиган   (07.09.2006 в 17:55)
 

может


alert(document/getElementById('edit').style.top);

а может и нет...

   
 
 автор: Хулиган   (07.09.2006 в 19:44)   письмо автору
 
   для: AlexSol   (07.09.2006 в 17:59)
 

это работает только если у элемента был указан стиль position:absolute, в остальных случаях возвращает null.
Может как-то рекурсивно от элемента вверх перебирать парентов, пока не доберешься до body, при этом суммируя все offset'ы. И в сумме будет абсолютная позиция.
Вот только как получить парента элемента, чтобы запросить его offset?

   
 
 автор: Padonak   (08.09.2006 в 00:09)   письмо автору
 
   для: Хулиган   (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> 

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования