2013-02-27 9 views
8

RISOLTO DA VEGA INFERIORE. HERE IS THE WORKING FIDDLE. Sto mantenendo l'intero post per i futuri visitatori per vedere come questo problema è stato risolto.Impossibile calcolare la larghezza di un div nascosto


Sto provando a creare un pulsante che, al passaggio del mouse, rivela alcune informazioni su un cassetto sottostante.

Volevo semplificare l'implementazione in una pagina, quindi l'ho trasformato in un widget jQuery. Mi piacerebbe che fosse regolato in base al contenuto del pulsante e/o sul cassetto, ma non lo sta facendo adesso. L'utente dovrebbe essere in grado di inserire il singolo tag div HTML con i dati nascosti e funzionerà.

Idealmente le larghezze dei pulsanti/cassetti si regolano al massimo tra i due in modo che il cassetto sia completamente nascosto quando si trova in stato chiuso. Semplicemente non voglio che i miei utenti debbano pasticciare impostando una larghezza fissa.

Ho bisogno di aiuto!

Qui è quello che sarà simile:

enter image description here

enter image description here

Rilevante HTML (HTML completo in Fiddle):

<div class="download" data-value="It's awesome!">Visit Website</div> 

Rilevante CSS (CSS insufficiente in Fiddle):

.button { 
    position:absolute; 
    padding:10px; 
} 

.drawer { 
    box-sizing:border-box; 
    z-index:-1; 
    position:absolute; 
    top:3px; 
    left:3px; 
    padding:6px 10px; 
    text-align:center; 
    -webkit-transition:0.3s left ease-in; 

} 

Rilevante jQuery (full jQuery in Fiddle):

$(function() { 
    $(".button").each(function() { 
     $(this).append("<div class='drawer'>" + $(this).data('value') + "<div class='handle'>||</div></div>"); 
     $(".drawer", this).css("width", $(".button").width()); 
    }); 

    $(".button").mouseenter(function() { 
     $(".drawer", this).css("left", $(".button").outerWidth()); 
    }).mouseleave(function() { 
     $(".drawer", this).css("left", "3px"); 
    }); 
}); 
+0

+1 per una domanda bella e pulita (e presentazione). – Chris

+0

Molte grazie :) Migliore è la domanda, più veloce è la risposta;) – Jon

+0

Una soluzione rapida sarebbe l'impostazione di una larghezza fissa http://jsfiddle.net/dELNa/10/ –

risposta

2

Hai avuto modo di calcolare la larghezza in base a this tasto. Vedi sotto,

$(function() { 
    $(".button").each(function() { 
     $(this).append("<div class='drawer'>" + $(this).data('value') + "<div class='handle'>||</div></div>"); 
     $(".drawer", this).width($(this).width()); //updated with this object 
    }); 

    $(".button").mouseenter(function() { 
     $(".drawer", this).css("left", $(this).outerWidth()); //updated with this object 
    }).mouseleave(function() { 
     $(".drawer", this).css("left", "3px"); 
    }); 
}); 

DEMO:http://jsfiddle.net/dELNa/11/

+0

Perfetto! Grazie per il tuo aiuto e la volontà di adeguarti in base al mio commento. Sei forte! – Jon

+0

Assicurati di fare clic sul segno di spunta accanto a questa risposta in modo che altri sappiano che ha funzionato. – AlienWebguy

1
$(".download").mouseenter(function() { 
    totalWidth = 0; 
    totalWidth += $(this).outerWidth(true); 
    $(".drawer", this).css("left", totalWidth); 
}).mouseleave(function() { 
    $(".drawer", this).css("left", "3px"); 
}); 

E che sarà ottenere la dimensione finale dell'oggetto più il valore dei deliziosi contenuti all'interno.

+0

Upvote per "contenuti deliziosi dentro".Grazie per la tua risposta! – Jon

Problemi correlati