25. oktober 2006 - 14:57Der er
18 kommentarer og 1 løsning
Ændring af cursor over imagemap i Firefox
På http://n0p.com/eksperten/ er der 5 billeder. Jeg vil gerne at markøren ændres til 'move', når billedet er en imagemap (bruger usemap-attributten), og når browseren er Firefox 1.5 og 2.0.
Dvs. det skal virke som billede 2 i linket ovenfor.
Jeg kan læse på nettet, at det ikke er ligetil, måske endda svært, måske endda umuligt. Men intet er umuligt før man har spurgt eksperten.dk's eksperter ;)
Ja, det er den med de 4 pile n-s-ø-v. Det får jeg ikke hos mig, sjovt nok, ellers spurgte jeg ikke ;) Der kommer et eksempel med din onmouseover lidt senere på dagen, tjaz.
Hej Erik :) Desværre har udviklerne omkring FF ikke været i stand til at vedligeholde det fremragende produkt, de i sin tid fik overdraget, på en måde, så dets høje standard blev bevaret. FF indeholder myriader af bugs - hvoraf mange er katastrofale - og flere synes at dukke op, jo mere man bruger den og jo mere komplekse ens applikationer bliver. Forspringet i forhold til IE er ved at være godt og grundigt sat til ... de tos fejl ligger blot lidt forskellige steder :o|
Den eneste løsning, jeg kan få øje på, er at udnytte det faktum, at browsere generelt synes at tildele det først læste area det højeste z-niveau ... 'z-index' falder, efterhånden som browseren læser areas i et map. Du kan derfor lave et rektangulært area med samme dimensioner som billedet - og lægge det 'nederst' (skrive det sidst i map'et). Herefter kan du lægge onmousemove-handlers på de forskellige areas og ændre cursor for hele billedet:
<script type="text/JavaScript"> function setCursor(o, sCurs) { var id = o.parentNode.getAttribute("name").split("Map")[0]; document.getElementById(id).style.cursor = sCurs; } </script>
Ekstraktionen af elementets ID er quick 'n' dirty - men du kan selv dele den over flere linjer for at feje evt. fejl op under vejs ... eller finde helt andre måder at kalde billedet på ;o)
Tak, Ole. Jeg har selv i dag kigget på alternativer til at anvende det som imagemap, der umiddelbart ville være det nemmeste. Løsningen bliver nok en onclick event på et almindeligt <img>, der håndterer cursor-ændringer uden problemer. Jeg aflæser så (på forskellig vis) hvor der er klikket, og regner mig frem til hvad der skal ske - det er heldigvis ækvidistante og uniforme rektangler jeg skal ramme, så det kræver kun 7. klasses matematik ;)
Men det er klart at med et mere kompliceret, eller ikke på forhånd kendt, imagemap, ville det ikke være en synderlig nem løsning.
Jeg kommer nok med en skitse af løsningen her.
Og siden I nu ikke spørger, så lad mig alligevel: nej, den endelige løsning har ikke noget med ølflasker at gøre. Det var bare det første billede jeg faldt over...
- nåja ... Frascatti-propper kan jo beskrives med en ret simpel geometri (i en venlig vinkel fra fotografens side, that is!) ;D
Da det gik op for mig, at image-maps udgår med XHTML2.0 - og før jeg fandt ud af, at der kommer en substitut iform af map-attributes til brug på elementerne, der kan implementere billeder - skrev jeg faktisk et helt mouse-event abstraktions objekt, der kan implementere 'map-areas' som både rektangler, cirkler og polygoner. Besværligt, ja ... men det kan egentlig gøres forbløffende hurtigt og velperformende, hvis man gider spilde tilstrækkelig megen tid ;o)
Tror du ikke den første anvendelse af XHTML2.0 vi ser, bliver på plejehjemmet når vi skal vælge dagens menu. Men betryggende at vide der bliver noget i retning af imagemaps, så vi bare kan pege på et hvidløgsmarineret fasanbryst og et glas Frascati.
Skal det nåes inden da, skal det vist gå en del hurtigere, end det plejer ... og til den tid beder vi alligevel bare om et glas hvidløgsmarineret Frascati og en flaske fasanbryst - og kan ikke huske et klap om map-images ... eller HXTLM 0.2 :D
- og fuld forståelse for det andet! Hvorfor tror du, jeg skrev: "... spilde tilstrækkelig megen tid"? ;o)
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.