Visualizzazione dei risultati da 1 a 4 su 4
  1. #1
    Utente di HTML.it
    Registrato dal
    Sep 2004
    Messaggi
    1,344

    Menù a comparsa - modifica

    Ho questo menù - vedi codice di seguito (premetto non fatto da me!)

    E' una figata e l'ho personalizzato leggendo i dati da un database. Ora però necessito di una piccola modifica. A quanto mi sembra il codice va a scrivere un cookie per ricordare quale menù era rimasto aperto.
    Io, siccome cambio macro categorie, vorrei fare in modo che quando faccio questo cambio non ricordasse più quale era aperto (funzione invece che mantengo quando resto nella stessa tipologia di prodotto).
    Avevo quindi pensato a 2 soluzioni:
    1 - cancellare il cookie al cambio di macro-categoria
    2 - utilizzare la funzione collapseAll() nel codice

    In entrambi i casi però non so come fare...chi mi aiuta?

    Ecco il codice:

    function SDMenu(id) {
    if (!document.getElementById || !document.getElementsByTagName)
    return false;
    this.menu = document.getElementById(id);
    this.submenus = this.menu.getElementsByTagName("div");
    this.remember = true;
    this.speed = 3;
    this.markCurrent = true;
    this.oneSmOnly = true;
    }
    SDMenu.prototype.init = function() {
    var mainInstance = this;
    for (var i = 0; i < this.submenus.length; i++)
    this.submenus[i].getElementsByTagName("span")[0].onclick = function() {
    mainInstance.toggleMenu(this.parentNode);
    };
    if (this.markCurrent) {
    var links = this.menu.getElementsByTagName("a");
    for (var i = 0; i < links.length; i++)
    if (links[i].href == document.location.href) {
    links[i].className = "current";
    break;
    }
    }
    if (this.remember) {
    var regex = new RegExp("sdmenu_" + encodeURIComponent(this.menu.id) + "=([01]+)");
    var match = regex.exec(document.cookie);
    if (match) {
    var states = match[1].split("");
    for (var i = 0; i < states.length; i++)
    this.submenus[i].className = (states[i] == 0 ? "collapsed" : "");
    }
    }
    };
    SDMenu.prototype.toggleMenu = function(submenu) {
    if (submenu.className == "collapsed")
    this.expandMenu(submenu);
    else
    this.collapseMenu(submenu);
    };
    SDMenu.prototype.expandMenu = function(submenu) {
    var fullHeight = submenu.getElementsByTagName("span")[0].offsetHeight;
    var links = submenu.getElementsByTagName("a");
    for (var i = 0; i < links.length; i++)
    fullHeight += links[i].offsetHeight;
    var moveBy = Math.round(this.speed * links.length);

    var mainInstance = this;
    var intId = setInterval(function() {
    var curHeight = submenu.offsetHeight;
    var newHeight = curHeight + moveBy;
    if (newHeight < fullHeight)
    submenu.style.height = newHeight + "px";
    else {
    clearInterval(intId);
    submenu.style.height = "";
    submenu.className = "";
    mainInstance.memorize();
    }
    }, 30);
    this.collapseOthers(submenu);
    };
    SDMenu.prototype.collapseMenu = function(submenu) {
    var minHeight = submenu.getElementsByTagName("span")[0].offsetHeight;
    var moveBy = Math.round(this.speed * submenu.getElementsByTagName("a").length);
    var mainInstance = this;
    var intId = setInterval(function() {
    var curHeight = submenu.offsetHeight;
    var newHeight = curHeight - moveBy;
    if (newHeight > minHeight)
    submenu.style.height = newHeight + "px";
    else {
    clearInterval(intId);
    submenu.style.height = "";
    submenu.className = "collapsed";
    mainInstance.memorize();
    }
    }, 30);
    };
    SDMenu.prototype.collapseOthers = function(submenu) {
    if (this.oneSmOnly) {
    for (var i = 0; i < this.submenus.length; i++)
    if (this.submenus[i] != submenu && this.submenus[i].className != "collapsed")
    this.collapseMenu(this.submenus[i]);
    }
    };
    SDMenu.prototype.expandAll = function() {
    var oldOneSmOnly = this.oneSmOnly;
    this.oneSmOnly = false;
    for (var i = 0; i < this.submenus.length; i++)
    if (this.submenus[i].className == "collapsed")
    this.expandMenu(this.submenus[i]);
    this.oneSmOnly = oldOneSmOnly;
    };
    SDMenu.prototype.collapseAll = function() {
    for (var i = 0; i < this.submenus.length; i++)
    if (this.submenus[i].className != "collapsed")
    this.collapseMenu(this.submenus[i]);
    };
    SDMenu.prototype.memorize = function() {
    if (this.remember) {
    var states = new Array();
    for (var i = 0; i < this.submenus.length; i++)
    states.push(this.submenus[i].className == "collapsed" ? 0 : 1);
    var d = new Date();
    d.setTime(d.getTime() + (30 * 24 * 60 * 60 * 1000));
    document.cookie = "sdmenu_" + encodeURIComponent(this.menu.id) + "=" + states.join("") + "; expires=" + d.toGMTString() + "; path=/";
    }
    };

  2. #2
    Utente di HTML.it
    Registrato dal
    Sep 2004
    Messaggi
    1,344
    Nessuno che riesca a darmi qualche dritta?

  3. #3
    Utente di HTML.it
    Registrato dal
    Sep 2004
    Messaggi
    1,344
    La soluzione sarebbe lanciare questa funzione

    myMenu.collapseAll()

    che è già presente nello script.
    Siccome devo lanciarla solo in determinate condizioni, come è il codice per il lancio della funzione?

    Ad es.

    if a = 1 then ...

  4. #4
    Utente di HTML.it
    Registrato dal
    Sep 2004
    Messaggi
    1,344
    Nessun esperto che mi aiuta...e dai dovrebbe essere una cosa semplice

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 © 2025 vBulletin Solutions, Inc. All rights reserved.