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

javascript poczatkujacy drag drop

Object Storage Arubacloud
+1 głos
147 wizyt
pytanie zadane 28 sierpnia 2020 w JavaScript przez nowyklemens Początkujący (430 p.)

Witam. Jestem początkujący... To mój pierwszy "projekt". Problem pojawia się na samym początku.
Nie umiem odświeżyć aktualnej ilości piłkarzy w formacji. Chciałbym docelowo określić maksymalne i minimalne ilości piłkarzy w określonej formacji ale po zdropowaniu piłkarza mam cały czas tę samą wartość. Próbowałem różnych rzeczy... ale.... pomocy...

<div id="f442">
     
         <div class="line" id="brline">
             
             
             <div class="player" id="br1" draggable="true"><div class="numr" id="nr1">1</div><span class="plaj" id="play1"></span><span class="infoplayer" id="infpl1">adama Traorse</span><span class="potencial" id="pot1">*****<br> 75</span></div>
         
         
         </div>   
         
          <div class="line" id="defline">
             
             
             
              <div class="player def" id="def1" draggable="true"><div class="numr" id="nr2">2</div><span class="plaj" id="play1"></span><span class="infoplayer" id="infpl2">adama Traorse</span><span class="potencial" id="pot1">*****<br> 75</span></div>
              
              <div class="player def" id="def2" draggable="true"><div class="numr" id="nr3">3</div><span class="plaj" id="play1"></span><span class="infoplayer" id="infpl3">adama Traorse</span><span class="potencial" id="pot1">*****<br> 75</span></div>
              
              <div class="player def" id="def3" draggable="true"><div class="numr" id="nr4">4</div><span class="plaj" id="play1"></span><span class="infoplayer" id="infpl4">adama Traorse</span><span class="potencial" id="pot1">*****<br> 75</span></div>
              
              <div class="player def" id="def4" draggable="true"><div class="numr" id="nr5">5</div><span class="plaj" id="play1"></span><span class="infoplayer" id="infpl5">adama Traorse</span><span class="potencial" id="pot1">*****<br> 75</span></div>
         
         
         </div> 
       
           <div class="line" id="midline">
             
             
               <div class="player mid" id="mid1" draggable="true"><div class="numr" id="nr6">6</div><span class="plaj" id="play1"></span><span class="infoplayer" id="infpl6">adama Traorse</span><span class="potencial" id="pot1">*****<br> 75</span></div>
               
               <div class="player mid" id="mid2" draggable="true"><div class="numr" id="nr7">7</div><span class="plaj" id="play1"></span><span class="infoplayer" id="infpl7">adama Traorse</span><span class="potencial" id="pot1">*****<br> 75</span></div>
               
               <div class="player mid" id="mid3" draggable="true"><div class="numr" id="nr8">8</div><span class="plaj" id="play1"></span><span class="infoplayer" id="infpl8">adama Traorse</span><span class="potencial" id="pot1">*****<br> 75</span></div>
               
               <div class="player mid" id="mid4" draggable="true"><div class="numr" id="nr9">9</div><span class="plaj" id="play1"></span><span class="infoplayer" id="infpl9">adama Traorse</span><span class="potencial" id="pot1">*****<br> 75</span></div>
         
         
         </div> 
          <div class="line" id="attline">
             
             
              <div class="player att" id="att1" draggable="true"><div class="numr" id="nr10">10</div><span class="plaj" id="play1"></span><span class="infoplayer" id="infpl10">adama Traorse</span><span class="potencial" id="pot1">*****<br> 75</span></div>
              
              <div class="player att" id="att2" draggable="true"><div class="numr" id="nr11">11</div><span class="plaj" id="play1"></span><span class="infoplayer" id="infpl11">adama Traorse</span><span class="potencial" id="pot1">*****<br> 75</span></div>
            
         
         
         </div> 
       
 </div> 
const lines = document.querySelectorAll('.line');
const players = document.querySelectorAll('.player');
const br1 = document.querySelector('#br1');
const defline = document.querySelectorAll('.def');
const midline = document.querySelectorAll('.mid');
const attline = document.querySelectorAll('.att');
const subs = document.querySelectorAll('#subs');
const players2 = document.querySelectorAll('.player2');
var lenD = defline.length;
var lenM = midline.length;
var lenA = attline.length;
var lenS = players2.length;

let draggedPlayer = null;

