Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Płynnie powiększany DIV
Forum PHP.pl > Forum > Po stronie przeglądarki > JavaScript
PcPablo
  1. function rozwijanie(nazwa,wys) {
  2. var divwys;
  3. divwys = document.getElementById(nazwa);
  4. divwys.style.height = wys;
  5. }
  6.  
  7. function wysokosc_over(nazwa) {
  8. var wys = 40;
  9. setInterval ('rozwijanie()',50);
  10. do {
  11. rozwijanie(nazwa,wys);
  12. wys=wys+2;
  13. } while (wys <= 140);
  14. }


Napisałem taką funkcje, która ma zwiększać płynnie wysokość DIVa po najechaniu na niego, ale nie działa to jak należy.

W IE nie działa setInterval(), czyli wysokość przeskakuje z od razu z 40 do 140,
W FF w nie działa sama zmiana wielkości i wywala zapętlony błąd:

Ostrzeżenie: Błąd podczas przetwarzania wartości dla 'height'. Deklaracja opuszczona.
Plik źródłowy: .../index.htm
Wiersz: 0


Co jest źle?
Czadus
<div id="test"></div>

do tego prosta funkcja napisana z wykorzystaniem jQuery

$("#test").animate({"height":"200px"});

na funkcji może wyglądać to np. tak:

function rozwijanie(nazwa,wys) {
$("#"+nazwa).animate({"height":wys+"px"});
}

Mam nadzieję, że to pomoże
230005
Źle, źle, wszystko źle smile.gif. Zacznijmy od tego, że nie podałeś warunku przerwania dla funkcji rozwijanie więc to wywołanie w setInterval() nigdy się nie kończy. Po drugie, zrobiłbym raczej coś w tym guście:

[JAVASCRIPT] pobierz, plaintext
  1.  
  2. function expand(id, tempHeight) {
  3. var elem = document.getElementById(id);
  4.  
  5. if(parseInt(elem.style.height) >= 340) {
  6. clearInterval(interval);
  7. return;
  8. }
  9.  
  10. tempHeight = parseInt(elem.style.height) + 2;
  11. elem.style.height = tempHeight + 'px';
  12. }
  13.  
  14. window.onload = function() {
  15. interval = null;
  16. var tempHeight = 0;
  17. var id = 'twoje id';
  18. var elem = document.getElementById(id);
  19.  
  20. elem.onmouseover = function() {
  21. interval = setInterval('expand(' + id + ', ' + tempHeight + ')', 50);
  22. }
  23.  
  24. elem.onmouseout = function() {
  25. clearInterval(interval);
  26. }
  27. }
  28.  
[JAVASCRIPT] pobierz, plaintext


jQuery upośledziło moją znajomość js więc nie krzycz jak będą jakieś błędy - w końcu jesteś programistą, to i powinieneś umieć je wychwycić, a sam algorytm jest dobry smile.gif. Po trzecie, tak jak zaproponował kolega wyżej - możesz to zrobić właśnie w jQuery:

[JAVASCRIPT] pobierz, plaintext
  1.  
  2. $("#test").animate({"height":"200px"}, 50); //drugi argument to interwał
  3.  
[JAVASCRIPT] pobierz, plaintext


ps.

W IE ci nie działało, bo nie miało prawa - przecież najpierw wywołujesz funkcję bez argumentów, więc tak na prawdę ona nic nie robi i w dodatku trwa to bez końca. Potem wywołałeś pętlę, a one działają błyskawicznie i dlatego właśnie wysokość ci przeskoczyła, zamiast płynnie się zmieniać. W FF było inaczej, bo to inna przeglądarka więc i silnik js wygląda nieco inaczej. A w ogóle, to w takich wypadkach polecam zapisać sobie na kartce co robi napisany przez siebie skrypt - prześledzić krok po kroczku, gdzie w danym momencie się znajdujemy. Mi to zawsze pomaga...

EDIT:

Nie wiedziałem do jakiego stopnia zapomniało mi się javascriptu dopóki nie przetestowałem tego co napisałem wcześniej, ale teraz już musi działać smile.gif.
PcPablo
No świetnie działa! nawet nie widziałem o istanieniu jQuery. winksmiley.jpg

Narazie działa jak bezpośrednio wywołam to w onmouseover, ale jak wrzuce w funkcje JS i wywołam tą funkcje poprzez onmouseover:

  1. <div class="menu_item" id="link1" onmouseover="wysokosc_over('link1')" onmouseout="wysokosc_out('link1')">


  1. function wysokosc_over(nazwa) {
  2. $(nazwa).animate({"height":"140px"}, 600);
  3. }


...to nie działa.
Pawel_W
omg, jquery się kłania...

jak chcesz się odwołać do obiektu po id to przed id wstawiasz #, czyli nie

  1. $(nazwa).animate({"height":"140px"}, 600);

a
  1. $('#'+nazwa).animate({"height":"140px"}, 600);


winksmiley.jpg
PcPablo
Dzi, pomotało mi się. No dobra, już działa ale niezłe jajca się dzieją, zobaczcie: http://www.ikielce.pl/test/

Tej samej funkcji używam dla wszystkich pasków do powiększania i pomniejszania DIVa no i w ogóle wszystkie paski mi fruwają...
Pawel_W
prościej by było chyba ze slideUp i slideDown, tak jak ja mam na swojej stronie, pawelwolak.info/portfolio

ew. możesz zrobić, żeby po najechaniu wszystkim ustawiało domyślną wysokość, a temu, na który najechałeś tą docelową

EDIT:
co do Twojej strony winksmiley.jpg
  1. .bg {
  2. width: 100%;
  3. height: 100%;
  4. position: absolute;
  5. }

ustawianie zwykłego obrazka jako tło strony poprzez pozycję absolutną to dosyć, hmm, nie wiem jak to nazwać - po prostu kombinujesz winksmiley.jpg

od tego jest background, ew. background-image

http://www.kurshtml.boo.pl/css/tlo_obrazkowe,tlo.html

polecam winksmiley.jpg
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.