Przed snem się Wam wyżalę apropo moich dzisiejszych doświadczeń ze zdarzeniem onResize ;) (jakby ktoś nie wiedział to zdarzenie to występuje przy zmianie wielkości elementu ;) ).

Jakoś tak początkowo odczuwałem potrzebę wykorzystania tego zdarzenia w jednym ze skryptów (żeby nie kombinować z różnymi CSS dla różnych przeglądarek), ale szybko mi się ten pomysł odwidział. Dlaczego ? Zawiodłem się na IE (w sumie to nic dziwnego), ale o dziwo Opera też nie pokazała się z najlepszej strony O_o Oczywiście może to ja mam jakiś problem ze swoją wizją działania zdarzenia onResize - według mnie powinno ono wystąpić wtedy gdy użytkownik zmieni rozmiar elementu (w moim wypadku okna) i puści przycisk myszki. No i tak jest... ale tylko w Firefoksie ;) Opera generuje to zdarzenie także podczas zmieniania rozmiaru okna ( to znaczy wtedy gdy użytkownik jeszcze nie puści przycisku myszki ) i jest wtedy tych zdarzeń automatycznie wielokrotnie więcej... Natomiast IE... no tu muszę przyznać, że poczułem się rozbity inwencją twórczą programistów z Redmond - kliknięcie przycisku maksymalizującego okno (przy przywracaniu okna to samo) generuje uwaga.... 3 (słownie: trzy) zdarzenia onResize... Gromkie brawa dla tych panów... Żeby było jeszcze ciekawiej to ponoć IE udostępnia zdarzenie onResizeEnd (i onResizeStart też ponoć), ale jakoś nie udało mi się wywołać tego zdarzenia... Gdzieś nawet wyczytałem, że element, któremu chcemy przypisać to zdarzenie musi mieć właściwość contentEditable ustawioną na true, ale u mnie nic to nie zmieniło poza tym, że zrobiłem sobie notatnik z IE ;)

Przygotowałem prosty przykład, który odpalony pod różnymi przeglądarkami da Wam odpowiedź na to ile razy występuje zdarzenie onResize podczas zmian rozmiaru okna : PRZYKŁAD ;)

Jakby ktoś jeszcze po obadaniu tego przykładu nie rozumiał sensu tytułu to powiem tak - co by było gdyby zdarzeniu onResize przypisać jakąś bardziej skomplikowaną funkcję ? Parę zmian rozmiaru okna w IE i zwis gwarantowany (mi się zwiesił raz nawet na przykładzie który podałem, także wiecie... :D ).

Jak widać lepiej się pomęczyć i zrobić ile wlezie za pomocą CSS niż katować komputer użytkownika setkami zdarzeń onResize (parę zmian rozmiaru okna w IE i już 500 zdarzeń onResize wykonanych)... Czytałem co prawda, że można pokombinować z określeniem co ile może się wykonać to zdarzenie (Date,getTime i sprawdzanie czy jakiś określony czas wcześniej zdarzenie już nie miało miejsca), ale mi się udało co najwyżej ograniczyć ilość zdarzeń w Operze i sprawić, że w IE zdarzenie onResize występowało przy pierwszym przesunięciu kursora zaraz po wciśnięciu przycisku myszki ;) Generalnie nie wiem jak to się stało (bo z założenia miało to działać inaczej) ale efekt ciekawy ;] W każdym razie lepiej unikać tego eventu ;)

P.S.: Oczywiście, jeśli ktoś ma inne oczekiwania wobec onResize i chce by zdarzenie to występowało często to będzie narzekał na Firefoxa... W sumie to Opera ma chyba optymalne rozwiązanie, ale co z tego skoro każda przeglądarka interpretuje ten event inaczej ?

Komentarze do wpisu "onResize - lepiej nie używać...":

1. cimlik napisał(a):
13 kwietnia 2007, 08:00:59

