Jump to content
php.lv forumi

js/css menu probleemas


Recommended Posts

esmu uzrakstiijis (salicis kopaa) shitaadu js/css/html kodu , bet iisti nestraadaa..

 

1. Kaapeec un kaa lai atrisina to, ka klikojot uz pogaam notiek taada kaa lagoshana - reizeem jaaspiezh divas reizes lai izlektu submenu, reizeem 3, bet reizeem ar pirmo ?

 

2. Kaa lai uztaisa, lai noklikojot uz citu linku atveertos jaunais submenu, bet veicais aizveras ? tipa, lai vienlaikus var buut atveert tikai viens submenu..

 

3. Kaa arii buutu forshi, ja noklikshkjinot uz aarpus linka vai submenu, aktiivais submenu aizveras..

 

4. Kaa lai uztaisa, lai resaizojot logu, atveertais submenu automaatiski apreekjinaatu jauno top un left, kur vinjam jaatrodas ? zinu, ka ir window.onresize, bet nemaaku izmantot..

 

Ok, saprotu par daudz jautaajumu vienai reizei, bet varbuut vismaz ar vienu kaads var paliidzeet ?

 

liela veelme ir apguut js.

Link to post
Share on other sites

1. Tur notiek nevis kā kuro reizi, bet tieši tā, ka menu pirmo reizi parādās uz otrā klikšķa, pēc tam gan pareizi rādās. Tas tāpēc, ka #32 rindā x.style.display pirmo reizi nav vienāds 'none', jo css atribūti neskaitās (skaitās tikai inline atribūti. Iesaku pārbaudīt, nevis uz vienādību ar 'none', bet uz nevienādību ar 'block'

 

2. atceries pēdējā atvērtā menu id kādā globālajā mainīgajā. un tad tai pašā showHide funkcijā pirms rādi jauno menu, noslēp veco (un atceries jaunā atvērtā menu id)

 

3. window.onclick laikam bija (vai body.onclick..)

 

4. Te priekš kam tas? vai tad kāds taisās atvērt menu un tad resaizot browseri? Ja nu ļoti gribās, tad uz tā onresize īventa skaties tā atvērtā menu id (tas kas ir iegaumēts 1. punktā) un izdari uz tā tādus pašus style. top/left vērtību piešķiršanu kā tai showHide funkcijā. Tam vajadzētu strādāt.

 

Edit: btw semantiskāk būtu nevis tam span iedot klasi lilMenu, bet gan span vietā izmantot ul, un katru no <a> linkiem likt iekš li itema.

Edited by bubu
Link to post
Share on other sites
1. Tur notiek nevis kā kuro reizi, bet tieši tā, ka menu pirmo reizi parādās uz otrā klikšķa, pēc tam gan pareizi rādās. Tas tāpēc, ka #32 rindā x.style.display pirmo reizi nav vienāds 'none', jo css atribūti neskaitās (skaitās tikai inline atribūti. Iesaku pārbaudīt, nevis uz vienādību ar 'none', bet uz nevienādību ar 'block'

 

2. atceries pēdējā atvērtā menu id kādā globālajā mainīgajā. un tad tai pašā showHide funkcijā pirms rādi jauno menu, noslēp veco (un atceries jaunā atvērtā menu id)

 

3. window.onclick laikam bija (vai body.onclick..)

 

4. Te priekš kam tas? vai tad kāds taisās atvērt menu un tad resaizot browseri? Ja nu ļoti gribās, tad uz tā onresize īventa skaties tā atvērtā menu id (tas kas ir iegaumēts 1. punktā) un izdari uz tā tādus pašus style. top/left vērtību piešķiršanu kā tai showHide funkcijā. Tam vajadzētu strādāt.

 

Edit: btw semantiskāk būtu nevis tam span iedot klasi lilMenu, bet gan span vietā izmantot ul, un katru no <a> linkiem likt iekš li itema.

22867[/snapback]

 

