Avatar billede fragze Juniormester
08. oktober 2005 - 19:05 Der er 7 kommentarer og
1 løsning

Dropdown opløsningsproblem

Hej Alle.

Jeg har et problem med min dropdown menu, som den ser ud nu virker den perfekt i 1280*1024, men så snart man prøver i 1024*768 fucker den, nogen der kan hjælpe mig med en løsning?

KODE:

INDEX.PHP
____________

<SCRIPT language=JavaScript type=text/JavaScript>
                            var menus = [
                                new ypSlideOutMenu("menu1", "down", 100, 200, 300, 400),
                                new ypSlideOutMenu("menu2", "down", 401, 95, 150, 200),
                                new ypSlideOutMenu("menu3", "down", 489, 95, 150, 200),
                                new ypSlideOutMenu("menu4", "down", 594, 95, 150, 200),
                                new ypSlideOutMenu("menu5", "down", 655, 95, 150, 200),
                                new ypSlideOutMenu("menu6", "down", 753, 95, 150, 200),
                                new ypSlideOutMenu("menu7", "down", 827, 95, 150, 200),
                                new ypSlideOutMenu("menu8", "down", 894, 95, 150, 200),
                                new ypSlideOutMenu("menu9", "down", 997, 95, 150, 200)
                            ]
                            for (var i = 0; i < menus.length; i++) {
                                menus[i].onactivate = new Function("document.getElementById('act" + i + "').className='active';");
                                menus[i].ondeactivate = new Function("document.getElementById('act" + i + "').className='';");
                            }
</SCRIPT>

        <td>
        <DIV id="menu2Container" class="menuContainer">
            <DIV class=menu id=menu2Content>
            <DIV class=options><A
            href="LINK!!!index.php?page=hvemermedlem">Hvem er medlem</A><BR>
                          <A
            href="http://www.uvm.dk" target="_blank">CVU-loven</A><BR>
                          <A
            href="LINK!!!docs/vedtaegter.doc">Vedtægter</A><BR>
                          <A
            href="LINK!!!index.php?page=historie">Historie / organisation</A><BR>
              </DIV>
            </DIV>
          </DIV>
            <A id=act1
            onmouseover="swapImage('btn2','','images/kreds62_03.gif',1);ypSlideOutMenu.showMenu('menu2')"
            onmouseout="swapImgRestore();ypSlideOutMenu.hideMenu('menu2')"><IMG
            style="WIDTH: 87px; HEIGHT: 31px"
            src="images/kreds62_03.gif" name=btn2 border="0"></A></td>


OGSÅ fremdeles til de 9 menuer er slut..., jeg bruger så


ypSlideOutMenusC.js
____________



