Avatar billede abrjonline Nybegynder
23. april 2007 - 21:42 Der er 11 kommentarer og
2 løsninger

Når man klikker på kanppen bliver knappen nede OnClick eller såen

Hej.....
Jeg ved det kan lade sig gøre.... Kan bare ikke huske hvordan.

Jeg har en knap bestående af billede 1 når man så laver en mouseover bliver det til billede 2. her er så mit spørgsmål. Hvordan får jeg billede 2 til at blive nede indtil jeg aktivere en anden knap ved at klikke på den?

Ved det kan lader sig gøre kan bare ikke huske hvordan:P Pineligt
Avatar billede jhe-ting Nybegynder
24. april 2007 - 00:38 #1
Vis hvordan mouseOver og mouseOut rutinerne er 'skruet' sammen.
De skal samarbejde med onClick rutinen v.hj.a. en global variabel.
Der er mange måder at gøre det på...
Avatar billede nicolaib Praktikant
24. april 2007 - 01:24 #2
Hvis du kun vil bruge HTML og CSS kan du gøre som vist forneden. Denne kan selvfølgelig også laves om ved hjælp af noget PHP ved at sætte en variabel (f.eks. $page = "pageA"; ) på hver side som tildeler værdi og derefter udskrive værdien sådan her <ul id="<?php echo $page; ?>" class="tabs">

ellers kan man bruge en "rigtig" PHPmetode som den der er vist her. http://www.eksperten.dk/spm/774735

ul.tabs a:link {text-decoration:none; color:black}
ul.tabs a:visited {text-decoration:none; color:black}
ul.tabs {list-style:none; border-bottom:3px solid red; margin:0; padding-bottom:5px}
ul.tabs li {display:inline; width:100px; height:20px; padding:5px; margin:5px; text-align:center;}
#pageA #a {background-color:red}
#pageA #b {background-color:silver}
#pageA #c {background-color:silver}

#pageB #a {background-color:silver}
#pageB #b {background-color:red}
#pageB #c {background-color:silver}

#pageC #a {background-color:silver}
#pageC #b {background-color:silver}
#pageC #c {background-color:red}

<!-- Dette er på en htm-side -->
<ul id="pageA" class="tabs">
<li id="a"><a href="tabmenu1.htm">Tab A</a></li>
<li id="b"><a href="tabmenu1b.htm">Tab B</a></li>
<li id="c"><a href="tabmenu1c.htm">Tab C</a></li>
</ul>


<!-- Dette er på en anden htm-side -->
<ul id="pageB" class="tabs">
<li id="a"><a href="tabmenu1.htm">Tab A</a></li>
<li id="b"><a href="tabmenu1b.htm">Tab B</a></li>
<li id="c"><a href="tabmenu1c.htm">Tab C</a></li>
</ul>

<!-- Dette er på en tredje htm-side -->
<ul id="pageC" class="tabs">
<li id="a"><a href="tabmenu1.htm">Tab A</a></li>
<li id="b"><a href="tabmenu1b.htm">Tab B</a></li>
<li id="c"><a href="tabmenu1c.htm">Tab C</a></li>
</ul>
Avatar billede abrjonline Nybegynder
24. april 2007 - 01:36 #3
Når jeg fører min mus over et link skifter knappen til et sort link....

Når jeg så klikker på linket skal det være den farve som det er når det er nede. Det er et bilede som skal aktiveres og når jeg så klikker på et nyt link(billede). Brugbart?
Avatar billede abrjonline Nybegynder
24. april 2007 - 01:38 #4
Nicolaib -> på en på en, en anden, og en tredje htm-side hvad mener du?
Avatar billede abrjonline Nybegynder
24. april 2007 - 01:45 #5
hehe forstår det ikke ;)
Avatar billede jhe-ting Nybegynder
24. april 2007 - 06:55 #6
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title></title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<script type="text/javascript"><!--
function gEl(strId){return document.getElementById(strId)}
function showDisp(strMsg){
    var msg = document.createTextNode(strMsg);
    var dsp = gEl("disp")
    dsp.replaceChild(msg, dsp.firstChild);
}
var activeImg = false;
function _imgOver(evt){
    var img = evt?evt.target:event.srcElement;
    img.src = img.srcOver;
}
function _imgOut(evt){
    var img = evt?evt.target:event.srcElement;
    img.src = img.srcOut;
}
function clearActive(){
    if (activeImg){
        activeImg.srcOut = activeImg.srcBak;
        activeImg.src = activeImg.srcBak;
        activeImg = false;
    }
}
function _imgClick(evt){
    var img = evt?evt.target:event.srcElement;
    if (img === activeImg) return;
    clearActive();
    img.srcOut = img.srcOver;
    activeImg = img;
    showDisp("Active = "+img.id+" - Click to clear");
}

