adbacz
19.12.2012, 10:22:06
Załóżmy, że mamy stronę, na której jest kilka kontenerów, i losowo w różnych z nich znajduje się element, który jest pozycjonowany absolutnie, a jego rodzić relatywnie. Może się zdarzyć, że jest zagnieżdżenie div > div > div tych kontenerów na stronie, i raz na jakiś czas w tych trzech kontenerach znajdują się te pozycjonowane elementy. W takim przypadku, wszystkie nowe elementy, które są pozycjonowane, nachodzą na siebie.
Pytanie więc jest takie: Jak zrobić, aby te elementy nie nachodziły na siebie? Znamy ich szerokości i wysokości, ale nie znamy dokładnej pozycji bo za każdym razem znajdują się w innych miejsach strony.
Mam nadzieję, że dobrze wytłumaczyłem problem. Jeśli macie jakies pytania to walcie śmiało. Bardzo potrzebuje rozwiązania tego problemu a sam nie umiem sobie z tym poradzić więc proszę Was o pomoc.
piotrex41
19.12.2012, 11:24:46
Nie do końca rozumiem, ale może chodzić Ci o z-index (z CSSa), który ustawia który element jest "nad" innym.
adbacz
19.12.2012, 11:31:23
Nie, nie chodzi mi o z-index. To, że nachodzą to normalne, bo są pozycjonowane absolutnie. Chodzi mi o to, żeby przesunąć jednen o tyle, żeby nie nachodził na tego pod spodem.
Czyli, jeśli element A ma taki sam offset jak B, to przesuwamy element A lub B o tyle w dół, czyli dajemy mu taką wartość top, aby przesunął się w dół względem tego drugiego i znalazł się pod nim dosłownie. Nie w pozycji z-index pod nim, ale, żeby było widać na stronie, że jest jeden pod drugim.
piotrex41
19.12.2012, 12:23:56
To może sprawdzaj przez jQuery pozycję, i jeśli jest mniejsza lub większa od minimalnej (czyli takiej przy której nie nachodzą na siebie) to dalej przez jQuery możesz modyfikować atrybuty CSSa.
adbacz
19.12.2012, 12:50:24
Jaką pozycję? Względem czego? Możesz troche rozwinąć myśl?
piotrex41
19.12.2012, 13:52:28
Ciężko jest coś więcej powiedzieć, kiedy nie wiadomo, jak to wygląda. Możesz sprawdzać pozycję względem rodzica (kontenera nadrzędnego) albo tego drugiego DIVa, na którego nachodzi.
adbacz
19.12.2012, 14:45:04
Zrobiłem tak jak poniżej, i przesuwa mi elementy tak jak powinno, ale dodatkowo przesunięte zostają niektóre elementy, których przesunąć nie trzeba:
Kod
for(var i = 0 in elements)
{
for(var j = 0 in elements)
{
if(elements[i]['top'] >= elements[j]['top'])
{
elements[j]['object'].css('top', elements[i]['moved'] + 30 + 'px');
elements[i]['moved'] += 30;
elements[j]['top'] += 30;
}
}
}
PS. Istnieją tu na forum tagi dla Javascriptu?
piotrex41
19.12.2012, 14:54:28
Skoro ten kod przesuwa Ci elementy które powinien, to może ponadawaj tymże elementom jakieś unikalne ID i po tychże właśnie ID wybieraj element i przesuwaj tylko ten...
adbacz
19.12.2012, 15:24:06
A mógłbys to opisać w krokach? Bo nie rozumiem dlaczego miałbym nadawać elementowi ID po przesunięciu już go.
piotrex41
19.12.2012, 17:56:25
Dlaczego niby miałbyś coś nadawać po przesunięciu?
Przesuwa Ci się wiele elementów, bo wszystkie one odpowiadają kryteriom stawianym im przez kod JavaScript. Dadaj ID temu DIVowi który będziesz przesuwał, i w jQuery wyszukaj TYLKO ten div (za pomocą getElementById()) i tylko ten DIV przesuwaj. Dzięki temu unikniesz przesuwania się więcej niż 1 elementu...
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę
kliknij tutaj.