for (let i = 0; i < players.length; i++)
    {
        
        
        const player = players[i];
        
        player.addEventListener('dragstart', function()
                {
               
                draggedPlayer = player;
                setTimeout(function()
                       {
                player.style.display ='none';
                },0)
        });
        
        
        player.addEventListener('dragend', function()
                {
               
             setTimeout(function()
                          {
                     if(lenD>2 && lenD<6 && lenM>1 && lenM<7 && lenA>0 && lenA<6 && lenS>3 && lenS<10)
                {
                    player.style.display ='flex';
                    draggedPlayer=null;
                    console.log('dobrze');
                   
                  
                    
                }
                     else{
                         console.log('pizda');
                         
                     }   
               
                
               },0);
            
        });
        for (let j=0; j<lines.length; j++)
            {
                const line = lines[j];
                line.addEventListener('dragover', function(e){
                    e.preventDefault();
                    
                });
                
                 line.addEventListener('dragenter', function(e){
                    e.preventDefault();
                     this.style.bacgroundColor ='blue';
                      
                });
                
                 line.addEventListener('dragleave', function(e){
                    e.preventDefault();
                     this.style.bacgroundColor ='green';
                  
                });
                
                 line.addEventListener('drop', function(e){
                     
                    this.append(draggedPlayer);
                     this.style.backgroundColor ='grey';
                     
                     console.log('drop');
                      
                  
                
                });
            }
    }

 

1 odpowiedź

+2 głosów
odpowiedź 28 sierpnia 2020 przez ScriptyChris Mędrzec (190,190 p.)

W którym miejscu potrzebujesz mieć dostęp do odświeżonej liczby piłkarzy formacji?

Przyczyną Twojego problemu może być użycie na początku programu querySelectorAll, który zwraca statyczną listę elementów (jej zawartość nie zmienia się w czasie), na której opierasz wartości zmiennych len[D/M/A/S] - sprawdzasz je w ifach, ale one same z siebie nie zmienią wartości.

Nie analizowałem dokładnie aplikacji, więc trochę "na oko" powiem, że możesz albo zmienić querySelectorAll na document.getElementsByClassName (ona zwraca żywą kolekcję elementów), albo za każdym przeniesieniem piłkarza na nowo pobierać statyczną listę danej formacji przez querySelectorAll. Poza tym, rozmiar kolekcji (property length) powinieneś sprawdzać za każdym razem, a nie tylko na początku programu - można by to próbować zautomatyzować np. użyciem Proxy na kolekcji, ale skoro to Twój pierwszy projekt, to moim zdaniem szkoda komplikować sobie pracę.

komentarz 28 sierpnia 2020 przez nowyklemens Początkujący (430 p.)
już zaczynam od nowa. Właśnie skumałem, że querySelectorAll mi tu robi problemy.
Robię to już w zupełnie inny sposób, po prostu jak małpa po jednym divie i w taki sposób się będę uczył. Czytałem o tym Proxy... ale bez sensu to komplikować. Musze skumać to od podstaw, więc sorry za problem i dzięki za odpowiedź.
komentarz 28 sierpnia 2020 przez ScriptyChris Mędrzec (190,190 p.)

Mógłbyś uniknąć ponownego pobierania listy formacji przy każdym przenoszeniu piłkarza, gdybyś posłużył się referencją do jego elementu: element.parentNode.children.length -> to, za pośrednictwem parenta (który reprezentuje w Twoim kodzie formację piłkarzy), odczyta liczbę jego dzieci. Wyjdzie na to samo, ale bez konieczności bezpośredniego pobierania listy z DOM.

Zanim użyjesz takiego sposobu, upewnij się, że nie potrzebujesz dostępu do list reprezentujących pozostałe formacje - w takim przypadku bardziej spójne może się jednak okazać bezpośrednie pobieranie potrzebnych list. 

Podobne pytania

+1 głos
1 odpowiedź 222 wizyt
pytanie zadane 31 sierpnia 2020 w JavaScript przez nowyklemens Początkujący (430 p.)
0 głosów
1 odpowiedź 155 wizyt
pytanie zadane 16 września 2017 w JavaScript przez Justyna Obywatel (1,210 p.)
0 głosów
0 odpowiedzi 230 wizyt
pytanie zadane 4 lutego 2017 w Nasze projekty przez goran. Użytkownik (930 p.)

92,573 zapytań

141,423 odpowiedzi

319,648 komentarzy

61,959 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.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...