window.onload=function(){
    // preload
    var overA = new Image();
    overA.src = "2.gif";
    var overB = new Image();
    overB.src = "4.gif";
   
    var imageA = gEl("imgA");
    imageA.srcOver = overA.src;
    imageA.srcOut = imageA.src;
    imageA.srcBak = imageA.src;
    imageA.onmouseover = _imgOver;
    imageA.onmouseout = _imgOut;
    imageA.onclick = _imgClick;

    var imageB = gEl("imgB");
    imageB.srcOver = overB.src;
    imageB.srcOut = imageB.src;
    imageB.srcBak = imageB.src;
    imageB.onmouseover = _imgOver;
    imageB.onmouseout = _imgOut;
    imageB.onclick = _imgClick;
   
}
//--></script>
<style type="text/css">
</style>
</head>

<body>
<div><img id="imgA" src="1.gif" alt="imgA"> <img id="imgB" src="3.gif" alt="imgB"></div>
<br>
<div id="disp" onclick="clearActive();showDisp('Click an image');">Click an image</div>
</body>
</html>
Avatar billede olebole Juniormester
24. april 2007 - 14:48 #7
<ole>

jhe-ting >> Det er en lidt sær sammenrodning af DOM og gammel JS/HTML-bindinger.

Når du bruger DOM til at tilgå et element med, får du (eller rettere: burde du få) returneret en DOM-node. En DOM-node er - i modsætning til det gamle HTML-element - ikke et alm. JS-objekt, hvorfor man ikke ukritisk kan sætte properties på elementet/noden.
At du kan bruge en syntaks som:
    imageB.srcOver = overB.src;
    imageB.srcOut = imageB.src;
    imageB.srcBak = imageB.src;
    imageB.onmouseover = _imgOver;
    imageB.onmouseout = _imgOut;
    imageB.onclick = _imgClick;

- skyldes udelukkende, at browserne ikke blot overholder gældende standarder - men også spænder sikkerhedsnet ud under invalid kode. De sidste 8-9 år har vi skulle bruge getAttribute, setAttribute, addEventListener (- og attachEvent i IE).

Du er meget langtfra den eneste, der 'begår disse synder' - men jeg vil lige nævne det, når du nu ellers på forbilledlig vis prøver at anvende DOM  ;o)

/mvh
</bole>
Avatar billede jhe-ting Nybegynder
25. april 2007 - 00:44 #8
Hej Ole. :oD 

Som sædvanligt må jeg give dig ret. Jeg lavede derfor en bedre udgave.
Er der mere jeg har 'glemt'?

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title></title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<script type="text/javascript"><!--
function gEl(strId){return document.getElementById(strId)}
function showDisp(strMsg){
    var msg = document.createTextNode(strMsg);
    var dsp = gEl("disp")
    dsp.replaceChild(msg, dsp.firstChild);
}
function catchEvent(objElm, strEvent, pFunction){
    if (objElm.addEventListener){ // FF
        objElm.addEventListener(strEvent, pFunction, false);
    } else if (objElm.attachEvent){ // IE
        objElm.attachEvent("on"+strEvent, pFunction);
    } else { // IE can do this, maybe some XYZbrowser has none of the above.
        objElm["on"+strEvent] = pFunction;
        objElm[strEvent] = pFunction;
    }
}
var activeImg = false;
function _imgOver(evt){
    var img = evt.target?evt.target:event.srcElement;
    showDisp("over "+img.tagName+"#"+img.id);
    img.setAttribute("src", img.getAttribute("srcOver"));
}
function _imgOut(evt){
    var img = evt.target?evt.target:event.srcElement;
    showDisp("out "+img.tagName+"#"+img.id);
    img.setAttribute("src", img.getAttribute("srcOut"));
}
function clearActive(){
    if (activeImg){
        activeImg.setAttribute("srcOut", activeImg.getAttribute("srcBak"));
        activeImg.setAttribute("src", activeImg.getAttribute("srcBak"));
        activeImg = false;
    }
}
function _imgClick(evt){
    var img = evt.target?evt.target:event.srcElement;
    if (img === activeImg) return;
    clearActive();
    img.setAttribute("srcOut", img.getAttribute("srcOver"));
    activeImg = img;
    showDisp("Active = "+img.getAttribute("id")+" - Click to clear");
}

