Avatar billede carstengp Nybegynder
31. august 2004 - 23:50 Der er 16 kommentarer og
1 løsning

Problemer med Opera- vs. IE-browser

På min side www.grineflip.dk har jeg lavet mine menuer således at når man kører musen henover en kategori, så popper der x-antal links frem i en boks:

(koden er hentet fra "Pop-it menu- By Dynamic Drive")

-----------------------------------

<head>

var linkset=new Array()

linkset[0]='<div class="menuitems"><a href="fun-pics/001/xxx-index.html" target="big">Sjove Billeder 1</a></div>'
linkset[0]+='<div class="menuitems"><a href="fun-pics/002/xxx-index.html" target="big">Sjove Billeder 2</a></div>'
(osv.)
</head>

-----------------------------------

<body>
<a class="left_menu" href="#" onMouseover="showmenu(event,linkset[0])" onMouseout="delayhidemenu()">Sjove Billeder 01-10</a>
</body>

-----------------------------------

Problemet er, at det åbenbart kun virker med Internet Explorer.
Jeg skulle gerne have det til at virke med bla. Opera browseren, hvis det kan lade sig gøre.

Jeg håber der er nogle hajer, der evt. har en fiks løsning, så jeg ikke skal til at lave det helt om.

Der står desuden dette, fejlen kan sikkert også ligge der, men så må i gerne skære ud i pap, hvis jeg skal ændre noget, for det fatter jeg intet af selv :-#

-----------------------------------
////No need to edit beyond here

var ie4=document.all&&navigator.userAgent.indexOf("Opera")==-1
var ns6=document.getElementById&&!document.all
var ns4=document.layers

function showmenu(e,which){

if (!document.all&&!document.getElementById&&!document.layers)
return

clearhidemenu()

menuobj=ie4? document.all.popmenu : ns6? document.getElementById("popmenu") : ns4? document.popmenu : ""
menuobj.thestyle=(ie4||ns6)? menuobj.style : menuobj

if (ie4||ns6)
menuobj.innerHTML=which
else{
menuobj.document.write('<layer name=gui bgColor=black width=185 onmouseover="clearhidemenu()" onmouseout="hidemenu()">'+which+'</layer>')
menuobj.document.close()
}

menuobj.contentwidth=(ie4||ns6)? menuobj.offsetWidth : menuobj.document.gui.document.width
menuobj.contentheight=(ie4||ns6)? menuobj.offsetHeight : menuobj.document.gui.document.height
eventX=ie4? event.clientX : ns6? e.clientX : e.x
eventY=ie4? event.clientY : ns6? e.clientY : e.y

//Find out how close the mouse is to the corner of the window
var rightedge=ie4? document.body.clientWidth-eventX : window.innerWidth-eventX
var bottomedge=ie4? document.body.clientHeight-eventY : window.innerHeight-eventY

//if the horizontal distance isn't enough to accomodate the width of the context menu
if (rightedge<menuobj.contentwidth)
//move the horizontal position of the menu to the left by it's width
menuobj.thestyle.left=ie4? document.body.scrollLeft+eventX-menuobj.contentwidth : ns6? window.pageXOffset+eventX-menuobj.contentwidth : eventX-menuobj.contentwidth
else
//position the horizontal position of the menu where the mouse was clicked
menuobj.thestyle.left=ie4? document.body.scrollLeft+eventX : ns6? window.pageXOffset+eventX : eventX

//same concept with the vertical position
if (bottomedge<menuobj.contentheight)
menuobj.thestyle.top=ie4? document.body.scrollTop+eventY-menuobj.contentheight : ns6? window.pageYOffset+eventY-menuobj.contentheight : eventY-menuobj.contentheight
else
menuobj.thestyle.top=ie4? document.body.scrollTop+event.clientY : ns6? window.pageYOffset+eventY : eventY
menuobj.thestyle.visibility="visible"
return false
}

