Avatar billede blach Nybegynder
13. april 2006 - 22:50 Der er 20 kommentarer

Fade på JavaScript menu

Jeg har følgende menu med faneblade. Jeg kunne godt tænke mig at få en fade på disse faneblade - og også gerne en form for "delay" når man har musen over dem.
Håber dette kan lade sig gøre !

Jeg har en css fil, en index.php fil og nedenstående csshover.htc, som jeg regner med kræver en tilretning:

-- csshover.htc --

<attach event="ondocumentready" handler="parseStylesheets" />
<script language="JScript">
/**
*    HOVER - V1.11.040203 - whatever:hover in IE
*    ---------------------------------------------
*    Peterned - http://www.xs4all.nl/~peterned/
*    (c) 2004 - Peter Nederlof
*
*    Credits  - Arnoud Berendsen
*        for finding some really -sick- bugs
*
*    howto: body { behavior:url("csshover.htc"); }
*    ---------------------------------------------
*/


var currentSheet, doc = window.document;
function parseStylesheets() {
    var sheets = doc.styleSheets, l = sheets.length;
    for(var i=0; i<l; i++)
        parseStylesheet(sheets[i]);
       
}
    function parseStylesheet(sheet) {
        var l, rules, imports;
        if(sheet.imports) {
            imports = sheet.imports, l = imports.length;
            for(var i=0; i<l; i++)
                parseStylesheet(sheet.imports[i]);
               
        }

        rules = (currentSheet = sheet).rules, l = rules.length;
        for(var j=0; j<l; j++) parseCSSRule(rules[j]);
       
    }

    function parseCSSRule(rule) {
        var select = rule.selectorText, style = rule.style.cssText;
        if(!(/(^|\s)(([^a]([^ ]+)?)|(a([^#.][^ ]+)+)):hover/i).test(select)) return;
       
        var newSelect = select.replace(/(\.([a-z0-9_-]+):hover)|(:hover)/g, '.$2onHover');
        var hasClass = (/(\.([a-z0-9_-]+):hover)/g).exec(select);
        var className = (hasClass? hasClass[2]:'') + 'onHover';
        var affected = select.replace(/:hover.*$/g, '');
        var elements = getElementsBySelect(affected);
       
        currentSheet.addRule(newSelect, style);
        for(var i=0; i<elements.length; i++)
            new HoverElement(elements[i], className);
           
    }

function HoverElement(node, className) {
    if(!node.hovers) node.hovers = {};
    if(node.hovers[className]) return;
    node.hovers[className] = true;
    node.attachEvent('onmouseover',
        function() { node.className += ' ' + className; });
    node.attachEvent('onmouseout',
        function() { node.className =
            node.className.replace((new RegExp('\\s+'+className)),''); });
}

function getElementsBySelect(rule) {
    var parts, nodes = [doc];
    parts = rule.split(' ');
    for(var i=0; i<parts.length; i++) {
        nodes = getSelectedNodes(parts[i], nodes);
       
    }    return nodes;
}
    function getSelectedNodes(select, elements) {
        var result, node, nodes = [];
        var classname = (/\.([a-z0-9_-]+)/i).exec(select);
        var identify = (/\#([a-z0-9_-]+)/i).exec(select);
        var tagName = (/^[a-z0-9]+/i).exec(select.toUpperCase()) || '*';
        for(var i=0; i<elements.length; i++) {
            result = elements[i].getElementsByTagName(tagName);
            for(var j=0; j<result.length; j++) {
                node = result[j];
                if((identify && node.id != identify[1]) || (classname && !(new RegExp('\\b' + classname[1] + '\\b').exec(node.className)))) continue;
                nodes[nodes.length] = node;
            }
        }    return nodes;
    }
</script>
Avatar billede webstuff Nybegynder
14. april 2006 - 17:07 #1
har du et Link til siden?
Avatar billede mclemens Nybegynder
14. april 2006 - 20:06 #2
her er et test eksempel webstuff...
http://www.xs4all.nl/~peterned/examples/cssmenu.html
- jeg har kigget på den... det her er ikke godt (class change on the fly):

    node.attachEvent('onmouseover',
        function() { node.className += ' ' + className; });
    node.attachEvent('onmouseout',
        function() { node.className =
            node.className.replace((new RegExp('\\s+'+className)),''); });

- Problemet (ikke uløseligt problem selvfølgelig...) er så at der skal ligges en onmouseover mere på der langsomt skruer op for opacity'en og herefter langsom ned indtil den når 0 og så ekserkveres class skiftet tilbage...

- men, hvis man kører en alert ind i onmouseover'en f.eks. bare med alert(1); (jeg tror det var der jeg satte den ved min test men ikke lige helt sikker) - ser man at hver gang man kører musen hen over en knap bliver det hele regenereret igennem dom biblioteket p.g.a. class skiftet

- så hvis effekten skulle laves sådan så var det måske bedre at lave det med javascript istedet for det andet (ihvertfald når opacity er med i billedet)...
Avatar billede mclemens Nybegynder
14. april 2006 - 20:11 #3
[- så hvis effekten skulle laves sådan så var det måske bedre at lave det med javascript istedet for det andet (ihvertfald når opacity er med i billedet)... ]
... og så med style skifte på childNodes istedet for class skiftet ...
Avatar billede mclemens Nybegynder
14. april 2006 - 20:24 #4
hmmm... efter lidt nærmere læsning er det åbenbart lavet på denne måde fordi ie ikke godtager hover på alle elementer ... det gør lidt mere forståeligt ...
Avatar billede mclemens Nybegynder
14. april 2006 - 20:25 #5
det gør lidt mere forståeligt ... -> det gør scriptet lidt mere forståeligt ...
Avatar billede mclemens Nybegynder
14. april 2006 - 20:37 #6
Læs evt. bunden af denne side - egentlig også det jeg frygter... men er dog ikke sikker på at det rent faktisk er umuligt før/hvis jeg har prøvet at scripte på om det er muligt ... http://webdesign101.dk/www/cssmenu/dropdownmenu.php
Avatar billede mclemens Nybegynder
14. april 2006 - 21:16 #7
Hvis det laves (og hvis det kan) så virker det kun med IE da htc dokumenter kun er til IE og da css p.t. ikke understøtter programmering genløb med ændringer i css styles... - skal det (hvis det skal virke i andre browsere også) laves via. javascript med className's og definering af hvilke tags der skal checkes for tagnames samtidig med visning skjulning af childnodes der ligger under det hover'ed node... kigger dog på denne htc først :P
Avatar billede mclemens Nybegynder
14. april 2006 - 22:45 #8
jeg kan ikke lave den... med .htc'en alene :/
Avatar billede blach Nybegynder
17. april 2006 - 19:52 #9
Beklager ventetiden, har haft en travl påske :/
Men der er 2 filer yderligere: En css fil og en php/html fil hvor menuen er. Disse er listet nedenfor, håber det kan hjælpe!

-- Style.css--

/* Menu -------------------------------------------------------------*/
body { behavior:url("csshover.htc"); }
#menu {
    position: relative;
    top: 0px;
    left: 0px;

    margin: 0px;
    margin-top: 0px;
    padding-left: 0px;
    padding-right: 0px;
}
/* BASE ---------------------------------*/
#menu ul {
    margin:0;
    padding:0;
    list-type: none;
}
#menu li {
    float:left;
    display:block;
    position:relative;
   
    padding-top:0px;
    padding-left:11px;
    padding-right:0px;
    margin:0px;
   
    height: 10px;

    font-family: verdana, sans-serif;
    font-size: 13px;
    font-weight: bold;
    color: black;
    text-decoration: none;
    text-align: center;
}
#menu a { color:black;text-decoration:none; }
#menu a:hover {    color: gray; }
#menu li.left {
    width: 10px;
    padding:0px;
}
#menu li.right {
    width: 10px;
    padding:0px;
}


/* NUMMER 2 ----------------------------------*/
#menu li ul {
    display: none;
    position: absolute;
    top:30px;
    left: 5px;
    list-style-type: none;

    width: 170px;
    background: #d5dee8; FILTER: alpha(opacity=86); -moz-opacity:0.86; 
    border: 1px solid ridge;
   
   
    z-index: 10;
}
#menu li ul li {
    position: static;
    float:none;
    display: block;
   
    height: auto;
   
    background-image: none;

   
    font-family: verdana, sans-serif;
    font-size: 11px;
   
    padding: 1px;

    text-align: left;
}
html>body #menu li ul li {
    float:none;
    position:relative;
}
#menu li ul li:hover {
    position: relative;
}




