Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [JavaScript]Pobieranie danych z CSS
Sueroski
post 12.03.2010, 20:01:47
Post #1





Grupa: Zarejestrowani
Postów: 41
Pomógł: 0
Dołączył: 19.11.2008

Ostrzeżenie: (0%)
-----


Witam mam problem. Chciałbym zrobić powoli zanikające okienko, więc wykombinowałem coś takiego:
  1. <style type="text/css">
  2. #tresc{
  3. position: absolute;
  4. width: 100px;
  5. height: 100px;
  6. margin-top: 120px;
  7. margin-left: 120px;
  8. opacity: 1;
  9. filter: alpha(opacity=100);
  10. }
  11. <script type="text/javascript">
  12. function display(){
  13. document.getElementById('tresc').style.opacity=document.getElementById('tresc').style.opacity-0.01;
  14. }
  15. <a onclick="document.getElementById('tresc').style.visibility='visible';setTimeout('display()',100)" href="#">a</a>
  16. <div id="tresc">a <a onclick="document.getElementById('tresc').style.visibility='hidden';" href="#">a</a></div>

Niestety po kliknięciu na przycisk okienko (ten div z "a" i zamykającym okno "x") całkowicie znika zamiast stopniowo robić się przeźroczyste. Podejrzewam, że po prostu nie może odczytać coś danych z css. Pytanie tu - jak to zrobić?
Go to the top of the page
+Quote Post
Wicepsik
post 12.03.2010, 20:14:10
Post #2





Grupa: Zarejestrowani
Postów: 1 575
Pomógł: 299
Dołączył: 26.03.2009

Ostrzeżenie: (20%)
X----


Użyj frameworka jQuery.

Ten post edytował Wicepsik 12.03.2010, 20:15:24


--------------------
Go to the top of the page
+Quote Post
piotrooo89
post 12.03.2010, 20:18:28
Post #3


Newsman


Grupa: Moderatorzy
Postów: 4 005
Pomógł: 548
Dołączył: 7.04.2008
Skąd: Trzebinia/Kraków




a dokładnie fadeIn() i/lub fadeOut().


--------------------
Go to the top of the page
+Quote Post
Sueroski
post 12.03.2010, 20:26:05
Post #4





Grupa: Zarejestrowani
Postów: 41
Pomógł: 0
Dołączył: 19.11.2008

Ostrzeżenie: (0%)
-----


Ok. Udało mi się coś wykombinować. Oto działający kod:
  1. <style type="text/css">
  2. #tresc{
  3. position: absolute;
  4. width: 100px;
  5. height: 100px;
  6. margin-top: 120px;
  7. margin-left: 120px;
  8. opacity: 1;
  9. filter: alpha(opacity=100);
  10. }
  11. <script type="text/javascript">
  12. a=1;
  13. function display(){
  14. document.getElementById('tresc').style.opacity=a-0.1;
  15. a=a-0.1;
  16. //alert(1)
  17. setTimeout('display()',100)
  18. }
  19. <a onclick="document.getElementById('tresc').style.visibility='visible';setTimeout('display()',100)" href="#">a</a>
  20. <div id="tresc">a <a onclick="document.getElementById('tresc').style.visibility='hidden';" href="#">a</a></div>


Ten post edytował Sueroski 12.03.2010, 20:31:49
Go to the top of the page
+Quote Post
kamil4u
post 12.03.2010, 20:35:51
Post #5





Grupa: Zarejestrowani
Postów: 2 350
Pomógł: 512
Dołączył: 4.01.2009
Skąd: Wrocław / Świdnica

Ostrzeżenie: (0%)
-----


A jeśli jednak chcesz zrobić to w czystym JS, co jest bardzo proste to:
- nie setTimeout, a setInterval
- element.style pobiera style tylko z atrybutu style, więc po prostu przypisz przezroczystość w tym atrybucie
- jeżeli jednak nie możesz tego zrobić pobaw się z getComputedStyle - https://developer.mozilla.org/en/DOM:window.getComputedStyle
- użyj operatora -=
- referencję do elementu możesz zapisać do zmiennej globalnej, zamiast szukać elementu co sekundę w drzewie DOM

@up: popraw ten kod, stosując się do moich wskazówek, bo niestety zbyt ładnie on nie wygląda.

Ten post edytował kamil4u 12.03.2010, 20:40:58


--------------------
Go to the top of the page
+Quote Post
Sueroski
post 12.03.2010, 20:43:37
Post #6





Grupa: Zarejestrowani
Postów: 41
Pomógł: 0
Dołączył: 19.11.2008

Ostrzeżenie: (0%)
-----


Aha dzięki. A możesz mi wytłumaczyć, że za pomocą tego kodu:
  1. <style type="text/css">
  2. #tresc{
  3. position: absolute;
  4. width: 100px;
  5. height: 100px;
  6. margin-top: 120px;
  7. margin-left: 120px;
  8. opacity: 1;
  9. filter: alpha(opacity=100);
  10. }
  11. <script type="text/javascript">
  12. a=1;
  13. function close(){
  14. document.getElementById('tresc').style.opacity=a-0.01;
  15. a=a-0.01;
  16. }
  17. function open(){
  18. document.getElementById('tresc').style.opacity=a+0.01;
  19. a=a+0.01;
  20. }
  21. <a onclick="document.getElementById('tresc').style.visibility='visible';setInterval('open()',100)" href="#">a</a>
  22. <div id="tresc">a <a onclick="document.getElementById('tresc').style.visibility='hidden';setTimeout('close()',100)" href="#">a</a></div>

