鍍金池/ 問答/PHP  HTML/ 關(guān)于2048游戲 左移動總是出現(xiàn)位置不準確問題 求教

關(guān)于2048游戲 左移動總是出現(xiàn)位置不準確問題 求教

代碼如下:

<!DOCTYPE html>
<html>
<head>
<meta charset='GBK'>
<title></title>
<style>

.grid-content{
width:480px;
height:480px;
padding:20px;
text-align:center;
position:relative;

}
.grid{
width:100px;
height:100px;
margin-right:20px;
border-radius:5px;
background-color:grey;
position:absolute;
}

.contentClassName{
 border-radius:5px;
 font-family:'微軟';
 font-size:25px;
 font-weight:bold;
 text-align:center;
 line-height:100px;
 position:absolute;
}

</style>
<script>

window.onload=newGame;
var board=new Array();


function newGame(){
  init();
  generateNumber();
  generateNumber();
}
function init(){
 for(var i=0;i<4;i++){
  for(var j=0;j<4;j++){
     var grid=document.getElementById('grid-'+i+'-'+j);
     console.log(grid);
     grid.style.position='absolute';
     grid.style.cssText='left:'+(20+120*j)+'px;'+'top:'+(20+120*i)+'px';
     console.log(grid.style.left);
   

}

}

for(var i=0;i<4;i++){
    board[i]=new Array();
    for(var j=0;j<4;j++){
    board[i][j]=0;
    console.log('2');
}
}
  numberCell();





}



function numberCell(){
    var gridContent=document.getElementById('gridContent');
    

    for(var i=0;i<4;i++){
    for(var j=0;j<4;j++){
    
    var content=document.createElement('div');
    content.id='gridcontent-'+i+'-'+j;
    content.className='contentClassName';
   
  
    gridContent.appendChild(content);
    console.log(content.id);

    var numbercell=document.getElementById('gridcontent-'+i+'-'+j);
    console.log(numbercell);
   
    if(board[i][j]==0){
   
    numbercell.style.height='0px';
    numbercell.style.width='0px';
    numbercell.style.top=(20+120*i)+'px';
    numbercell.style.left=(60+120*j)+'px';
    
}else{
    numbercell.style.width='100px';
    numbercell.style.height='100px';
    numbercell.style.top=(50+120*i)+'px';
    numbercell.style.left=(50+120*j)+'px';
    
    numbercell.style.backgroundColor=getBackground(board[i][j]);
    numbercell.style.color=getColor(board[i][j]);
    numbercell.innerText=board[i][j];
}
    

}
}
}


function getColor(number){
    if(number<=4){
       return 'black';

 return 'white';

}

}
function getBackground(number){
    switch(number){
    case 2:return 'blue';break;
    case 4:return 'grey';break;
    case 8:return 'pink';break;
    case 16:return 'red';break;
    }
    return black;
}

function generateNumber(){
     if(nospace(board))
     return false;
     ranX=parseInt(Math.floor(Math.random()*4));
     ranY=parseInt(Math.floor(Math.random()*4));

     while(true){
     if(board[ranX][ranY]==0)
     break;
     
     ranX=parseInt(Math.floor(Math.random()*4));
     ranY=parseInt(Math.floor(Math.random()*4));


}
    var ranNum=Math.random()<0.5?2:4;
    
    board[ranX][ranY]=ranNum;

    showAnimate(ranX,ranY,ranNum);
   return true; 
    

}

function showAnimate(x,y,num){
     
   var numberCell=document.getElementById('gridcontent-'+x+'-'+y);
   
    numberCell.style.backgroundColor=getBackground(num);
    numberCell.style.color=getColor(num);
    numberCell.innerText=num;

    numberCell.style.width='100px';
    numberCell.style.height='100px';
    numberCell.style.top=(20+120*x)+'px';
    numberCell.style.left=(20+120*y)+'px';


}
function nospace(board){
     for(var i=0;i<4;i++){
     for(var j=0;j<4;j++){
     if(board[i][j]==0)
     return false;

     return true;


}


}
}
document.onkeydown=function(e){
    e=e||window.event;
    console.log(e);
    switch(e.keyCode){
    case 37:
         if(moveLeft()){
         console.log(e.keyCode);
         generateNumber();
       
}
        break;
    case 38:
         if(moveUp()){
         generateNumber();
         isgameover();

} 
         break;
    case 39:
         if(moveRight){
         generateNumber();
         isgameover();

}
         break;
    case 40:
          if(moveDown){
          generateNumber();
          isgameover();

}
          break;

}

}

function moveLeft(){
         if(!canMoveleft(board)){
         return false;
}
         for(var i=0;i<4;i++){
         for(var j=1;j<4;j++){
         if(board[i][j]!=0){
         for(var k=0;k<j;k++){
         console.log(board[i][k]);
         if(board[i][k]==0&&noBlock(i,k,j,board)){
         
         showNumberWithAnimate(i,j,i,k);
         board[i][k]=board[i][j];
         
         board[i][j]=0;
        
         continue;

}else if(board[i][k]==board[i][j]&&noBlock(i,k,board)){
         
         showNumberWithAnimate(i,j,i,k);
         board[i][k]+=board[i][j];
         board[i][j]=0;
        
         continue;


}

}

}

}

}
         numberCell();
         return true;
         console.log(board);
}

function canMoveleft(board){
         for(var i=0;i<4;i++){
         for(var j=1;j<4;j++){
         if(board[i][j]!=0){
         if(board[i][j-1]==0||board[i][j-1]==board[i][j]){
         return true;

}
         return false;
         
}



}

}

}

function noBlock(row,col1,col2,board){
      for(var i=col1;i<col2;i++){
      if(board[row][i]!=0){
      return false;

}
      return true;


}



}
function showNumberWithAnimate(fromx,fromy,toyx,toyy){
    var cell=document.getElementById('gridcontent-'+fromx+'-'+fromy);
    
    cell.style.top=(20+120*toyx)+'px';
    cell.style.left=(20+100*toyy)+'px';
    


}


</script>

</head>

<body>

<div class='wrap'>
<div class='grid-content' id='gridContent'>


<div class='grid' id='grid-0-0'>

</div>

<div class='grid' id='grid-0-1'>

</div>

<div class='grid' id='grid-0-2'>

</div>

<div class='grid' id='grid-0-3'>

</div>

<div class='grid' id='grid-1-0'>

</div>

<div class='grid' id='grid-1-1'>

</div>

<div class='grid' id='grid-1-2'>

</div>

<div class='grid' id='grid-1-3'>

</div>

<div class='grid' id='grid-2-0'>

</div>

<div class='grid' id='grid-2-1'>

</div>

<div class='grid' id='grid-2-2'>

</div>

<div class='grid' id='grid-2-3'>

</div>

<div class='grid' id='grid-3-0'>

</div>

<div class='grid' id='grid-3-1'>

</div>

<div class='grid' id='grid-3-2'>

</div>

<div class='grid' id='grid-3-3'>

</div>

<div class='grid' id='grid-4-0'>

</div>

<div class='grid' id='grid-4-1'>

</div>

<div class='grid' id='grid-4-2'>

</div>

<div class='grid' id='grid-4-3'>

</div>






</div>

</div>

</body>


</html>

圖片描述

回答
編輯回答
別硬撐

起始坐標搞清楚了嗎?
position 后,你的dom就脫離文檔流了。所以起始坐標 加 padding + border

2018年4月13日 08:48