window.onload=function(){
    // preload
    var overA = new Image();
    overA.src = "2.gif";
    var overB = new Image();
    overB.src = "4.gif";
   
    var imageA = gEl("imgA");
    imageA.setAttribute("srcOver", overA.src);
    imageA.setAttribute("srcOut", imageA.src);
    imageA.setAttribute("srcBak", imageA.src);
    catchEvent(imageA,"mouseover", _imgOver);
    catchEvent(imageA,"mouseout", _imgOut);
    catchEvent(imageA,"click", _imgClick);

    var imageB = gEl("imgB");
    imageB.setAttribute("srcOver", overB.src);
    imageB.setAttribute("srcOut", imageB.src);
    imageB.setAttribute("srcBak", imageB.src);
    catchEvent(imageB,"mouseover", _imgOver);
    catchEvent(imageB,"mouseout", _imgOut);
    catchEvent(imageB,"click", _imgClick);
                 
}
//--></script>
<style type="text/css">
</style>
</head>

<body>
<div><img id="imgA" src="1.gif" alt="imgA"> <img id="imgB" src="3.gif" alt="imgB"></div>
<br>
<div id="disp" onclick="clearActive();showDisp('Click an image');">Click an image</div>
</body>
</html>
Avatar billede nicolaib Praktikant
25. april 2007 - 01:37 #9
Det jeg mente er at din 'menu unordered list' skal have forskellige id's på forskellige sider. Hhv pageA, pageB, pageC osv. Dette kan så som vist klares ved indsættelse at lidt PHP.
Avatar billede abrjonline Nybegynder
10. maj 2007 - 10:52 #10
alt jeg har lavet er lavet i HTML så tror ikke jeg kan bruge din formel du har sendt og kan ikke implementere php i det da jeg er spade til php:p
Avatar billede nicolaib Praktikant
15. maj 2007 - 00:35 #11
Hvis det hele er lavet i html og du ikke vil bruge PHP så kan du stadig bruge den jeg skrev først. Den er kun i HTML og CSS. Det kræver bare at du indsætter et nyt pageID på hver side. Jeg mente bare at det lettede processen at lave det i PHP.

Hvis du vil bruge PHP til min version så indsæt dette.

/* Dette skal i et style sheet ved siden af*/

ul.tabs a:link {text-decoration:none; color:black}
ul.tabs a:visited {text-decoration:none; color:black}
ul.tabs {list-style:none; border-bottom:3px solid red; margin:0; padding-bottom:5px}
ul.tabs li {display:inline; width:100px; height:20px; padding:5px; margin:5px; text-align:center;}
#pageA #a {background-color:red}
#pageA #b {background-color:silver}
#pageA #c {background-color:silver}

#pageB #a {background-color:silver}
#pageB #b {background-color:red}
#pageB #c {background-color:silver}

#pageC #a {background-color:silver}
#pageC #b {background-color:silver}
#pageC #c {background-color:red}

<!-- Dette er på en htm-side -->
<!-- Den efterfølgende linje indsætter du på hver .htm-side med de forskellige ID's -->
<?php $page = pageA ?> <!--indsættes på side A-->
<?php $page = pageB ?> <!--indsættes på side B--> og så videre

<!-- resten indsætter du på alle sider hvor du vil have menuen.-->
<ul id="<?php echo $page; ?>" class="tabs">
<li id="a"><a href="linktilandenside.htm">Tab A</a></li>
<li id="b"><a href="linktilandenside.htm">Tab B</a></li>
<li id="c"><a href="linktilandenside.htm">Tab C</a></li>
</ul>

CSS-delen lægger du i et style sheet ved siden af.
Avatar billede jhe-ting Nybegynder
07. juni 2007 - 22:21 #12
>> abrjonline

Du skriver ikke hvad der ellers skal ske når man trykker på en af knapperne. I mit eksempel 25/04-2007 00:44:53, skrevet i (D)HTML, bliver det valgte billedes ID bare vist i et felt på siden.

Hvis knapperne skal navigere til nye sider, er nicolaib's forslag nok bedre, hvis der er adgang til PHP på din server.

Det kan godt laves i (D)HTML til flere sider. Hver side skal så selv 'vide' hvilken knap der hører til siden, og aktivere den.
Avatar billede abrjonline Nybegynder
02. juli 2007 - 21:58 #13
har accepteret svar fra jer begge så i deler
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