Visualizzazione dei risultati da 1 a 6 su 6

Discussione: offsetTop e IE7

  1. #1

    offsetTop e IE7

    Ciao a tutti,
    ho un problemino con un menù a tendina in JS.
    In pratica all'onOver sul testo indicato in Firefox mi apre i menu allineati in modo corretto mentre in IE me li apre in 0,0.
    Debuggando si vede che le proprietà offsetTop e offsetLeft da IE non vengono riconosciute in modo corretto.
    Il codice è il seguente:

    var box2 = document.getElementById(nodes[i].id);

    box2.style.left = box1.offsetLeft + self.position.level1.left + "px";

    Soluzioni??

    Grazie

  2. #2
    Utente di HTML.it L'avatar di Xinod
    Registrato dal
    Sep 2000
    Messaggi
    13,649
    se vuoi trattare gli offset in maniera consistente trai vari browser devi considerarli come coordinate assolute, sommando gli offset fino al topmost element
    codice:
    	function getCoords(el){
    		var c={x: 0, y: 0};
    		while (el) {
    			c.x+=el.offsetLeft;
    			c.y+=el.offsetTop;
    			el=el.offsetParent;
    		}
    		return c;
    	};
    var ccBox1=getCoords(document.getElementById('Box1'));

    troverai il suo left assoluto in ccBox1.x

    ciao

  3. #3
    niente da fare, sempre la stessa situazione.
    IE mi torna solo valori -1 e 0 mentre firefox torna i valori corretti...maledetto browser retrogrado...

  4. #4
    Utente di HTML.it L'avatar di Xinod
    Registrato dal
    Sep 2000
    Messaggi
    13,649
    fai vedere lo script in azione
    cosi' escludiamo qualsiasi altra possibilita'

  5. #5
    questo è lo script http://javascript.html.it/script/ved...t-orizzontale/ (non ti linko tutto il codice perchè è lunghetto. il pezzo di funzione in questione è questo:

    [...
    // position
    var box1 = document.getElementById(id + "-" + (tree.length - 1));
    var box2 = document.getElementById(nodes[i].id);

    var el = new Element(box1.id);
    if (1 == el.level) {
    if ("horizontal" == self.type) {
    box2.style.top = box1.offsetTop + box1.offsetHeight + self.position.level1.top + "px";
    if (self.browser.ie7) {
    box2.style.left = self.position.level1.left + "px";
    } else {
    box2.style.left = box1.offsetLeft + self.position.level1.left + "px";
    }
    } else if ("vertical" == self.type) {
    box2.style.top = box1.offsetTop + self.position.level1.top + "px";
    if (self.browser.ie7) {
    box2.style.left = box1.offsetWidth + self.position.level1.left + "px";
    } else {
    box2.style.left = box1.offsetLeft + box1.offsetWidth + self.position.level1.left + "px";
    }
    }
    } else {
    box2.style.top = box1.offsetTop + self.position.levelX.top + "px";
    box2.style.left = box1.offsetLeft + box1.offsetWidth + self.position.levelX.left + "px";
    }
    ...]

    richiamato da php in questo modo:

    [...
    <div class="section">
    BU System Management[img]img/arrowSml.gif[/img]
    <div class="section">
    IT Security
    Data Protection
    Infrastruttura accesso
    Network & System Monitoring
    Messaging & Collaboration
    Identity Management
    System Protection
    <font class="item2">-------------------------------</font>
    [b]Open Technologies[b][img]img/arrowSml.gif[/img]
    <div class="section">
    ISyC
    ISeC
    IAS
    </div>
    </div>
    </div>
    ...]

    l'esempio che trovi al link sopra mi va anche in IE.

  6. #6
    Utente di HTML.it L'avatar di Xinod
    Registrato dal
    Sep 2000
    Messaggi
    13,649
    questo particolare menu' a me non piace, per varie ragioni

    prima di tutto potresti ottenere lo stesso tipo di menu' con l' uso dei soli css
    (ne trovi di praticamente identici in http://www.cssplay.co.uk/menus/ )
    o con molto meno javascript
    http://htmldog.com/articles/suckerfish/dropdowns/
    e in entrambi i casi con un approccio al markup semanticamente piu' corretto

    se servono nel menu', o altrove in tutto il sito, effetti vari ti tornerebbe comodo usare una librieria come jquery,
    che ha plugin per ottenere menu' del genere, ancora basati su suckerfish
    http://users.tpg.com.au/j_birch/plugins/superfish/

    infine, se dici che l' esempio funziona sui 2 browser e il tuo no,
    come speri si possa capire perche' nella tua versione non funziona senza vederla?!

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.