W IE podczas maksymalizowania występują 3 onResize, podczas rozszerzania okna 2, 3, 4 ;).
W sumie i tak nie sprawdziłeś wszystkich przeglądarek ;).

2. matipl napisał(a):
13 kwietnia 2007, 08:10:06

Przecież tak polega onResize, zmieniasz rozmiar? to masz zdarzenie, a puszczenie mychy nie ma nic wspólnego.
To tak jak z onChange…

3. Dziudek napisał(a):
13 kwietnia 2007, 15:15:52

@cimlik – skupiłem się na trzech najpopularniejszych – reszta i tak jest używana przez promil użytkowników (a poza tym sami mogą dzięki przykładowi zobaczyć jak zachowuje się w nich zdarzenie) ;)

@matipl – no właśnie tu bym polemizował... Według mnie zmiana rozmiaru następuje wtedy gdy puścisz przycisk myszki – wtedy zmieniłeś rozmiar okna na pożądany… A występowanie zdarzeń w czasie zmiany rozmiaru okna może doprowadzić do zawieszenia przeglądarki, jeżeli jest w tym czasie wykonywane zbyt wiele operacji – dlatego trzeba na to zdarzenie co najmniej uważać, a najlepiej go unikać bo nigdy nie wiesz ile razy (poza Firefoxem) wystąpi dane zdarzenie – dla przykładu zmień rozmiar okna w Operze z odpalonym moim przykładem raz szybko, a raz wolno – przy wolnym zmienianiu rozmiaru zobaczysz jak wiele razy zdarzenie jest generowane ... A 3 zdarzenia przy maksymalizacji okna w IE to już w ogóle jest komedia… ale ta przeglądarka to w ogóle jest jeden wielki joke…

4. Livio napisał(a):
14 kwietnia 2007, 19:19:06

Mam 2 obiekcje
1) wymień kapcia (captcha)
2) i nie pisz ‘Firefoxie’ bo to nieludzkie, pisz ‘Firefoksie’, ‘Firefoksa’, ‘Firefoksowi’. Analogicznie do tego pisze się ‘Linuksa’, ‘Linuksowi’ itede.

5. Dziudek napisał(a):
14 kwietnia 2007, 19:45:23

@Livio – co do captcha to nie wiem o co dokładnie Ci chodziło, ale może o czytelność ? Zwiększyłem szerokość i zmniejszyłem ilość punktów zniekształcających – powinno być czytelniej… Nic więcej właściwie zrobić nie mogę bo to sprawa systemu blogowego… (znaczy mogę na siłę coś wykombinować ale to za dużo roboty jak dla mnie obecnie…)

co do pisowni nazwy Firefox to bym się zastanawiał – masz racje ale tylko połowicznie ;) Powinienem pisać „ks” zamiast „x” tylko w przypadku miejscownika – w pozostałych przypadkach obie formy są dopuszczalne (błąd w wypadku słowa „Firefoxie” poprawiłem) ;) Źródło

6. pepkin88 napisał(a):
26 stycznia 2010, 15:02:49

zgadzam się z matipl, właśnie tak powinno działać zdarzenie onresize

ale nawet jeśli ktoś by chciał ograniczyć ilość przechwytywanych zdarzeń, może to w prosty oprogramować

niestety w super-z-dupy-przeglądarce-fireshit nie można było wykonać czynności odwrotnej
teraz dogoniła konkurencję, co nie zmienia faktu, że znów była w tyle, nic dziwnego w sumie

chrome też poprawnie interpretuje to zdarzenie

a co do odmiany firefoxie, to od niedawna to też jest poprawne

popraw jeszcze ten formularz, bo już 4 razy mi zniknęło to co pisałem tylko dlatego, że kliknąłem na textarea

Dodaj komentarz:

Textile Lite włączony ( szczegółowy opis znaczników ):
*strong* | # lista numerowana | * lista wypunktowana | _em_ | __italic__ | "link":http:// | bq. cytat.