1. shitas paliidzeeja :)

 

2. & 3. man veel nav iisti izpratne par js, taapeec iisti nezinu kas un kaa, bet paartaisiiju shaadi (kautkur uzguugleeju, ka ja mainiigo funkcijaa definee bez 'var' priekshaa, tad tas ir global.. bet nestraadaa.(firefox js console saka, ka ActiveMenu nav defineets..

function showHide(y, bloks) {
   if (activeMenu) {
       activeMenu.style.display = 'none';
   }
   activeMenu=document.getElementById(bloks);
   activeMenu.style.display = (activeMenu.style.display=='block'?'none':'block');
   activeMenu.style.left = findPosX(y) - 95;
   activeMenu.style.top = findPosY(y) + 18;
}

Edited by andrisp
Link to post
Share on other sites

Tak globālie mainīgie darās tāpat kā jebkurā citā prog. valodā. Nodefinē to ārpus funkcijas un izmanto tajā. Šādi:

var lastMenu = false;
function showHide(...) {
 var x=document.getElementById(bloks); // kā iepriekš
 if (lastMenu) {
   if (x != lastMenu) { // ja tiek klikšķināts uz cita menu
     lastMenu.style.display = 'none';
     lastMenu = x;
   } else { // ja uz tā paša
     lastMenu = false; // ja visi ir paslēpti
   }
 }
 ... // kā iepriekš
}

Edited by bubu
Link to post
Share on other sites
Tak globālie mainīgie darās tāpat kā jebkurā citā prog. valodā. Nodefinē to ārpus funkcijas un izmanto tajā. Šādi:
var lastMenu = false;
function showHide(...) {
 var x=document.getElementById(bloks); // kā iepriekš
 if (lastMenu) {
   if (x != lastMenu) { // ja tiek klikšķināts uz cita menu
     lastMenu.style.display = 'none';
     lastMenu = x;
   } else { // ja uz tā paša
     lastMenu = false; // ja visi ir paslēpti
   }
 }
 ... // kā iepriekš
}

22870[/snapback]

paldies, tikai beigaas veel vajag lastMenu = ActiveMenu; , savaadaak lastMenu vislaik ir false un jeegas nekaadas

Link to post
Share on other sites
Kāds activeMenu? tur tev paste.php.lv kodā nebija nekāda activeMenu.

Un vienmēr to piešķirt nevajag! Ja jau menu tiek paslēpts, tad vēlreiz jau to taču nevjag slēpt!

22875[/snapback]

 

a nu es x paarsauvu activeMenu, lai saprotamaak..

 

bet vispaar to kodu vajag shitaa

function showHide(y, bloks) {
   activeMenu=document.getElementById(bloks);
   if (lastMenu) {
       if (activeMenu != lastMenu) {
           lastMenu.style.display = 'none';
           lastMenu = activeMenu;
       } else {
           lastMenu = false;
       }
   } else { // ja nav shis, tad lastMenu vislaik buus false..
       lastMenu = activeMenu;
   }
   activeMenu.style.display = (activeMenu.style.display=='block'?'none':'block');
   activeMenu.style.left = findPosX(y) - 95;
   activeMenu.style.top = findPosY(y) + 18;
}

 

upd. un tas window.onclick vai body.onclick nestraadaa kaa vajag, jo vinjs uztver arii tos klikus, kas ir uz linka vai atveertaa menu, liidz ar to nenotiek vispaar neklas..

Edited by andrisp
Link to post
Share on other sites

veel viens jautaajums

 

<a href="#" onclick="showHide(this, 'kautkas1')" class="lilMenuHead">Darbības</a>

 

ieksh ie un mozillas ir ok, bet ieksh operas, pie katra klika paarlaadeejaas lapa.. itkaa viss straadaa, bet paarlaadeejaas, kas nav jauki..

 

kaa lie tiek gala ar to ?

Link to post
Share on other sites
×
×
  • Create New...