Wątek przeniesiony 2022-12-30 14:46 z JavaScript przez Riddle.

Przemieszczanie <div> w pionie góra/dół

0

Witajcie

Proszę o pomoc

$(document).ready(function(){    
    var selected = null;
    var petID='';
    var itemlist = $('.familiars');
    var len=$(itemlist).length; 

    $("#familiar_items .familiars").click(function(){
        selected= $(this).index();
        petID= $(this).attr("id");
        $(".up").css("display", "none");
        $(".down").css("display", "none");
        $("#up_" + petID).css("display", "block");
        $("#down_" + petID).css("display", "block");
        $("#familiar_items .familiars").css('border-color', 'lightskyblue');
        $(this).css('border-color', 'lightgreen');
        $("#up_" + petID).click(function(e){
            e.preventDefault();
            if(selected > 0){
                itemlist = $('#familiar_items');
                jQuery($(itemlist).children().eq(selected-1)).before(jQuery($(itemlist).children().eq(selected)));
            }
            itemlist = $('.familiars');
        });
        $("#down_" + petID).click(function(e){
            e.preventDefault();
            if(selected < len) {
                itemlist = $('#familiar_items');
                jQuery($(itemlist).children().eq(selected+1)).after(jQuery($(itemlist).children().eq(selected)));
            }
            itemlist = $('.familiars');
        });
    });
});

W podanym kodzie działa on prawidłowo tylko wówczas gdy element nad elementem do przesunięcia w górę jest widoczny w całości na stronie, gdy zjadę niżej i tylko część elementu nad elementem przesuwanym jest widoczna, przesuwany element zmienia pozycję o dwa a nie o jedną pozycję w górę.

Co może być tego powodem?

2

A co chcesz zrobić tak na prawdę, jaki efekt chcesz uzyskać?

Bo to mi wygląda jak nieudana próba zrobienia czegoś prostego, ale w przekombinowany sposób.

0

No mam kilka divów które są pobierane z tablicy jeżeli w tablicy jest true to się pojawia jeżeli jest false to się nie pojawia.
I teraz po kliknięciu w diva aktywują się strzałki żeby można było je przesuwać góra dół.
Po tym to zapisuje do bazy, im wyższy div w tym wyższy priorytet.
Już na początku myślałem że problem jest w tym że te divy które są false się pojawiają jako ukryte i są zliczane I dlatego się przesuwa o dwa ominąłem to w ten sposób że najpierw pojawiają się wszystkie true i jest wliczana ich ilość a dopiero potem pojawiają się false, które nie są już liczone

1
Tomasz Topolski napisał(a):

No mam kilka divów które są pobierane z tablicy jeżeli w tablicy jest true to się pojawia jeżeli jest false to się nie pojawia.
I teraz po kliknięciu w diva aktywują się strzałki żeby można było je przesuwać góra dół.
Po tym to zapisuje do bazy, im wyższy div w tym wyższy priorytet.
Już na początku myślałem że problem jest w tym że te divy które są false się pojawiają jako ukryte i są zliczane I dlatego się przesuwa o dwa ominąłem to w ten sposób że najpierw pojawiają się wszystkie true i jest wliczana ich ilość a dopiero potem pojawiają się false, które nie są już liczone

Próbujesz zrobić jakąś grę układankę?

Co dokładnie próbujesz zrobić? Jaką aplikacje chcesz napisać?

0

to są ustawienia w grze, które są pobierane z JSON, i według tego na której pozycji w JSON jest dany Potworek, w taki sposób następuje priorytet danego Potworka, im wyżej tym wyższy priorytet.
No i teraz tak pobieram sobie z JSON, wszystkie potworki każdy jako div, ustawiam tak jak bym chciał żeby był ich priorytet i zapisuje do JSON.
Teoretycznie to działa już w praktyce też tyle tylko że czasami właśnie tak jak opisałem na początku jeżeli ten jeden div nad tym który chce przesunąć jest widoczny w całości to wtedy nie ma problemu przeskakuje o jedno A jeżeli jest niewidoczny bądź widoczny tylko fragment to przeskakuje o 2 w górę, o dziwo w dół działa prawidłowo.

0

Riddle, bardzo dziękuję za pomoc, uświadomiłeś mi, że wszystko działa tak jak powinno, a moja percepcja dlaczego jest źle polegała na tym iż okno przeglądarki nie przeskakiwało w górę do przenoszonego diva i stąd wydawało mi się iż coś mam nie tak.
Swoją drogę, zaraz wykombinuję śledzenie aktywnego diva. :)

Jeszcze raz dzięki za pomoc.

Kod jest poprawny,
Spróbuję jeszcze z tym co napisałeś we wiadomości, wkleję jeśli będzie dawało lepszy efeket.

Pozdrawiam

1 użytkowników online, w tym zalogowanych: 0, gości: 1