Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 03.04.2008, 13:11
Новичок на форуме
Отправить личное сообщение для AniStark Посмотреть профиль Найти все сообщения от AniStark
 
Регистрация: 03.04.2008
Сообщений: 8

выпадающее меню
Прикрутил себе на сайт выпадающее меню, но сбиваются координаты при изменении окна браузера =( (т.е. когда в браузере открываешь с боку закладки или избранное, выпадающие менюшки так сказать выпадают не там где нужно=\ )

помоги пожалуйста разобраться с этим:confused: !
Ответить с цитированием
  #2 (permalink)  
Старый 03.04.2008, 13:31
Профессор
Отправить личное сообщение для Dmitry A. Soshnikov Посмотреть профиль Найти все сообщения от Dmitry A. Soshnikov
 
Регистрация: 25.02.2008
Сообщений: 707

AniStark, пересчитывать координаты каждый раз при показе меню, а не единожды при инициализации.
Ответить с цитированием
  #3 (permalink)  
Старый 03.04.2008, 13:39
Новичок на форуме
Отправить личное сообщение для AniStark Посмотреть профиль Найти все сообщения от AniStark
 
Регистрация: 03.04.2008
Сообщений: 8

честно говоря в JS очень плохо разбираюсь, не могли бы вы подсказать по подробнее?!
Ответить с цитированием
  #4 (permalink)  
Старый 03.04.2008, 15:17
Профессор
Отправить личное сообщение для Dmitry A. Soshnikov Посмотреть профиль Найти все сообщения от Dmitry A. Soshnikov
 
Регистрация: 25.02.2008
Сообщений: 707

AniStark,

- каждое меню представляется скрытым div'ом с абсолютным позиционированием (свойства стиля: display: none; position: absolute;);

- при определенном событии (onclick, onmouseover - не важно) этот div (меню) показывается и меняются значения свойств его стиля left (X координата) и top (Y координата) на нужные;

- "нужные значения координат" во втором пункте - это X и Y (left и top) координаты объекта, которому принадлежит меню.

Вот пример (в частности - как вычислять координаты объектов):

<html>
   <head>
      <title>This Just a test</title>
      <style type="text/css">
        .menu {
          position: absolute;
          width: 100px;
          height: 200px;
          background: #EEE;
          border: 1px solid #555;
          padding: 5px;
          display: none;
        }
      </style>
      <script type="text/javascript">
        
        function init() {
          document.getElementById('test').onclick = function() {
            document.getElementById('menu1').style.top = getPosY(this) + (this.offsetHeight || this.style.height) + 'px';
            document.getElementById('menu1').style.left = getPosX(this) + 'px';
            document.getElementById('menu1').style.display = 'block';
            return true;
          };
          return true;
        }

        function getPosX(obj) {
          var curleft = 0;
          if (obj.offsetParent) {
            while (obj.offsetParent) {
              curleft += obj.offsetLeft;
              obj = obj.offsetParent;
            }
          }
          return curleft;
        }

        function getPosY(obj) {
          var curtop = 0;
          if (obj.offsetParent) {
            while (obj.offsetParent) {
              curtop += obj.offsetTop;
              obj = obj.offsetParent;
            }
          }
          return curtop;
        }

      </script>
   </head>
   <body onload="init()">
     <div class="menu" id="menu1">
       <li> point 1
       <li> point 2
       <li> point 3
       <li> point 4
       <li> point 5
     </div>
     <input type="text" id="test" />
   </body>
</html>
Ответить с цитированием
  #5 (permalink)  
Старый 03.04.2008, 16:35
Новичок на форуме
Отправить личное сообщение для AniStark Посмотреть профиль Найти все сообщения от AniStark
 
Регистрация: 03.04.2008
Сообщений: 8

потыкавшись сомостоятельно исправить не получилось ...

вот сам скрипт, он вынесен в отдельный файл menu.js:
<!--
function mouseOverPopup (obj) {
obj.style.backgroundColor='#74B3D3';
obj.className='';
}
function mouseOutPopup (obj) {
obj.style.backgroundColor='#fafafa'
obj.className='p_menu';
}
function MM_reloadPage(init) { if (init==true) with (navigator) {if ((appName=="Netscape")&&(parseInt(appVersion)==4)) {
document.MM_pgW=innerWidth; document.MM_pgH=innerHeight; onresize=MM_reloadPage; }}
else if (innerWidth!=document.MM_pgW || innerHeight!=document.MM_pgH) location.reload();
}
MM_reloadPage(true);
function MM_findObj(n, d) { var p,i,x; if(!d) d=document; if((p=n.indexOf("?"))>0&&parent.frames.length) {
d=parent.frames[n.substring(p+1)].document; n=n.substring(0,p);}
if(!(x=d[n])&&d.all) x=d.all[n]; for (i=0;!x&&i<d.forms.length;i++) x=d.forms[i][n];
for(i=0;!x&&d.layers&&i<d.layers.length;i++) x=MM_findObj(n,d.layers[i].document);
if(!x && document.getElementById) x=document.getElementById(n); return x;
}
function P7_autoLayers() { var g,b,k,f,args=P7_autoLayers.arguments;
var a = parseInt(args[0]);if(isNaN(a))a=0;
if(!document.p7setc) {p7c=new Array();document.p7setc=true;
for (var u=0;u<10;u++) {p7c[u] = new Array();}}
for(k=0; k<p7c[a].length; k++) {
if((g=MM_findObj(p7c[a][k]))!=null) {
b=(document.layers)?g:g.style;b.visibility="hidden";}}
for(k=1; k<args.length; k++) {
if((g=MM_findObj(args[k])) != null) {
b=(document.layers)?g:g.style;b.visibility="visible";f=false;
for(j=0;j<p7c[a].length;j++) {
if(args[k]==p7c[a][j]) {f=true;}}
if(!f) {p7c[a][p7c[a].length++]=args[k];}}}
}
//-->


и вот то что пренадлежит меню в html коде:

<head><SCRIPT language=javascript src="menu.js"></SCRIPT>
</head>
<body><table border="0" cellspacing="0" cellpadding="0">
<td><a href="link3.htm" onmouseover=P7_autoLayers(0)><img src="img/k1.gif"  border="0" onmouseover="this.src=menu[0].src" 

onmouseout="this.src='img/k1.gif'"></a>
</td>
<td><a href="link1.htm" ONMOUSEOVER=P7_autoLayers(0,'msa','Closer')><img src="img/k2.gif"  

border="0"onmouseover="this.src=menu[1].src" onmouseout="this.src='img/k2.gif'"></a>
</td>
<td><a href="link1.htm" ONMOUSEOVER=P7_autoLayers(0,'msd','Closer')><img src="img/k3.gif"  

border="0"onmouseover="this.src=menu[2].src" onmouseout="this.src='img/k3.gif'"></a>
</td>
<td><a href="link3.htm" onmouseover=P7_autoLayers(0)><img src="img/k4.gif"  border="0"onmouseover="this.src=menu[3].src" 

onmouseout="this.src='img/k4.gif'"></a>
</td>
<td><a href="link3.htm" onmouseover=P7_autoLayers(0)><img src="img/k5.gif"  border="0"onmouseover="this.src=menu[4].src" 

onmouseout="this.src='img/k5.gif'"></a>
</td>
<td class="td1" width="100%" class="td1" onmouseover=P7_autoLayers(0)>&nbsp;
</td>
</tr>
</table>

<div id=msa style="Z-INDEX: 9; LEFT: 223px; VISIBILITY: hidden; WIDTH: 80px; POSITION:absolute; TOP: 146px; HEIGHT: 45px">
<table width=90 border=0 bgcolor=#0199CC><tr><td><a href="#">Состав</a></td></tr>
<tr><td><a href="#">История</a></td></tr><tr><td><a href="#">Поля</a></td></tr></table></div>

<div id=msd style="Z-INDEX: 9; LEFT: 313px; VISIBILITY: hidden; WIDTH: 109px; POSITION:absolute; TOP: 146px; HEIGHT: 45px">
<table width=109 border=0 bgcolor=#0199CC><tr><td><a href="#">Бамбардиры</a></td></tr>
<tr><td><a href="#">Таблица</a></td></tr><tr><td><a href="#">Остальное</a></td></tr></table></div>
</body>


я конечно, не много лишнего взял, но постарался ни чего не упустить)

