04. juli 2007 - 18:49Der er
4 kommentarer og 1 løsning
Expanding/Collapsing Menu
Hej Eksperter!
Jeg har et JavaScript til en expanding menu, den er megt simple, selve menuen består af nogle div's som indeholder forskellige kategorier. Disse divs er så skjulte som standard indtil man klikker på en menu kategori og et javascript så ændre css attributen til at div boxen skal vises.
I en variable gemmes så navnet på den sidst åbnede div box således at den collapses ved åbning af en ny kategori.
Mit problem er så at scriptet ikke huske hvilken kategori der er åbnet ved reload af siden, jeg vil altså gerne have at den aktuelle kategori holdes åben ved evt. reload, navigering osv.
Det er vel i virkeligheden noget der meget simpelt kan laves ved hjælp af en cookie, men jeg forstår mig ikke på Javascript.
Mit script ser sådan ud:
var last_expanded = '';
function showHide(id) { var obj = document.getElementById(id);
var status = obj.className;
if (status == 'hide') {
if (last_expanded != '') { var last_obj = document.getElementById(last_expanded); last_obj.className = 'hide'; }
obj.className = 'show';
last_expanded = id;
} else { obj.className = 'hide'; } }
Der er 100 lette point til den der hurtigt kan modificeret scriptet til det jeg skal bruge, det er VIGTIGT at koden holdes lille, "ren" og simpel.
Hrm, hvis du skal huske noget sådant, skal du jo gøre det på siderne (simplest !-) eller med en cookie ...
Derfor er det så nødvendigt at kigge på, hvordan dine sider laves, har du noget serverside ?-)
-- desuden kan det tilføjes at klasseskift on-the-fly er noget af det dårligst performende, du kan finde på, du bør hellere bare ændre attributten, så det vises/skjules, og det kan gøres endnu simplere:
jeg kan ikke bruge style attributten da det er vigtig at koden holdes xhtml 1.0 strict valid og at alt styling derfor holdes et seprat style sheet.
Jeg tænkte på om ikke det var muligt bare at gemme last_expanded i en cookie, og så bruge en onLoad i body tagget til at aktivere en function der sætter id'et til class'en show...
Nu har jeg lavet det med asp istedet ved simpelthen bare at tilføjet en querystring på hvert link og bruge denne til at bestemme hvilken af menu kategorierne der skal åbnes...
Det selvfølgelig ikke optimalt da det kræver en reload af siden hver gang man navigere i menu kategoriene, men det må jeg leve med... Ellers tak for din hjælp.
Nu har jeg lidt spørgsmål til nogle af de input du er kommet med...
Du skrev tidligere at det var noget af det værst performende at ændre en class on-the-fly, men eftersom det jo ville have været med JavaScript og derfor sker på brugerens egen computer er det vel ikke noget at bekymre sig om? Jeg mener at en enkelt class ændres på brugerens egen maskine uanset hvor dårligt performende kan vel ikke være så galt at en bruger overhovedet vil mærke en forringet brugeroplevelse. Og eftersom det ikke tager ressource på serveren er det vel heller ikke noget jeg skal bekymre mig om???
Nu har jeg ikke testet dit script og jeg forstår mig ikke på Javascript og derfor kan jeg heller ikke gennemskue hvad outputtet i din kode vil være, men hvis display: none; tilføjes direkte i xhtml koden som en style attribute i det eksistende tag og ikke er en ændring i det bagved liggende stylesheet så er det brud på strict standarden og vil jo derfor give invalid kode...
Jo, at ændre class on-the-fly er noget at bekymre sig om, for en bruger vil naturligvis være interesseret i, at simple ændringer på siden sker nærmest øjeblikkeligt ...
-- og da browseren ikke ved hvilken indflydelse ændring af et className vil have på andre elementers visning, vælger den at genberegne alle elementers visning, i komplicerede og store html-dokumenter kan en sådan beregning tage op til flere sekunder ...
-- hvilket er ligegyldigt, når siden loades, men kan få utålmodige brugere til at forlade sitet, hvis de klikker lidt frem og tilbage på lige de elementer, der udløser ændringen ...
-- og mit kodeeksempel er derfor skabt til at kunne bruges bl.a. under xhtml, da den tester om css-attributten _ikke_ er noget bestemt, og derfor vil fungere ganske udmærket med attributter sat i et (eksternt) stylesheet !-)
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.