Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

2 Stron V   1 2 >  
Reply to this topicStart new topic
> [JavaScript]Przesuwanie ofert.
MeGusta
post
Post #1





Grupa: Zarejestrowani
Postów: 155
Pomógł: 0
Dołączył: 6.07.2015

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


Witam,
Mam problem z zrobieniem przesuwania ofert, po kliknięciu w div który ma data-id="x" funkcja generuje z tablicy kod html a następnie wstawia go do diva .galery, problem w tym, że po kliknięciu na .move-left przesuwa się tylko o jedno lub wogole, dodatkowo funkcja generate_min ktora generuje html z miniaturkami zdjęć z tej samej tablicy generuje ostatnie zdjecie + nowe, a nie tylko nowe.

Klikniecie na oferte:

  1. $('.realize').click(function(){
  2.  
  3. $this = $(this);
  4.  
  5. var data = $this.attr('data-id');
  6.  
  7. $('body').append('<div class="black-screen"><div class="galery">' + generateview(data) + '</div></div>');
  8.  
  9. $('.move-right').click(function(){
  10. data++;
  11. $('.galery').html(generateview(parseInt(data) + 1))
  12. console.log(parseInt(data) + 1)
  13. });
  14.  
  15. $('.move-left').click(function(){
  16. $('.galery').html(generateview(parseInt(data) - 1))
  17. console.log(parseInt(data) - 1)
  18. data--;
  19. });
  20.  
  21. });


Funkcja generująca miniaturki:

  1. var min_img_for = [];
  2.  
  3. function generate_min(data)
  4. {
  5. $.each(data_realize[data][7], function(key, value) {
  6. min_img_for += '<div class="img-sml"> ' + value + ' </div>';
  7. });
  8.  
  9. return min_img_for;
  10. }


Do funkcji generateview podaję id z atrybutu data-id po którym wyswietlam dane z tablicy.

Struktura html:
  1. <div data-id="1" class="realize">
  2. <img src="img/realizacja-1.png" alt="" />
  3. <div class="realize-hover"></div>
  4. <div class="desc-realize">
  5. Tablice Reklamowe (Billboard)
  6. </div>
  7. </div>
  8. <div data-id="2" class="realize">
  9. <img src="img/realizacja-1.png" alt="" />
  10. <div class="realize-hover"></div>
  11. <div class="desc-realize">
  12. Tablice Reklamowe (Billboard)
  13. </div>
  14. </div>
  15.  
  16. i tak dalej


Sama tablica wygląda tak:
  1. var data_realize =
  2. [[
  3. 0,
  4. '<img src="./img/big-img-realize.png" />',
  5. 'Bilboard dla <br>"Galeria Krakowska"',
  6. 'Lorem Ipsum jes...',
  7. '21 dni',
  8. '5m x 2.5m',
  9. '500 zł',
  10. ['<img src="./img/min-image-realize.png" />', ''] // tu sa miniaturki
  11. ],
  12. ];


Ten post edytował MeGusta 28.08.2016, 13:07:20
Go to the top of the page
+Quote Post
nospor
post
Post #2





Grupa: Moderatorzy
Postów: 36 559
Pomógł: 6315
Dołączył: 27.12.2004




Sieczka... totalny brak logiki i jeden wielki haos....


Na poczatek masz od razu data zrzutowac na liczbe i potem mozesz normalnie dodawac i odejmowac.
var data = parseInt($this.attr('data-id'));


Jak juz raz odjales/dodales to nie rob tego ponownie w przekazywaniu do parametru.

No i patrz co piszesz bo wyglada jakbys losowo stukal w klawiature
Go to the top of the page
+Quote Post
MeGusta
post
Post #3





Grupa: Zarejestrowani
Postów: 155
Pomógł: 0
Dołączył: 6.07.2015

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


Poprawione:
  1. $('.realize').click(function(){
  2.  
  3. $this = $(this);
  4.  
  5. var data = parseInt($this.attr('data-id'));
  6.  
  7. $('body').append('<div class="black-screen"><div class="galery">' + generateview(data) + '</div></div>');
  8.  
  9. $('.move-right').click(function(){
  10. data++;
  11. $('.galery').html(generateview(data))
  12. });
  13.  
  14. $('.move-left').click(function(){
  15. $('.galery').html(generateview(data))
  16. data--;
  17. });
  18.  
  19. });


Dalej to samo, przerzuca się tylko o jedno, tak jakby data++ wykonywał się tylko raz.
Dodatkowo funkcja generate_min() tak jakby do starych zdjęć z pierwszego elementu tablicy dopisuje z drugiego elementu.

Ten post edytował MeGusta 28.08.2016, 13:18:16
Go to the top of the page
+Quote Post
nospor
post
Post #4





Grupa: Moderatorzy
Postów: 36 559
Pomógł: 6315
Dołączył: 27.12.2004




Nogdzie nie widze bys aktualizowal atrybut data-id wiec dosc logiczne ze ciagle ma te sama wartosc
Go to the top of the page
+Quote Post
MeGusta
post
Post #5





Grupa: Zarejestrowani
Postów: 155
Pomógł: 0
Dołączył: 6.07.2015

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


Zwiększam za każdym kliknięciem data++;
Próbowałem też:
  1. var self = $this;
  2. $('.move-right').click(function(){
  3. $('.galery').html(generateview(data))
  4. self.attr('data-id', data + 1)
  5. });


Ale dalej to samo.
Go to the top of the page
+Quote Post
nospor
post
Post #6





Grupa: Moderatorzy
Postów: 36 559
Pomógł: 6315
Dołączył: 27.12.2004




Cytat
Zwiększam za każdym kliknięciem data++;

Co z tego ze zwiekszasz jak i tak za kazdym razem to nadpisujesz o tutaj:
var data = $this.attr('data-id');

Cytat
Dodatkowo funkcja generate_min() tak jakby do starych zdjęć z pierwszego elementu tablicy dopisuje z drugiego elementu.

Bo nie zerujesz min_img_for
Go to the top of the page
+Quote Post
MeGusta
post
Post #7





Grupa: Zarejestrowani
Postów: 155
Pomógł: 0
Dołączył: 6.07.2015

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


Właśnie tu problem leży, że po kliknieciu na div .realize otwiera się okno i to wszystko jest w nim generowane, nie mam pojęcia jak to var data wyrzucić poza aby się nie nadpisywało na początku.
Go to the top of the page
+Quote Post
nospor
post
Post #8





Grupa: Moderatorzy
Postów: 36 559
Pomógł: 6315
Dołączył: 27.12.2004




Dobrze by bylo jakbys to wystawil online
Go to the top of the page
+Quote Post
MeGusta
post
Post #9





Grupa: Zarejestrowani
Postów: 155
Pomógł: 0
Dołączył: 6.07.2015

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


https://jsfiddle.net/9gh9h1f3/2/

Przesuwa się tymi strzałkami po prawo na dole.

Ten post edytował MeGusta 28.08.2016, 13:45:44
Go to the top of the page
+Quote Post
nospor
post
Post #10





Grupa: Moderatorzy
Postów: 36 559
Pomógł: 6315
Dołączył: 27.12.2004




A mozesz te strzalki dac na gore? Bo na moim lapku niestety nie jestem w stanie ich siegnac (IMG:style_emoticons/default/sad.gif)
Go to the top of the page
+Quote Post
MeGusta
post
Post #11





Grupa: Zarejestrowani
Postów: 155
Pomógł: 0
Dołączył: 6.07.2015

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


Jasne, proszę bardzo.

https://jsfiddle.net/9gh9h1f3/3/
Go to the top of the page
+Quote Post
nospor
post
Post #12





Grupa: Moderatorzy
Postów: 36 559
Pomógł: 6315
Dołączył: 27.12.2004




W prawo przesuwa ci sie tylko raz, bo jak klikniesz na to to nadpisujesz zawartosc diva nowym htmlem przez co tracisz przypisania click. Albo zainteresuj sie ON w jquery albo po kazdym nadpisaniu kodu html generuj nowe CLICK dla strzalek
Go to the top of the page
+Quote Post
MeGusta
post
Post #13





Grupa: Zarejestrowani
Postów: 155
Pomógł: 0
Dołączył: 6.07.2015

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


Masz na myśli abym generował onclick dla strzałek?
Go to the top of the page
+Quote Post
nospor
post
Post #14





Grupa: Moderatorzy
Postów: 36 559
Pomógł: 6315
Dołączył: 27.12.2004




Teraz generujesz CLICK dla strzales w momencie otworzenia okna. Gdy klikasz strzalke nadpisujesz stare strzalki nowymi i nowe strzalki nie maja juz CLICK. Albo wiec uzyj ON ktore bedzie sie podczepiac pod kazde strzalki albo za kazdym nadpisaniem okna tworz CLICK na nowo
Go to the top of the page
+Quote Post
MeGusta
post
Post #15





Grupa: Zarejestrowani
Postów: 155
Pomógł: 0
Dołączył: 6.07.2015

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


Kurcze nie rozumiem, moze dla tego ze dopiero zaczynam z javascriptem. Mógłbyś dać jakis przykład?
Go to the top of the page
+Quote Post
viking
post
Post #16





Grupa: Zarejestrowani
Postów: 6 381
Pomógł: 1116
Dołączył: 30.08.2006

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


W skrócie. Każdy element tak długo ma zdarzenia, jak długo występuje w dokumencie i nie zostanie nadpisany lub zdarzenie usunięte. Chyba że zdarzenie nasłuchuje rodzic wtedy nowo utworzony element będzie wiedział jak się zachować. Tu masz to opisane.
Go to the top of the page
+Quote Post
MeGusta
post
Post #17





Grupa: Zarejestrowani
Postów: 155
Pomógł: 0
Dołączył: 6.07.2015

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


Jeśli uzyję .on('click', function(){}) i potem .off() stracę this i np. wyłaczanie okna nie bedzie działac.
Go to the top of the page
+Quote Post
viking
post
Post #18





Grupa: Zarejestrowani
Postów: 6 381
Pomógł: 1116
Dołączył: 30.08.2006

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


Dlaczego masz this stracić? Albo można je przepisać do innej zmiennej albo przyjrzyj się w konsoli takim właściwościom jak event.delegateTarget
Go to the top of the page
+Quote Post
MeGusta
post
Post #19





Grupa: Zarejestrowani
Postów: 155
Pomógł: 0
Dołączył: 6.07.2015

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


Kurcze, siedze od rana nad tym i chyba nic sam nie wskóram, za mało jeszcze potrafię, cały czas sie uczę. Mógłby ktoś pomóc mi z tym kodem? Bardzo bym prosił.
Go to the top of the page
+Quote Post
nospor
post
Post #20





Grupa: Moderatorzy
Postów: 36 559
Pomógł: 6315
Dołączył: 27.12.2004




Jedyne co miales zrobic to zamienic CLICK na ON. W czym problem?
Go to the top of the page
+Quote Post

2 Stron V   1 2 >
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: 28.09.2025 - 07:31