если у вас есть возможность подскажите, что нужно исправить, чтоб менюшка коректно работала:confused: ?!
Ответить с цитированием
  #6 (permalink)  
Старый 03.04.2008, 19:08
Профессор
Отправить личное сообщение для lancer Посмотреть профиль Найти все сообщения от lancer
 
Регистрация: 30.01.2008
Сообщений: 230

AniStark, а Вас и не получится. Чтобы понимать, нужно написать это меню самому. А пока что нашли в инете дурацкое и длинное решение на таблицах и пытаетесь сию жесть вразуметь.
Ответить с цитированием
  #7 (permalink)  
Старый 04.04.2008, 01:24
Интересующийся
Отправить личное сообщение для SelenIT Посмотреть профиль Найти все сообщения от SelenIT
 
Регистрация: 22.03.2008
Сообщений: 15

AniStark, этому решению никак не меньше 9-10 лет. Те браузеры, под которые оно затачивалось, давно вымерли - вместе с соотв. техникой верстки.

В наши дни принято верстать меню вложенными списками. Тогда в простейшем случае достаточно указать для пунктов верхнего уровня position:relative, для вложенного списка position: absolute; left: 0; top: <высота_меню> (для гориз. меню, для вертикального - top: 0, left: <ширина>) и по onmouseover/onmouseout на LI менять его display. Ничего пересчитывать не надо, координаты и так привязываются к родительскому элементу. А то можно и вовсе одним CSS обойтись :-).
Ответить с цитированием
  #8 (permalink)  