/* NUMMER 3 ------------------------------------*/
#menu li li ul {
    display: none;
    top:0px;
    left: 149px;
}




/* EXTRA ---------------------------------------*/
div#menu li:hover ul, #menu li:hover li:hover ul, #menu li:hover li:hover li:hover ul {
    display: block;
}
#menu li:hover li ul, #menu li:hover li:hover li ul, #menu li:hover li:hover li:hover li ul {
    display: none;
}
#menu ul#menuList li:hover > ul {
    display: block;
}
#menu li li a, #menu li li li a {
    display:block;
    font-weight: normal;
}
#menu li li a:hover, #menu li li li a:hover {
    display:block;
    border-right:solid 3px #005bac ;
}
/* ----------------------------------------------------------------------------------------*/

-- // --


-- html --

          <div id="menu">
          <ul id="menuList"><a href="#">Menu top</a><ul>
            <li><a href="sti...">Link</a></li>
          </ul></li>
          </ul>
          </div>

--//html--
Avatar billede mclemens Nybegynder
17. april 2006 - 21:06 #10
[ jeg kan ikke lave den... med .htc'en alene :/ ]
- Dårlig formuleret... henviste lidt til indlægget, der stod lige ovenover,
hvor jeg skrev,at der nok skulle et javascript til istedet...

- Det er dog fint med de ekstra filer, det vil gøre det nemmere for andre at finde en løsning på problemet... håber roenving, olebole eller en anden kan se løsningen...

- Den eneste jeg p.t. kan se er et javascript på siden, der skifter style på de enkelte ting ved hover - samt skruer op for opacity, indtil den når 100... Og hvis man forlader hovedmenuen og ikke går ind under en undermenu, skrues der ligeså stille ned for opacity... ikke noget jeg har tid til lige p.t... (der findes sikkert et tilsvarende script der kan det et sted)

Jeg har forsøgt på at løse det ved hjælp af htc filen (med en test body) - men det syntes ikke lige så nemt for mig, opgav til sidst at se en løsning på det :/
Avatar billede blach Nybegynder
17. april 2006 - 21:17 #11
Okay, det var da ærgerligt!

Har du styr på css? For har et mindre spm:

Mine links ser sådan her ud: (i html filen)
            <li><a href="sti..."> &raquo; Link</a></li>
            <li><a href="sti2..."> &raquo; Link2</a></li>

Probmemet er nu, hvis linket er mere end 1 linje langt.. Så deler den selvfølgelig linket over i 2, men punkttegnet vil jeg gerne have for sig selv.
Altså skal det ikke stå sådan her:
&raquo; Et meget langt
link

Men sådan her:
&raquo; Et meget langt
  link
Avatar billede blach Nybegynder
17. april 2006 - 21:17 #12
Altså skal det ikke stå sådan her:
» Et meget langt
link

Men sådan her:
» Et meget langt
  link
Avatar billede mclemens Nybegynder
17. april 2006 - 21:35 #13
Prøv at kaste dem ind i en ul ;)
<ul>
<li><a href="sti..."> &raquo; Link</a></li>
            <li><a href="sti2..."> &raquo; Link2<br>1</a></li>