ypSlideOutMenu.Registry = []
ypSlideOutMenu.aniLen = 250
ypSlideOutMenu.hideDelay = 500
ypSlideOutMenu.minCPUResolution = 10
// constructor
function ypSlideOutMenu(id, dir, left, top, width, height)
{
this.ie = document.all ? 1 : 0
this.ns4 = document.layers ? 1 : 0
this.dom = document.getElementById ? 1 : 0
if (this.ie || this.ns4 || this.dom) {
this.id = id
this.dir = dir
this.orientation = dir == "left" || dir == "right" ? "h" : "v"
this.dirType = dir == "right" || dir == "down" ? "-" : "+"
this.dim = this.orientation == "h" ? width : height
this.hideTimer = false
this.aniTimer = false
this.open = false
this.over = false
this.startTime = 0
this.gRef = "ypSlideOutMenu_"+id
eval(this.gRef+"=this")
ypSlideOutMenu.Registry[id] = this
var d = document
var strCSS = '<style type="text/css">';
strCSS += '#' + this.id + 'Container { visibility:hidden; '
strCSS += 'left:' + left + 'px; '
strCSS += 'top:' + top + 'px; '
strCSS += 'overflow:hidden; z-index:10000; }'
strCSS += '#' + this.id + 'Container, #' + this.id + 'Content { position:absolute; '
strCSS += 'width:' + width + 'px; '
strCSS += 'height:' + height + 'px; '
strCSS += 'clip:rect(0 ' + width + ' ' + height + ' 0); '
strCSS += '}'
strCSS += '</style>'
d.write(strCSS)
this.load()
}
}
ypSlideOutMenu.prototype.load = function() {
var d = document
var lyrId1 = this.id + "Container"
var lyrId2 = this.id + "Content"
var obj1 = this.dom ? d.getElementById(lyrId1) : this.ie ? d.all[lyrId1] : d.layers[lyrId1]
if (obj1) var obj2 = this.ns4 ? obj1.layers[lyrId2] : this.ie ? d.all[lyrId2] : d.getElementById(lyrId2)
var temp
if (!obj1 || !obj2) window.setTimeout(this.gRef + ".load()", 100)
else {
this.container = obj1
this.menu = obj2
this.style = this.ns4 ? this.menu : this.menu.style
this.homePos = eval("0" + this.dirType + this.dim)
this.outPos = 0
this.accelConst = (this.outPos - this.homePos) / ypSlideOutMenu.aniLen / ypSlideOutMenu.aniLen
// set event handlers.
if (this.ns4) this.menu.captureEvents(Event.MOUSEOVER | Event.MOUSEOUT);
this.menu.onmouseover = new Function("ypSlideOutMenu.showMenu('" + this.id + "')")
this.menu.onmouseout = new Function("ypSlideOutMenu.hideMenu('" + this.id + "')")
//set initial state
this.endSlide()
}
}
ypSlideOutMenu.showMenu = function(id)
{
var reg = ypSlideOutMenu.Registry
var obj = ypSlideOutMenu.Registry[id]
if (obj.container) {
obj.over = true
for (menu in reg) if (id != menu) ypSlideOutMenu.hide(menu)
if (obj.hideTimer) { reg[id].hideTimer = window.clearTimeout(reg[id].hideTimer) }
if (!obj.open && !obj.aniTimer) reg[id].startSlide(true)
}
}
ypSlideOutMenu.hideMenu = function(id)
{
var obj = ypSlideOutMenu.Registry[id]
if (obj.container) {
if (obj.hideTimer) window.clearTimeout(obj.hideTimer)
obj.hideTimer = window.setTimeout("ypSlideOutMenu.hide('" + id + "')", ypSlideOutMenu.hideDelay);
}
}
ypSlideOutMenu.hideAll = function()
{
var reg = ypSlideOutMenu.Registry
for (menu in reg) {
ypSlideOutMenu.hide(menu);
if (menu.hideTimer) window.clearTimeout(menu.hideTimer);
}
}
ypSlideOutMenu.hide = function(id)
{
var obj = ypSlideOutMenu.Registry[id]
obj.over = false
if (obj.hideTimer) window.clearTimeout(obj.hideTimer)
obj.hideTimer = 0
if (obj.open && !obj.aniTimer) obj.startSlide(false)
}
ypSlideOutMenu.prototype.startSlide = function(open) {
this[open ? "onactivate" : "ondeactivate"]()
this.open = open
if (open) this.setVisibility(true)
this.startTime = (new Date()).getTime()
this.aniTimer = window.setInterval(this.gRef + ".slide()", ypSlideOutMenu.minCPUResolution)
}
ypSlideOutMenu.prototype.slide = function() {
var elapsed = (new Date()).getTime() - this.startTime
if (elapsed > ypSlideOutMenu.aniLen) this.endSlide()
else {
var d = Math.round(Math.pow(ypSlideOutMenu.aniLen-elapsed, 2) * this.accelConst)
if (this.open && this.dirType == "-") d = -d
else if (this.open && this.dirType == "+") d = -d
else if (!this.open && this.dirType == "-") d = -this.dim + d
else d = this.dim + d
this.moveTo(d)
}
}
ypSlideOutMenu.prototype.endSlide = function() {
this.aniTimer = window.clearTimeout(this.aniTimer)
this.moveTo(this.open ? this.outPos : this.homePos)
if (!this.open) this.setVisibility(false)
if ((this.open && !this.over) || (!this.open && this.over)) {
this.startSlide(this.over)
}
}
ypSlideOutMenu.prototype.setVisibility = function(bShow) {
var s = this.ns4 ? this.container : this.container.style
s.visibility = bShow ? "visible" : "hidden"
}
ypSlideOutMenu.prototype.moveTo = function(p) {
this.style[this.orientation == "h" ? "left" : "top"] = this.ns4 ? p : p + "px"
}
ypSlideOutMenu.prototype.getPos = function(c) {
return parseInt(this.style[c])
}
ypSlideOutMenu.prototype.onactivate = function() { }
ypSlideOutMenu.prototype.ondeactivate = function() { }


SAMT :

init.js
____________

