Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> click event wewnątrz setIntrval
eFK
post 28.02.2017, 15:31:10
Post #1





Grupa: Zarejestrowani
Postów: 60
Pomógł: 0
Dołączył: 1.02.2014

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


Witam serdecznie

Tworzę takie małe menu w postaci obrazkowego, przewijanego strzałkami slaydera, w którym po naciśnięciu na strzałkę następne pierwszy element znika robiąc miejsce dla kolejnych, ukrytych za granicami div-a.

  1.  
  2. $("nav, nav .container, nav.container ul").css({"height":160,"overflow":"hidden"});
  3. $("nav .container ul li a").css({"width":160,"height":160});
  4.  
  5. $onPage=Math.floor(($('nav .container').width())/165); //zmienna potrzebna do obliczania ile divów ma zostać na stronie aby całe menu nie znikło
  6.  
  7. //po kliknięciu na div#next pobierane jest kliknięte 'a' z kolejnymi indexami, aby je usunąć tworząc miejsce dla elementu ukrytego wcześniej za krawędziami div.container
  8. var this_i={i:1};
  9. $('#next').click(function(){
  10. if(this_i.i<=$('nav .container ul li').length-$onPage){
  11. $('nav .container ul li:nth-child('+this_i.i+') a').animate({'width':0,'height':0,'fontSize':0},300,function(){this_i.i=this_i.i+1;$(this).css({'display':'none'});});
  12. }
  13. });
  14.  
  15. //przeciwnie do tego wyżej
  16. $('#prev').click(function(){
  17. if(this_i.i>1){
  18. this_i.i=this_i.i-1;
  19. $('nav .container ul li:nth-child('+this_i.i+') a').css({'display':'table-cell'}).animate({'width':160,'height':160,'fontSize':"175%"},300);
  20. }
  21. });
  22.  


Zmienna $onPage służy do zabezpieczenia, aby całe menu nie znikło, i zawsze dana ilość elementów pozostała na stronie. Niestety problem pojawia się w momencie zmniejszania przeglądarki, menu nie jest responsywne. Po zmniejszeniu okna przeglądarki nie da się oczywiście zobaczyć wszystkich elementów menu (jeżeli onPage=6, a pozycji li w .container 8, to zawsze będzie się blokować na 2 elemencie - w przypadku pokazywania kolejnych pozycji, a nie cofania- więc gdy okno przeglądarki zostanie pomniejszone tak, ze widoczne są na nim tylko np. 2 elementy, to menu przesunie się tylko o 2 pozycje nie pokazując aż czterech pozycji)

Aby temu zaradzić chcę skorzystać z setInterval. Niestety jeżeli jeżeli tylko $onPage włożę w setInterval to nic to nie daje, bo w dalszej części kodu nie jest on widoczny dynamicznie. Jeżeli wraz z $("#next").click..., $("#prev").click... to po naciśnięciu na div#next/div#prev wszystko wykonuje się po kilka razy , albo wcale. Click działa bardzo dziwnie. Jedyna podpowiedz jaką do tej pory znalazłam to użycie .on, a następnie .off wewnątrz setInterval, jednak wtedy wszystko odbywa się automatycznie, bez kliknięcia na divy.

Czy możecie mi coś poradzić? Znacie jakieś rozwiązanie tego problemu? Czy da się normalnie użyć click wewnątrz setInterval?
Z góry dziękuje za wszystkie wskazówki.

Ten post edytował eFK 28.02.2017, 15:32:19
Go to the top of the page
+Quote Post
guilty82
post 28.02.2017, 18:39:57
Post #2





Grupa: Zarejestrowani
Postów: 176
Pomógł: 31
Dołączył: 26.03.2007

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


A po co setInterval? Wylicz sobie zmienne na nowo przy resize elementu: https://api.jquery.com/resize/
Go to the top of the page
+Quote Post
trueblue
post 28.02.2017, 18:57:32
Post #3





Grupa: Zarejestrowani
Postów: 6 806
Pomógł: 1828
Dołączył: 11.03.2014

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


https://css-tricks.com/the-priority-navigation-pattern/ -> See the Pen Greedy Navigation...


--------------------
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: 19.07.2025 - 08:48