</ul>
Avatar billede mclemens Nybegynder
17. april 2006 - 21:49 #14
har du ned til niveau 2 i links?
menu
- undermenu

eller har du til niveau 3 i links?
menu
- undermenu
- - undermenu'es undermenu
Avatar billede blach Nybegynder
17. april 2006 - 22:40 #15
Det er i 2 neveauer:
Menu
» undermenu
Avatar billede mclemens Nybegynder
17. april 2006 - 22:41 #16
ok... :)
Avatar billede blach Nybegynder
17. april 2006 - 22:42 #17
Sådan her:
          <div id="menu">
          <ul id="menuList"><a href="#">Menu top</a>
          <ul>
            <li><a href="sti...">&raquo; Link</a></li>
            <li><a href="sti2...">&raquo; Link2</a></li>
          </ul>
          </ul>
          </div>
Avatar billede blach Nybegynder
17. april 2006 - 22:42 #18
Man kunne jo gøre sådan her:
<li>&raquo; <a href="sti..."> Link</a></li>

Men så laver den » og linket i 2 linker :/
Avatar billede mclemens Nybegynder
17. april 2006 - 23:09 #19
ok, den kan jeg ikke lige gennemskue... bruger ikke li og ul selv :/
http://www.w3schools.com/css/css_reference.asp#list <- lidt om lists
http://www.w3schools.com/css/pr_list-style-image.asp <- mulighed for at indsætte sit eget billede i stedet for f.eks. O ... så kan måske fuske lidt :P
Avatar billede blach Nybegynder
20. april 2006 - 22:26 #20
Okay, tak for det .. kigger lige på det den sidste lyder interessant :)
Avatar billede Ny bruger Nybegynder

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.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester