Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [AJAX] Okna dialogowe, podstawy.
Wishermil
post
Post #1





Grupa: Zarejestrowani
Postów: 11
Pomógł: 0
Dołączył: 10.04.2009

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


Witam!

Rozpocząłem swoją przygodę z Ajaxem i nigdzie nie mogę znaleźć tutoriala odnośnie kreowania samych okienek, wszędzie pchają jakieś zaawansowane moduły (galerie itp.). Mi chodzi tylko o sam szkielet.

Tzn.:

Klikam na link, który wywołuje Ajaxa wykonującego operacje na pliku php i chciałbym, aby po skończeniu operacji pojawiło się zwykłe okienko z informacją: "Poprawnie wykonane." Klikamy w puste pole i okienko się ładnie zamyka.

Z góry dziękuje za pomoc.

Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
Kostek.88
post
Post #2





Grupa: Zarejestrowani
Postów: 376
Pomógł: 47
Dołączył: 23.08.2007
Skąd: Warszawa

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


Jakiś czas temu robiłem takowe okienka. Teraz z pamięci w wielkim skrócie:

  1. <div id="wrapper"><div>
  2.  
  3. <div id="container">
  4. <div id="popup">
  5. <h1>Title</h1>
  6. <p>Content</p>
  7. </div>
  8. </div>


To wyżej to szkielet HTML: wrapper to ma być ciemne, półprzezroczyste tło za oknem, stąd div jest wyrzucony poza obszar, container to kontener na Twoje okienko: oba mają mieć ustawione position:fixed oraz width i height na 100%. Z kolei #popup ma być na środku ekranu? Jak to zrobić? Jak masz stałą szerokość okna to:

  1. #popup {
  2. position: absolute;
  3. top: 50%;
  4. left: 50%;
  5. margin: -100px 0 0 -200px; // marginesy ujemne równe połowie szerokości i wysokości okna
  6. width: 400px;
  7. height: 200px
  8. }


Jeśli chodzi o dynamicznej wielkości okno, to poszukać centering div horizontal vertical w google, albo zrób jQuery.

pozostałe elementy: <h1> - tytuł, <p> - treść

A teraz AJAX: (umieszczam w kodzie PHP, bo ładniej koloruje, niech Cię nie zmyli to)

  1. $(document).ready(function(){
  2.  
  3. $('a.link').click(function(){
  4. $.ajax({
  5. type: 'POST', // lub GET
  6. success: function(data) {
  7. $('body').append(sciezka); // sciezka do pliku HTML
  8. },
  9. beforeSend: function(){
  10. // tutaj mozesz wstawic loader
  11. },
  12. error: function(){
  13. $('body').append(sciezka);
  14. }
  15. });
  16. });
  17.  
  18. });


Aha, do samego okienka wrzuć jeszcze trochę jQuery
  1. $('div#container').click(function(){
  2. $('div#wrapper').remove();
  3. $('div#container').remove();
  4. })


ew. jak masz dużo takich okienek aktywnych już, to odwołuj się poprzez $(this)

  1. $('div#container').click(function(){
  2. $(this).prev('div#wrapper').remove();
  3. $(this).remove();
  4. });


A wtedy też pozamieniaj ID na class, co by się nie duplikowało. Oczywiście w kodzie może być sporo błędów, sam to zrobiłem jeszcze inaczej, ale generalnie idea jest taka. Co do wrappera, to tak sobie teraz pomyślałem, że możesz go wywalić, a zostawić sam container, tylko jak będziesz chciał ustawić tło półprzezroczyste, to nie używaj opacity, bo okno też Ci się takie zrobi... no chyba że zdefiniujesz kolor np. rgba(0,255,0, 0.5) - zielony przezroczysty 50%.

Co do kliknięcia poza okno i jego likwidacji, gdzieś na stronce jquery4u.com widziałem rozwiązanie, że wystarczy dać $('html').click ..... i wywołać akcję dla zamknięcia okna. Testowałem i działa. Aha... jest jeszcze jeden problem, oczywiście do obejścia.... jak klikniesz w samo okno, to też znika (IMG:style_emoticons/default/biggrin.gif) Musisz dać coś takiego

  1. $('div.popup').click(function(event){
  2. event.stopPropagation();
  3. });


Zapobiegasz wówczas rozprzestrzenienia się akcji z kontenera na okienko: po dodaniu tego kodu i kliknięciu na kontener, okno zamknie się, po kliknięciu w sam popup - nie. Oczywiście w ogóle nie musisz ładować konterena, tylko dać np. <a href="">x</a> i ustawić go w prawym górnym rogu okna i ostylować odpowiednio.

PS. Do tego potrzebna Ci biblioteka jQuery
PS2. Możesz dograć jQueryUI do tego i zrobić tak:

  1. $(div.popup).draggable({handle: 'h1'});


Wtedy uruchomisz opcję przeciągania i upuszczania okna chwytając za pasek tytułu, tj. H1, ew. $(div.popup).draggable(); - daje Ci możliwość przeciągania okna, gdziekolwiek go chwycisz.

Sorki za bałagan w wypowiedzi, ale naprawdę na szybko napisałem.
Go to the top of the page
+Quote Post

Posty w temacie


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

 



RSS Aktualny czas: 6.10.2025 - 00:13