function contains_ns6(a, b) {
//Determines if 1 element in contained in another- by Brainjar.com
while (b.parentNode)
if ((b = b.parentNode) == a)
return true;
return false;
}

function hidemenu(){
if (window.menuobj)
menuobj.thestyle.visibility=(ie4||ns6)? "hidden" : "hide"
}

function dynamichide(e){
if (ie4&&!menuobj.contains(e.toElement))
hidemenu()
else if (ns6&&e.currentTarget!= e.relatedTarget&& !contains_ns6(e.currentTarget, e.relatedTarget))
hidemenu()
}

function delayhidemenu(){
if (ie4||ns6||ns4)
delayhide=setTimeout("hidemenu()",500)
}

function clearhidemenu(){
if (window.delayhide)
clearTimeout(delayhide)
}

function highlightmenu(e,state){
if (document.all)
source_el=event.srcElement
else if (document.getElementById)
source_el=e.target
if (source_el.className=="menuitems"){
source_el.id=(state=="on")? "mouseoverstyle" : ""
}
else{
while(source_el.id!="popmenu"){
source_el=document.getElementById? source_el.parentNode : source_el.parentElement
if (source_el.className=="menuitems"){
source_el.id=(state=="on")? "mouseoverstyle" : ""
}
}
}
}

if (ie4||ns6)
document.onclick=hidemenu
-------------------------------

Mvh. Carsten
Avatar billede carstengp Nybegynder
31. august 2004 - 23:52 #1
Skal siges at det virker 100% i IE
Avatar billede roenving Novice
01. september 2004 - 01:57 #2
De ældste udgaver af Opera understøttede ikke denne type funktionalitet, så prøv engang at ændre de første linjer:

var ie4=document.all;
var ns6=document.getElementById&&!document.all;
var ns4=document.layers;

-- jeg har ikke selv testet med disse ting, men grundlæggende er de vist understøttet fra ca. Opera 5 !-)

-- det kan være, at nogle hjørner skal reguleres, men prøv først !o]
Avatar billede carstengp Nybegynder
01. september 2004 - 12:28 #3
Jeg har lavet det om nu og prøvet at installere den danske udgave af Opera-browseren.
For såvidt kan man se hele siden, men pop-up menuerne kommer ikke frem øverst, men forsvinder ind bagved resten af siden.

Jeg lader lige spørgsmålet stå, hvis der er nogen, der har løsningen på det problem.
Men indtil videre tak for hjælpen Roenving
Avatar billede roenving Novice
01. september 2004 - 14:41 #4
Forsvinder ind bagved hvad ?-)

Det kan være at du har noget iframe-noget eller sådan, som kan have problemer, men det kan også være et simpelt spørgsmål om z-index, så måske kunne du lægge et link, eller vise noget af den øvrige kode ?o]
Avatar billede carstengp Nybegynder
01. september 2004 - 15:50 #5
http://www.grineflip.dk/temp/ie.gif
http://www.grineflip.dk/temp/opera.gif

Popup'en forsvinder rigtig nok ind bagved en iframe... Men kan man ikke gøre noget ved det, da den ikke gør det i IE?

hele koden kan ses ved at åbne www.grineflip.dk og vælge "vis kilde"
Avatar billede roenving Novice
01. september 2004 - 16:12 #6
*g*

-- jeg har valgt ikke også at have en Opera, så jeg kan ikke gennemskue dit problem, men du har en af de sjovere fejl i datoen, når jeg kigger på siden med Mozilla, fordi dit dato-script bruger .getYear() og derfor skriver Onsdag den 1. september 104 ...

Hvis du ændrer .getYear() til .getFullYear() forsvinder den fejl !-)

-- og jeg kan jo se, at der allerede er sat z-index:100; på, så jeg ved ikke, hvad du skal bruge for at få den foran i Opera ...

