• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Rekurencja - jQuery

0 głosów
253 wizyt
pytanie zadane 7 listopada 2017 w JavaScript przez lastavenger Obywatel (1,060 p.)
var act = 1;
var limit = 4;
$(document).ready(function() {
   timer2 = setInterval(auto, 3000); 
});

$("#right").on("click", function() {
    act++;
    if (act > limit){
        act = 1;
    }
    console.log(act);
    clearTimeout(timer2);
    change();
});
$("#left").on("click", function() {
    act--;
    if (act < 1){
        act = limit;
    }
    console.log(act);
    clearTimeout(timer2);
    change();
});

function auto() {
    act++;
    if (act > limit){
        act = 1;
    }
    console.log(act);
    change();
};
$("#1").on("click", function () {
    act = 1;
    clearTimeout(timer2);
    change();
});
$("#2").on("click", function () {
    act = 2;
    clearTimeout(timer2);
    change();
});
$("#3").on("click", function () {
    act = 3;
    clearTimeout(timer2);
    change();
});
$("#4").on("click", function () {
    act = 4;
    clearTimeout(timer2);
    change();
});
           
function change() {
    if (act == 1){
        $(".slides").animate({
        marginLeft: "0px"
    },800);
    }
    else if (act == 2){
        $(".slides").animate({
        marginLeft: "-640px"
    },800);
    }
    else if (act == 3){
        $(".slides").animate({
        marginLeft: "-1280px"
    },800);
    }
    else if (act == 4){
        $(".slides").animate({
        marginLeft: "-1920px"
    },800);
    }
}

Witam

Napisałem kod do slidera, bardzo fajnie działa, więc nie chce w nim nic zmieniać, ale mam problem... strasznie dużo jest w nim powtórzeń, czy macie pomysł jak go poprawić ?

1 odpowiedź

0 głosów
odpowiedź 7 listopada 2017 przez rafal.budzis Szeryf (85,900 p.)
wybrane 7 listopada 2017 przez lastavenger
 
Najlepsza

W funkcji change na IFie robisz zmniejszanie wartości o 640px co skok. Ja bym radził to zmienić na funkcje która to obliczy. Na początku funklcji dodaj liczenie:
 

var margin = (act * -640) + "px";



potem wystarczy jedno wywołanie


$(".slides").animate({
        marginLeft: margin
},800);


Natomiast odnośnie kodów
 

$("#1").on("click", function () {
    act = 1;
    clearTimeout(timer2);
    change();
});



Należy zwrócić uwagę iż różną się tylko wartością przypisywaną do act oraz wartośc przypisywana do act jest taka sama jak ID elementu. Dlatego też myśle ze dobrym rozwiązaniem jest przypisanie act wartości ID klikniętego elementu. Zrobisz to za pomocą.
 

act = $(this).attr("id");



Następnie wystarczy zmodyfikować selektor "#1" aby uwzględnić wszystkie elementy "#1, #2, #3".

komentarz 7 listopada 2017 przez lastavenger Obywatel (1,060 p.)
Wszystko zrozumiane dzięki wielkie za porady i już się za to zabieram :D

Podobne pytania

0 głosów
1 odpowiedź 357 wizyt
pytanie zadane 14 stycznia 2023 w C# przez Freak44 Początkujący (300 p.)
0 głosów
1 odpowiedź 395 wizyt
pytanie zadane 10 stycznia 2023 w C# przez Freak44 Początkujący (300 p.)
+2 głosów
1 odpowiedź 442 wizyt
pytanie zadane 10 maja 2022 w Rozwój zawodowy, nauka, praca przez maxkolanko1998 Gaduła (3,230 p.)

93,604 zapytań

142,529 odpowiedzi

322,997 komentarzy

63,092 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj

Kursy INF.02 i INF.03
...