Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Nazwa edytowanego stylu jest zapisana w zmiennej - alternatywa dla eval()?
Forum PHP.pl > Forum > Po stronie przeglądarki
Sebusik
Załóżmy, że mam taką funkcję:
  1. function abc(a)
  2. {
  3. eval("document.getElementById('okno').style." + a + " = '10'");
  4. }


Oraz wywołanie:

  1. <a href="#" onclick="abc('width')">abc!</a>


Jak widać "width" mam w zmiennej. I pytanie - czy w tym wypadku istnieje jakaś alternatywa dla eval() (po prostu, żeby jej nie używać)?

Pozdrawiam.
erix
W JS każdy obiekt jest również tablicą, czyli:
[JAVASCRIPT] pobierz, plaintext
  1. obiekt.wlasnosc = asdasdasd;
[JAVASCRIPT] pobierz, plaintext

jest równoznaczne zapisowi:
[JAVASCRIPT] pobierz, plaintext
  1. obiekt['wlasnosc'] = asdasdasd;
[JAVASCRIPT] pobierz, plaintext

W drugim przypadku masz stringa jako klucz, a Twoja zmienna jest tym kluczem.

Teraz trzeba trochę wysilić szare komórki. wink.gif
Sebusik
O tym nie wiedziałem, dzięki wink.gif

Edit: I jednak pojawił się problem.

Mam "width" z małej litery, a potrzebuję z dużej, żeby użyć "offsetWidth" <--- da się coś zrobić, aby zadziałało to, gdy width jest pisane z małej litery?
erix
http://phpjs.org/functions/ucfirst:568
Sebusik
Dzięki, znalazłem to wcześniej, ale myślałem, że nie będę musiał tego używać wink.gif

Teraz mam taki "grubszy" problem. Całość opiera się na tym, że chcę zbudować funkcję, która będzie animowała różne elementy na stronie (szerokość jakiegoś diva, margines, itp.). Na początku było ok - do funkcji podawało się ilość pikseli, o którą div będzie się powiększał co jakiś czas (tu wykorzystanie setInterval). Ale gdy div miał szerokość 400, a wysokość 600, to powiększanie było nie równe (wiadomo, najpierw kończyła szerokość, potem wysokość). Więc wykombinowałem, że zamiast ilość pikseli będę umieszczał czas, w jakim powiększanie np. szerokości diva ma się zmieścić. I tu zaczynają się problemy. Wykombinowałem taki wzór:

ilosc pikseli na raz = ilosc pikseli/czas*predkosc

ilość pikseli na raz - o tyle będzie się przesuwał div za każdym razem (ta funkcja, co jest zapętlona w setInterval
ilosc pikseli = droga, jaką te powiększenie/pomniejszenie musi przejść (czy np. div ma 400, a ma mieć 600, więc 200)
czas = czas, w takim czasie te powiększenie musi się odbyć
prędkość = to jest zapętlenie w while, począwszy od 1 do... i tutaj nie wiem do ile, tego jeszcze nie ustaliłem do końca

Jak wiadomo, nie można przesunąć diva o np. 3.14 piksela, więc wynik powyższego działania musi być całkowity (tak też jest zapętlona powyżej pętla). Ale są liczby, gdzie wynik całkowity jest o np. 30 pikseli mniej, a wychodzi, żeby przesuwać o 3 piksele na raz z prędkością np. 8, więc cały czas będzie się przesuwać o 3, a na końcu nagle o 30.



Nie wiesz może, co innego (najlepiej prostszego biggrin.gif) zastosować, aby to dobrze działało? Albo udoskonalić to, co sam zrobiłem, nie wiem.
erix
Daruj sobie pisanie modułu animacyjnego od zera. Szkoda na to czasu, a każdy współczesny framework posiada odpowiednie funkcje do tego celu.
Sebusik
Dzięki :E

Już wpadłem na inny pomysł biggrin.gif
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.