Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [jQuery] rozszerzanie z przysłanianiem DIVa
Forum PHP.pl > Forum > Po stronie przeglądarki > JavaScript
krzychos7
Mam jakby tabelkę z 6 diwów w jednym (2 kolumny po 3 linie). Chciałbym zrobić efekt taki iż po kliknięciu na jeden z nich tak jakby zmaksymalizuje się on na powierzchnię która one wszystkie zajmują rozwijając więcej treści. Natomiast po ponownym kliknięciu by z powrotem powrócił na swoje miejsce. Z animacją daję radę, z pokazywaniem treści również. Jedynie mam problem z "wyrwaniem z szeregu" takiego DIVa, nawet jak zmieniam mu z-index to rozsuwa on resztę DIVów.

piotrooo89
kod pokaż kod jak robisz to rozszerzanie.
Czadus
Wstawiłbym to w tabelkę o takiej samej strukturze, jak twój układ divów, w każdą komórkę wstawiłbym diva z position absolute, odpowiednio oczywiście wypozycjonowanym itp. Powiększanie diva nie powinno spowodować rozsuwania, przesuwania itp pozostałej części strony z divami.

Rozwiązanie na szybko, nie widziałem Twojego kodu jeszcze.
krzychos7
Tak zaczełem testować:
  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/xhtml1-strict.dtd">
  2. <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="pl">
  3. <title>test</title>
  4. <meta http-equiv="Content-Type" content="text/xhtml; charset=utf-8" />
  5. <script type="text/javascript" src="jquery.js"></script>
  6. <script type="text/javascript" src="jquery.corner.js"></script>
  7. <script type="text/javascript" src="http://www.google.com/jsapi"></script>
  8. <script type="text/javascript">google.load("jqueryui", "1.7.2");</script>
  9. body {
  10. text-align: center;
  11. margin: 0;
  12. padding: 0;
  13. border: 0;
  14. background: #1a1a1a;
  15. }
  16. #kontener{
  17. text-align: left;
  18. width: 965px;
  19. margin: 0 auto;
  20. padding: 5px;
  21. color: #fff;
  22. margin-top: 30px;
  23. }
  24. .box{
  25. color: #b3dcf9;
  26. display: block;
  27. height: 140px;
  28. background: #f00;
  29. width: 474px;
  30. margin: 0px;
  31. margin-right: 4px;
  32. padding: 0px;
  33. float: left;
  34. margin-bottom: 4px;
  35. overflow: hidden;
  36. }
  37. <script type="text/javascript" >
  38. $(document).ready(function(){
  39. $('.box').corner("5px");
  40. $('.box').click(function(){
  41. var z = $(this).css('z-index');
  42. if(z==2){
  43. $(this).animate({width: '474px', height: '140px'}, 500, function(){
  44. $(this).css({'z-index': '0', 'position': 'relative'});
  45. });
  46. }
  47. else {
  48. $(this).animate({width: '952px', height: '428px'}, 500).css({'z-index': '2', 'position': 'absolute'});
  49. }
  50. });
  51. });
  52. </head>
  53. <div id="kontener">
  54. <div class="box">
  55. <p>
  56. 1
  57. </p>
  58. </div>
  59. <div class="box">
  60. <p>
  61. 2
  62. </p>
  63. </div>
  64. <div class="box">
  65. <p>
  66. 3
  67. </p>
  68. </div>
  69. <div class="box">
  70. <p>
  71. 4
  72. </p>
  73. </div>
  74. <div class="box">
  75. <p>
  76. 5
  77. </p>
  78. </div>
  79. <div class="box">
  80. <p>
  81. 6
  82. </p>
  83. </div>
  84. </div>
  85. </div>
  86. </body>
  87. </html>>


Pomogło dodanie display: absolute; podczas animacji (wcześniej odrzuciłem tą myśl gdyż wydawało mi się że pozycje ustosunkuje do całej strony a nie DIVa nadrzędnego).
Jednakże aktualnie każdy DIV najpierw pojawia się w górnym lewym roku "kontenera" i tam dopiero się rozszerza. Czy ma ktoś może pomysł jak zrobić by rozszerzał się od tego miejsca w którym się znajduje?
Chodzi mi przy tym o dość uniwersalne rozwiązanie (temu też nie tabelki) które będzie działało niezależnie od tego ile będę miał kolumn i linii w takim 'obiekcie'.
Czadus
Dzięki tabelce udało mi się wypozycjonować diva w określonym miejscu, i odziwo, działa to pod każda przeglądarką. Skoro dynamicznie możesz dodawać nowe divy itp, to dynamicznie możesz także stworzyć dowolną tabelkę a w każdej jej komórce dodać diva, następnie odpowiednio go wypozycjonować. Działa na 100%. Nie wiem, co jeszcze potrzebujesz, rozwiązanie również jest uniwersalne. Oczywiście div o zadanym position absolute lepiej, aby nie miał ustawionych atrybutów top oraz left.

Chyba, że pokażesz mniej więcej jak to dokładnie ma działać. Może jest inne rozwiązanie. Nie masz tego gdzieś online??
krzychos7
Ogulnie z wypozycjonowaniem nie ma zbytnio problemu, to że DIVy pod spodem się podsuwają to nie przeszkadza ważne że już nie wyskakują poza. Tu jest to online: http://cybers.pl/testy/1/
Zaś chodzi mi o to że teraz przed animacją przez to że przyjmuje position: absolute; wskakuje on na lewy górny róg tego DIVa i dopiero stamtąd się rozszerza. Natomiast chciałbym by rozszerzał się od miejsca gdzie się znajduje domyślnie. Nie widziałem czegoś takiego jeszcze w JavaScript, prędzej we Flashach. Zaś chodzi mi o coś podobnego do tego efektu: http://docs.jquery.com/UI/Effects/Transfer jednakże właśnie w połączeniu tego co mam, czyli zwykłe rozszerzanie się całego DIVa (nie generowanie ramki) tak jak jest w moim przykładzie jednak w sposób podobny do tej ramki, czyli od pierwotnego położenia.
Czadus
Hmmmm..... już widzę problem. Generalnie, trzebaby zastanowić się nad pobraniem pozycji danego diva względem okna. Jeżeli takie będziemy posiadać, można z pomocą funkcji jQuery animate nie tylko zwiększać/zmniajszać wielkość diva, ale również jego położenie w oknie poprzez atrybuty left oraz top.
krzychos7
Właśnie też powoli dochodzę do wniosku iż nie będzie to prosta sprawa. Chyba ogólnie będę musiał zrobić funkcję ustawiającą divy relatywnie do okna, by zawsze było centrowane zaś zarazem miało position: absolute; by można było wszystkie obiekty niezależnie od siebie animować.
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.
Invision Power Board © 2001-2025 Invision Power Services, Inc.