2013-02-27 13 views
8

ROZWIĄZANE PRZEZ VEGA BELOW. HERE IS THE WORKING FIDDLE. Przechowuję cały wpis dla przyszłych odwiedzających, aby zobaczyć, jak rozwiązano ten problem.Nie można obliczyć szerokości ukrytego elementu div


Próbuję utworzyć przycisk, który po odsłonięciu ujawnia pewne informacje na temat szuflady znajdującej się pod spodem.

Chciałem ułatwić wdrożenie na stronie, więc zmieniłem go w widget jQuery. Chciałbym go dostosować zgodnie z treścią przycisku i/lub na szufladzie, , ale teraz tego nie robię. Użytkownik powinien mieć możliwość umieszczenia pojedynczego znacznika HTML div z ukrytymi danymi, a to po prostu zadziała.

Idealnie szerokość przycisków/szuflad dostosowałaby się do maksymalnej wartości między nimi, tak aby szuflada była całkowicie ukryta, gdy znajduje się w stanie zamkniętym. Po prostu nie chcę, aby moi użytkownicy musieli mieszać przy ustawianiu stałej szerokości.

Potrzebuję pomocy!

Oto, co to będzie wyglądać następująco:

enter image description here

enter image description here

Danym HTML (pełny HTML w Fiddle):

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

Stosowna CSS (pełna CSS w 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; 

} 

Stosowna jQuery (pełna jQuery w 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 za ładne i czyste pytanie (i prezentacja). – Chris

+0

Wielkie dzięki :) Im lepsze pytanie, tym szybciej odpowiedź;) – Jon

+0

Szybką poprawką byłoby ustawienie stałej szerokości http://jsfiddle.net/dELNa/10/ –

Odpowiedz

2

Musisz obliczyć szerokość w oparciu o this przycisku. Zobacz poniżej,

$(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

Idealny! Dziękuję za pomoc i chęć dostosowania na podstawie mojego komentarza. Rządzisz! – Jon

+0

Upewnij się, że kliknąłeś znacznik wyboru obok tej odpowiedzi, aby inni wiedzieli, że zadziałało. – AlienWebguy

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

I że dostanie ostateczną wielkość obiektu plus wartość pyszne zawartości wewnątrz.

+0

Awansuj do "pysznych treści w środku".Dzięki za odpowiedź! – Jon

Powiązane problemy