Προς το περιεχόμενο

js events


Προτεινόμενες αναρτήσεις

Δημοσ.

Παιδεύομαι 2 μέρες τώρα με κάτι στη js

Θέλω να μετακινώ κάποια αντικείμενα από element σε element. Στο 1ο klick παίρνω το innerHTML εφόσον έχει κάτι μέσα και στο δεύτερο μεταφέρεται αυτό όπου κάνω click.

Δημοσ. (επεξεργασμένο)

http://104.236.83.163/contentshift.html 

<!doctype html>
<html>   
	<head>    
		<meta charset="utf-8"> 
		<title>Grab and Drop</title>
		<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script>
		<script>
			$(document).ready(function(){
				var buffer = null;
				$('.selectables').click(function(e){
					e.preventDefault();
					if (buffer){
						$(this).html($(this).html()+buffer);
						buffer = null;
					}else{
						buffer = $(this).html()||null;
						$(this).empty();
					}
				});
			});
		</script>
		<style>
			.selectables{margin:0.5%;padding:0.5%;width:23%;min-height:32px;background-color:#ddf;}
		</style>
	</head>
	<body>
		<p class="selectables">
			Click to grab
		<p>
		<p class="selectables">
			Click to append
		<p>
		<p class="selectables">
			
		<p>
		<p class="selectables">
			
		<p>		
	</body>
</html>

 

κάτι σαν αυτό;

Επεξ/σία από ajaxmonkey4hire
Δημοσ.

Ναι κάπως έτσι στο δικό μου όμως δεν δουλεύει για διάφορους λόγους.  Ο βασικός είναι το e.target δεν είναι αυτό που θέλω.

Το html είναι εδώ https://github.com/k33theod/chess-2-players-javascript-drag-n-drop/blob/master/test.html και το css εδώ https://github.com/k33theod/chess-2-players-javascript-drag-n-drop/blob/master/chess_style.css

 

 

Δημοσ.

χωρίς να το έχω κοιτάξει σε βάθος, χρησιμοποιείς drag events και αυτά φαίνεται να λειτουργούν. Click events δεν βλέπω να έχεις πουθενά. Θέλεις να βάλεις και click events;

Ένα άλλο πράγμα που είδα είναι ότι δένεις τα events .setAttribute και όχι το ειδικό για την δουλειά .addEventListener.

Δημοσ. (επεξεργασμένο)

Ναι θέλω να αντικαταστήσω το drag με 2 κλικ.  Έχω κάνει αυτό τελικά σήμερα που φαίνεται να δουλευει αλλά δεν είμαι σίγουρος

var click_nums=0;
var pawn_to_move='';
Tetragona.forEach( function handler(tet, index, olla) 
{   
    tet.addEventListener("click", function click_handler(ev)
    {
        if(click_nums==0)
        {
            if (ev.target.hasChildNodes())
            {   
                click_nums+=1;
                pawn_to_move=ev.target;
            }
        }
        else
        {
            if (ev.target.hasChildNodes())
            {
                ev.target.parentNode.replace_pawn(pawn_to_move);
                pawn_to_move='';
            }
            else
            {
                console.log(ev.target); 
                ev.target.set_pawn(pawn_to_move);
            }
            click_nums=0;
        }
    }, true)
} );
18 λεπτά πριν, ajaxmonkey4hire είπε

Ένα άλλο πράγμα που είδα είναι ότι δένεις τα events .setAttribute και όχι το ειδικό για την δουλειά .addEventListener.

όχι απλά περνάω τα attributes με js για να μην τα γράφω στο html.

Επεξ/σία από k33theod
Δημοσ.

Δοκίμασε τα παρακάτω (από τα δικά σου).

//Drag n drop
//Tetragona.forEach(accept_drag);
//piece.forEach(make_dragable);

var click_nums=0;
var pawn_to_move='';

Tetragona.forEach(accept_click);

function accept_click(item)
{
	item.addEventListener("click", 
    
          function(ev) 
          {

              if(click_nums==0)
              {			
                  if (ev.target.hasChildNodes())
                  {  	
                      click_nums=1;		
                      pawn_to_move=ev.target;			
                  }		
              }
              else if(click_nums==1)
              {			
                  click_nums=0;

                  var attacker = pawn_to_move;
                  if (piece.includes(ev.target)){
                      ev.neu_target = ev.target.parentNode;
                  }
                  var x1 = parseInt(Tetragona.indexOf(attacker.parentNode)/8);
                  var y1 = Tetragona.indexOf(attacker.parentNode)%8;
                  var x2= parseInt(Tetragona.indexOf(ev.target)/8);
                  var y2 =Tetragona.indexOf(ev.target)%8;
                  if (ev.neu_target){
                      x2= parseInt(Tetragona.indexOf(ev.neu_target)/8);
                      y2 =Tetragona.indexOf(ev.neu_target)%8;
                  }
                  if (attacker.color==current_player)
                      move(x1,y1,x2,y2,ev);			
              }

          }
	
	, true)
}

 

 

Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε

Πρέπει να είστε μέλος για να αφήσετε σχόλιο

Δημιουργία λογαριασμού

Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!

Δημιουργία νέου λογαριασμού

Σύνδεση

Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.

Συνδεθείτε τώρα
  • Δημιουργία νέου...