Форум сетевых администраторов
Показаны 13 сообщений на этой странице

Форум сетевых администраторов (http://netadmin.ws/forum/index.php)
- Java/Java Scripts (http://netadmin.ws/forum/forumdisplay.php?forumid=9)
-- Вопрос по выпадающему меню.... (http://netadmin.ws/forum/showthread.php?threadid=7864)


Помещено bes 15-02-2004 в 01:16:

Вопрос по выпадающему меню....

значится так есть скрипт который при наводе мышкой на кнопку заставляет из кнопки (вниз) выезжать менюшке..... но вот только при разных разрешениях экрана менюшка выпадает по разному.... при моем 1280х960 оно выпадает правильно... а допустим при 800х600 смещается сильно влево.... может кто нибудь знает как его заставлять выпадать при всех разрешениях экрана правильно.... (пример в атаче) вот на нем меню не в том месте должно быть под кнопкой...
сам скрипт написан на джаве.... подскажите плиз что нужно сделать???...


Помещено polo 15-02-2004 в 13:08:

код скрипта давай.

__________________
Всегда есть решение.


Помещено RaZEr 15-02-2004 в 13:13:

Что-то так старательно закрашивалось на скрине, что вообще не очень понятно почему тебе кто-то должен помогать если нет даже доверия.

__________________
The time was broken ...


Помещено bes 15-02-2004 в 19:40:

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

код скрипта:

PHP:


function CreateMenu(n,x,y,w,str,url,parent)
{
  var 
s,lt;
  if (
ns4)
  {
    
lt="LAYER";
  }
  else
  {
    
lt="DIV";
  }
  
  if (
ns4)
  {
    if (
parent==null || parent=="")
    {
      
s='<'+lt+ ' id=menu'+n+' left='+x+' top='+y+' width='+w+' visibility=hide onmouseover="showMenus('menu'+n+'','on','')" onmouseout="killMenus('menu'+n+'')">';
    }
    else
    {
      
s='<'+lt+' id=menu'+n+' left='+x+' top='+y+' width='+w+' visibility=hide onmouseover="showMenus('menu'+n+','+parent+'','on','')" onmouseout="killMenus('menu'+n+','+parent+'')">';
    }
  }
  else
  {
    
s='<'+lt+' id=menu'+n+' style="VISIBILITY: hidden; Z-INDEX: '+n+'; POSITION: absolute; LEFT: '+x+'px; TOP: '+y+'px; WIDTH: '+w+'px;">';
  }
  
s+='<table border=1 bordercolor="1B4D1B" cellspacing=0 cellpadding=1 >';
  var 
mitems = str.split('|');
  var 
urls = url.split('|');
  for (
i=0;i<mitems.length;i++)
  {
    
turl=String(urls[i]);
    
mtype=String(urls[i]).substring(0,4);
    if (
parent==null || parent=="")
    {
      
s+='<tr bgcolor="#1F581F" height=20><td onmouseover="this.style. backgroundColor='#112F11';showMenus('menu'+n+'
','on','')" onmouseout="this.style. backgroundColor='#1F581F';killMenus('menu'+n+'
')"><a href="'+turl+'" class="KlanMenu"><div style="width:100%"><img src="images/gan.gif" width=12 height=12>&nbsp'+mitems[i]+'&nbsp;</div></a>';
    }
    else
    {
      
s+='<tr><td onmouseover="this.style. backgroundColor='#000000';showMenus(''+parent+'
,menu'+n+'','on','')" onmouseout="this.style. backgroundColor='#000000';killMenus(''+parent+'
,menu'+n+'')"><a href="'+turl+'" class="KlanMenu"><div style="width:100%">&nbsp;<img src="" width=6 height=6>&nbsp;'+mitems[i]+'&nbsp;</div></a>';
    }
    if(
i!=mitems.length-1)
    {
      
s+='</td></tr>';
    }
    else
    {
      
s+='</td></tr>';
    }
  }
  
s+='</table>';
  
s+='</'+lt+'>\n';
  
document.write(s);
  
LMoveTo('menu'+n,x,y);
}

function 
Align(v,a)
{
  if (
v < a)
  {
    return 
a;
  }
  else
  {
    return 
v;
  }
}

function 
AreaWidth()
{
  if(
oper || ns4)
  {
    return(
window.innerWidth); 
  }
  else if(
ie4)
  {
    return(
document.body.clientWidth);
  }
}

function 
AreaHeight()
{
  if(
ns4 || oper)
  {
    return(
window.innerHeight);
  }
  else if(
ie4)
  {
    return(
document.body.clientHeight);
  }
}

function 
LMoveTo(ly,X,Y)
{
  if(
ie4)
  {
    
document.all[ly].style.pixelLeft=X;
    
document.all[ly].style.pixelTop=Y;
  }
  else if(
oper)
  {
    var 
el = document.getElementById(ly);
    
el.style.pixelLeft=X;
    
el.style.pixelTop=Y;
  }
  else if(
ns5)
  {
    var 
el = document.getElementById(ly);
    
el.style.left=X;
    
el.style.top=Y;
  }
  else if(
ns4)
  {
    
document.layers[ly].left=X;
    
document.layers[ly].top=Y;
  }
}

function 
LShow(ly)
{
  if (
ie4)
  {
    
document.all[ly].style.visibility='visible';
  }
  else if(
ns4)
  {
    
document.layers[ly].visibility='show';
  }
  else if(
oper || ns5)
  {
    
document.getElementById(ly).style.visibility='visible';
  }
}

function 
LGetVis(ly)
{
  if(((
ie4 || oper) && document.all[ly].style.visibility=='visible')||(ns4 && document.layers[ly].visibility=='show'))
  {
    return(
1);
  }
  else 
  {
    return(
0); 
  }
}

function 
LHide(ly)
{
  if(
ie4)
  {
    
document.all[ly].style.visibility='hidden';
  }
  else if(
ns4)
  {
    
document.layers[ly].visibility='hide';
  }
  else if(
oper|| ns5)
  {
    
document.getElementById(ly).style.visibility='hidden';
  }
}

function 
LToggle(ly)
{
  if(
ie4)
  {
    if(
document.all[ly].style.visibility == 'hidden')
    {
      
document.all[ly].style.visibility = 'visible';
    }
    else
    {
d
      ocument
.all[ly].style.visibility = 'hidden';
    }
  }
  else if(
ns4)
  {
    if(
document.layers[ly].visibility == 'hide') 
    {
      
document.layers[ly].visibility = 'show';
    }
    else
    {
      
document.layers[ly].visibility = 'hide';
    }
  }
  else if(
oper|| ns5)
  {
    if(
document.getElementById(ly).style.visibility == 'hidden')
    {
      
document.getElementById(ly).style.visibility = 'visible';
    }
    else 
    {
      
document.getElementById(ly).style.visibility = 'hidden';
    }
 ;}
}

var 
layertimer;
var 
lastmenues;
var 
active = 0;

function 
killMenus(strWen, strStatus)
{
  
layertimer = setTimeout("showMenus('"+strWen+"', 'off')", 300);
  return 
false;
}

function 
killMenusNS(strWen)
{
  if (
ns4)
  {
    
killMenus(strWen);
  }
}

function 
showMenus(strWen, strStatus, strCoord)
{
  if(
strStatus == "on")
  {
    if(
layertimer)
    {
      
clearTimeout(layertimer)
    }
  }
  var 
tempWen = strWen.split(",");
  var 
strOut="";
  if(
DOCloaded)
  {
    
clearTimeout(active);
    if(
lastmenues)
    {
      
tempLastmenues = lastmenues.split(",");
      for (
i=0;i<tempLastmenues.length;i++)
      {
        
LHide(tempLastmenues[i]);
      }
      
lastmenues = null;
    }
    if(
strStatus=="on")
    {
      if(
strCoord!=null && strCoord!="")
      {
        
tempCoord = strCoord.split("|")
      }
      
tempActualLayers=strWen.split(",")
      for (
i=0; i < tempWen.length; i++)
      {
        if(
strCoord!=null && strCoord!="")
        {
          
T = tempCoord[i].split(",")
          if (
T[0]!="" && T[1]!="")
          {
            
LMoveTo(tempActualLayers[i], T[0], T[1]);
          }
        }
        
LShow(tempActualLayers[i])
      }
      
lastmenues = strWen;
    }
  }
  else
  {
    
active = setTimeout("showMenus('" + strWen + "','" + strStatus + "','" + strCoord + "')",2000);
  }
  return 
false;
}



и вот собстенно код расположения менющек, где 2 чило (из скобок) расположение менюшки от края левого, а 3 число - от верха:


PHP:

CreateMenu
(2,80,175,210,"История","#.html","","");
  
CreateMenu(3,230,175,230,"Ð_ейтинг","#.html","");
  
CreateMenu(4,440,175,210,"Форум","#.html","");
  
CreateMenu(5,680,175,210,"пр","#.html","");
  var 
DOCloaded = true;



вот...


Помещено blacki 16-02-2004 в 08:13:

Помойму трабла у тебя с pixelLeft. Замени его на ..style.left = X+"px";

http://msdn.microsoft.com/library/d...s/pixelleft.asp

__________________
Национальность - русский, вероисповедание - программист.


Помещено bes 16-02-2004 в 12:39:

blacki
да не... ты просто не понял....
У меня станичка во фрейме... и там от краев отступы есть.... и при разных разрешениях отступы получаются разными.... а положение меню фексировано function CreateMenu(n,x,y,w,str,url,parent)

вот атач прилепил полный вид при 1280х960 та мышка наведена на 2 кнопку... оно вправо уехала аж под первую кнопку....


Помещено bes 16-02-2004 в 12:41:

а вот на этом скрине разрешение 800х600 и все так как задумано....


Помещено blacki 16-02-2004 в 13:04:

Мля.. Сразу про фрэймы говорить надо. А отступы у тебя разные, так как длина заданна в процентах.

Лекарство номер 1: убери проценты нафик и не мучайся.
Лекарство номер 2: не тестил но должно работать

/*новая функция*/
function recalc(x) {
area = AreaWidth();
res = math.round(area/800*x);
return res;
}
/*-------------------*/
function CreateMenu(n,x,y,w,str,url,parent)
{
var s,lt;
x = recalc(x); /* Изменение */
if (ns4)
...........................

CreateMenu(2,80,175,210,"История","#.html","","");
CreateMenu(3,230,175,230,"Ð_ейтинг","#.html","");
CreateMenu(4,440,175,210,"Форум","#.html","");
CreateMenu(5,680,175,210,"пр","#.html","");
var DOCloaded = true;

__________________
Национальность - русский, вероисповедание - программист.


Помещено bes 17-02-2004 в 14:59:

сделал как ты написал пишет:
ошибка стока 79 не найден объект....


Помещено blacki 17-02-2004 в 15:06:

тогда попробуй вот так:

function recalc(x) {
if(oper || ns4) {
area = window.innerWidth;
} else if(ie4) {
area = document.body.clientWidth;
}
res = math.round(area/800*x);
return res;
}

если это не поможет то пости линку на твой сайт или архивируй страничку и атач сюда.

__________________
Национальность - русский, вероисповедание - программист.


Помещено bes 17-02-2004 в 15:21:

так поставил то что ты написал пишет требуется объект на 276 линии а там:
area = document.body.clientWidth;


Помещено blacki 17-02-2004 в 15:29:

а.. кажется понял.
напиши так:
window.parent.имя_фрэйма.document.body.clientWidth

имя_фрэйма задается во frameset -> frame атрибут name="имя_фрэйма"

__________________
Национальность - русский, вероисповедание - программист.


Помещено bes 25-02-2004 в 16:23:

blacki
спасибо горомное за помошь.... так и не удалось сделать как хотел.... но все равно спасиба и с меня 5 за участие...


Формат времени GMT. Текущее время 09:47.
Показаны 13 сообщений на этой странице

Powered by: vBulletin Version 2.2.4
Copyright © Jelsoft Enterprises Limited 2000, 2001.