Старый 04.04.2008, 11:35
Новичок на форуме
Отправить личное сообщение для AniStark Посмотреть профиль Найти все сообщения от AniStark
 
Регистрация: 03.04.2008
Сообщений: 8

lancer,понимать мне это не нужно, во всяком случае пока не когда понимать, мне необходимо найти просто решение для меню, к сожалению в инете ни чего достойней найти не смог.


SelenIT,не могли бы вы дать ссылку на код похожего, но более современного меню.

Сам написать не смогу, так как знаю js очень поверхностно.

ЗЫ необходимо вертикальное меню.

Последний раз редактировалось AniStark, 04.04.2008 в 11:39. Причина: добавил
Ответить с цитированием
  #9 (permalink)  
Старый 08.04.2008, 12:09
Профессор
Отправить личное сообщение для tenshi Посмотреть профиль Найти все сообщения от tenshi
 
Регистрация: 20.03.2008
Сообщений: 1,183

не задавай ни left, ни top, а рули margin-left и margin-top.
Ответить с цитированием
  #10 (permalink)  
Старый 11.04.2008, 14:13
Новичок на форуме
Отправить личное сообщение для AniStark Посмотреть профиль Найти все сообщения от AniStark
 
Регистрация: 03.04.2008
Сообщений: 8

tenshi,
спасибо! разобрался как делать с помощью CSS.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Выпадающее меню SunYang Общие вопросы Javascript 3 16.04.2009 22:18
Проблемы с меню на JS SeeD Общие вопросы Javascript 5 21.11.2008 19:44
помогите с меню Ribt Общие вопросы Javascript 0 20.09.2008 08:11
Выпадающее меню на css и javascript Jackky Общие вопросы Javascript 3 13.09.2008 18:30
Помогите сделать простое меню debugger Элементы интерфейса 1 09.09.2008 23:14