Okienko zamyka się bez efektu zanikania? Po prostu normalnie? Gdzie jest błąd?
Go to the top of the page
+Quote Post
kamil4u
post 12.03.2010, 21:37:07
Post #7





Grupa: Zarejestrowani
Postów: 2 350
Pomógł: 512
Dołączył: 4.01.2009
Skąd: Wrocław / Świdnica

Ostrzeżenie: (0%)
-----


Błędów jest bardzo dużo(lepiej zrób to według moich wskazówek, bo inaczej będzie tylko ciężej):
- document.getElementById('tresc').style.visibility='hidden'; <-- już na wstępie chowasz tego div-a, więc nie może być mowy o żadnym efekcie
- nie setTimeout, a setInterval (już Ci to pisałem)
- zmienna a rośnie w nieskończoność, a może być jedynie w przedziale <0,1>
- podpowiedź: użyj tej funkcji: clearInterval

https://developer.mozilla.org/pl/DOM/window.setInterval
https://developer.mozilla.org/en/DOM/window.clearInterval

Ten post edytował kamil4u 12.03.2010, 21:37:48


--------------------
Go to the top of the page
+Quote Post
Sueroski
post 13.03.2010, 10:50:19
Post #8





Grupa: Zarejestrowani
Postów: 41
Pomógł: 0
Dołączył: 19.11.2008

Ostrzeżenie: (0%)
-----


Ok. Dzięki za porady smile.gif
Jednak muszę was jeszcze troszkę pomęczyć haha.gif
Otóż warunek nie chce się spełnić. Postawiłem alert, żeby mi pokazywał wartość "a" i przy 3 wykonaniu odliczenia wychodzi "0.7000000000000001" i dalej ten błąd się cały czas ciągnie i warunek nie może się wykonać. JS kiepski z matmy, że nie potrafi poprawnie odliczać po 0.1? Proszę o pomoc (zaś haha.gif )
  1. <style type="text/css">
  2. #tresc{
  3. position: absolute;
  4. width: 100px;
  5. height: 100px;
  6. margin-top: 120px;
  7. margin-left: 120px;
  8. opacity: 1;
  9. filter: alpha(opacity=100);
  10. }
  11. <script type="text/javascript">
  12. a=1;
  13. function close(){
  14. document.getElementById('tresc').style.opacity=a-0.1;
  15. a=a-0.1;
  16. alert(a)
  17. if(a==0){
  18. clearInterval(intervalID)
  19. alert('close end')
  20. }
  21. }
  22. function open(){
  23. document.getElementById('tresc').style.opacity=a+0.1;
  24. a=a+0.1;
  25. if(a==1){
  26. clearInterval(intervalID)
  27. alert('open end')
  28. }
  29. }
  30. <a onclick="intervalID =setInterval('open()',10)" href="#">a</a>
  31. <div id="tresc">a <a onclick="intervalID=setInterval('close()',10)" href="#">a</a></div>
Go to the top of the page
+Quote Post
kamil4u
post 13.03.2010, 12:21:58
Post #9





Grupa: Zarejestrowani
Postów: 2 350
Pomógł: 512
Dołączył: 4.01.2009
Skąd: Wrocław / Świdnica

Ostrzeżenie: (0%)
-----


Nigdy nie dawaj alertów w nieskończonej pętli tongue.gif
Szczerze powiedziawszy nie wiem, dlaczego tak się dzieje, a nie chce mi się tego dokładnie analizować. Zamiast znaku równości(==)zastosuj znaki mniejsze równe i większe równe. I dla pewności w if-e przypisz od a dokładnie 1 lub 0.

Po co na siłę, chcesz korzystać z tej zmiennej a?
Kod
<style type="text/css">
#tresc{
    position: absolute;
    width: 100px;
    height: 100px;
    margin-top:  120px;
    margin-left: 120px;
    background-color: red;
}
</style>
<script type="text/javascript">
window.onload = function(){el = document.getElementById('tresc'); }
function close(){
    el.style.opacity-=0.1;
    if(el.style.opacity<=0){
        clearInterval(intervalID);
        alert('close end');
    }
}
function open(){
    el.style.opacity-=-0.1;

    if(el.style.opacity>=1){
        clearInterval(intervalID);
        alert('open end');
    }
}
</script>
<a onclick="intervalID=setInterval('open()',50);" href="#">a</a>
<div id="tresc" style="opacity: 1;">a <a onclick="intervalID=setInterval('close()',50);" href="#">a</a></div>
Nie wiem dlaczego, ale w funkcji open, nie specjalnie chce dzialac +=


--------------------
Go to the top of the page
+Quote Post
Sueroski
post 14.03.2010, 13:51:57
Post #10





Grupa: Zarejestrowani
Postów: 41
Pomógł: 0
Dołączył: 19.11.2008

Ostrzeżenie: (0%)
-----


Dzięki. Odświeżam, bo może ktoś wie czemu nie chce się dodawać? (wersja z odejmowaniem liczb ujemnych to też dobre wyjście, ale jestem ciekaw)
JS ma chyba jakąś inną logikę myślenia

Ten post edytował Sueroski 14.03.2010, 13:55:26
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 14.08.2025 - 00:54