-- men jeg har forøvrigt lavet en grundig gennemskrivning af nereidfadeobjects, så det virker med flere objekter samtidigt, har en helt anden objekt-struktur, og også virker i Gecko-browserne (Netscape, Mozilla, FireFox m. fl. !-)

http://roenving.users.whitehat.dk/index.html?/WD5Opacity.html
Avatar billede carstengp Nybegynder
01. september 2004 - 16:51 #7
Jeg har lige to tillægsspørgsmål til din fade-kode:
1. Kan man sætte hastigheden på hvor hurtigt den fader op og ned?
2. mozilla-attributten, som skal være imellem 0 og 1, kan den være 0 eller 0.01... eller kan den kun være 0.1 (hvis man nu vil have den til at fade helt væk)
Avatar billede roenving Novice
01. september 2004 - 17:02 #8
1. Jeg har ikke gennemskuet, hvorfor man ikke kan sætte hastigheden til meget hurtig, men den sættes på den tredje parameter i kaldet til startOpChange(elm,end,tim)

2. Alle værdier mellem 0 og 1 er gyldige, dog har den Mozilla, jeg oprindeligt prøvede den på, den fejl, at den ikke accepterede 1, uden et reload, så i koden går den kun til 0.99 !-)
Avatar billede carstengp Nybegynder
01. september 2004 - 17:04 #9
men det vil altså sige, at jeg godt kan sætte den til 0 eller 0.01 ?
Avatar billede carstengp Nybegynder
01. september 2004 - 17:05 #10
Mon der egentlig kan sættes en attribut på iframen, så den ikke lægger sig oven på popup'en?
Avatar billede roenving Novice
01. september 2004 - 17:09 #11
Det tror jeg ikke, for mit umiddelbare gæt er, at den i Opera opfører sig ligesom den gjorde før IE5.5, hvor en iframe (forøvrigt sammen med select-, object- m.fl. elementer !-) var et såkaldt 'windowed object', som M$ kaldte det ...

-- altså at det er et objekt, som befinder sig på et helt andet niveau, hvilket er udenfor browserens kontrol, da det leveres på styresystem-niveau !-)
Avatar billede carstengp Nybegynder
01. september 2004 - 17:19 #12
Okay... det vil altså sige at jeg ikke skal regne med at få det til at virke uden at lave det helt om?

Virker siden i mozilla nu?
Avatar billede roenving Novice
01. september 2004 - 17:24 #13
Du skal lige lave dette om:

<script type="text/javascript" language="JavaScript"> <!--//
var unidato=new Date();
var aar=unidato.getFullYear();
var dag=unidato.getDay();
var dato=unidato.getDate();
var maaned=unidato.getMonth();
var dg=new Array("Søndag","Mandag","Tirsdag","Onsdag","Torsdag","Fredag","Lørdag")
var mdr=new Array("januar","februar","marts","april","maj","juni","juli","august","september","oktober","november","december")
document.write("<small><font color='#000000' face='Arial'><b>"+dg[dag]+" den "+dato+". "+mdr[maaned]+" "+aar+"</b></font></small>")
//--> </SCRIPT>

-- ellers har den virket fra første gang, jeg kiggede på den !-)
Avatar billede carstengp Nybegynder
01. september 2004 - 17:29 #14
Sådan! - tak for hjælpen
Avatar billede carstengp Nybegynder
01. september 2004 - 17:31 #15
Og du kan jo lige smide et svar... Hvis der ikke er nogen, der har et mirakuløst tip inden sengetid, så er der point ;o)
Avatar billede roenving Novice
01. september 2004 - 17:33 #16
Velbekomme '-)

-- ja, vi må jo håbe at nogle af Opera-nørderne lige har trickET !-)
Avatar billede carstengp Nybegynder
01. september 2004 - 17:54 #17
Har oprettet et spørgsmål under programmer/browsere/opera
http://www.eksperten.dk/spm/535346

Men du får selvfølgelig pointene for dette spørgsmål, så må vi se om der kommer respons på det andet :-)
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