function reCalc() {
  dom = (document.getElementById)? true:false
  ie = (document.all)? true:false
  winW = (!ie)? window.innerWidth-16 : document.body.offsetWidth-20
  winH = (!ie)? window.innerHeight : document.body.offsetHeight
  if (winW>=750){
    mnuX = ((winW-750)/2)+26;
  } else {
    mnuX = 26;
  }
  var oMnu = document.getElementById('menu2Container');
  oMnu.style.left = mnuX + 'px';
  var oMnu = document.getElementById('menu3Container');
  oMnu.style.left = mnuX+88 + 'px';
  var oMnu = document.getElementById('menu4Container');
  oMnu.style.left = mnuX+170 + 'px';
}

// Courtesy of SimplytheBest.net (http://simplythebest.net/info/dhtml_scripts.html)
function swapImgRestore() {
  var i,x,a=document.sr; for(i=0;a&&i<a.length&&(x=a[i])&&x.oSrc;i++) x.src=x.oSrc;
}
function preloadImages() {
  var d=document; if(d.images){ if(!d.p) d.p=new Array();
    var i,j=d.p.length,a=preloadImages.arguments; for(i=0; i<a.length; i++)
    if (a[i].indexOf("#")!=0){ d.p[j]=new Image; d.p[j++].src=a[i];}}
}
function findObj(n, d) {
  var p,i,x;  if(!d) d=document; if((p=n.indexOf("?"))>0&&parent.frames.length) {
    d=parent.frames[n.substring(p+1)].document; n=n.substring(0,p);}
  if(!(x=d[n])&&d.all) x=d.all[n]; for (i=0;!x&&i<d.forms.length;i++) x=d.forms[i][n];
  for(i=0;!x&&d.layers&&i<d.layers.length;i++) x=findObj(n,d.layers[i].document);
  if(!x && document.getElementById) x=document.getElementById(n); return x;
}
function swapImage() {
  var i,j=0,x,a=swapImage.arguments; document.sr=new Array; for(i=0;i<(a.length-2);i+=3)
  if ((x=findObj(a[i]))!=null){document.sr[j++]=x; if(!x.oSrc) x.oSrc=x.src; x.src=a[i+2];}
}
function showHideLayers() {
  var i,p,v,obj,args=showHideLayers.arguments;
  for (i=0; i<(args.length-2); i+=3) if ((obj=findObj(args[i]))!=null) { v=args[i+2];
    if (obj.style) { obj=obj.style    ; v=(v=='show')?'visible':(v='hide')?'hidden':v; }
    obj.visibility=v; }
}




Håber virkelig der er nogen som kan hjælpe mig... :-)
Avatar billede roenving Novice
08. oktober 2005 - 19:09 #1
Hvordan fucker den ?-)
Avatar billede pidgeot Nybegynder
08. oktober 2005 - 19:09 #2
Grunden til det går galt er egentlig meget åbenlys - de menuer du definerer bliver sat til at være placeret uden for 1024x768 området (husk at menuernes breede skal tælles med!)

Vil foreslå du enten gør dine menuer lidt smallere, eller overvejer om det måske kunne lade sig gøre at flytte lidt rundt på dem, lade dem overlappe en smule, etc.
Avatar billede fragze Juniormester
08. oktober 2005 - 19:14 #3
I kan se det her :-)

www.dammoel.dk/kreds62
Avatar billede pidgeot Nybegynder
08. oktober 2005 - 19:16 #4
Det går jo så yderligere galt fordi du placerer dem udfra det plads der er tilovers i venstre side på din høje opløsning.

Du kan prøve at finde en eller anden formel der lader dig beregne hvor meget plads der er der ude, og bruge offsets til at placerer dem korrekt.
Avatar billede roenving Novice
08. oktober 2005 - 19:24 #5
Grundlæggende kan heller ikke den menu placeres dynamisk, men det er muligt at lave en start-formel, så den ligger korrekt ved load !-)

Dvs. at du skal aftaste browser-vinduets bredde onload, og så ændre left-placeringer på elementerne, men det er en utaknemmelig opgave, som jeg kun ville påtage mig, hvis det var absolut nødvendigt !o]

-- ellers ville jeg finde en menu, som ikke blev placeret absolut !-)
Avatar billede fragze Juniormester
08. oktober 2005 - 19:31 #6
Hvad nu hvis der takkes og bukkes med en kold pilsner :-D
Avatar billede fragze Juniormester
09. oktober 2005 - 00:10 #7
Jamen jeg finder selv på noget :-)))
Avatar billede fragze Juniormester
27. oktober 2005 - 11:15 #8
^^
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