@Valera221
Делаю сайты

Как убрать пробел между элементом и стенкой родителя?

Дело такое, когда я приближаюсь к offsetTop'у или offsetLeft'у или offsetTop + offsetHeight,(крч. со всех сторон) у меня возникает пробел, я бы хотел чтобы блок которым я двигаю утыкался впритык к стенкам, и также с блоком который я поставил в родителе, там тоже пробел, вот у меня такой код получился, не знаю, что мне нужно добавить ?
А также как бы мне сделать так, чтобы функция gameLoop() постоянно не циклась, а движение началось тогда, когда я нажал бы на клавишу ?
Можете просто скопировать и посмотреть, потестить, классная кстати тема получилась.
А также будет классно, если вы добавите каких-то крутых плюх в код ^_^

Песочница https://codepen.io/Valera_DobroMan/pen/mdJxEVe

<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>Document</title>
<style>
*{
	margin: 0;
	padding: 0;
}
.player {
position: absolute;
width: 50px;
height: 50px;
background: orange;
}
#inp {
	width: 100px;
	height: 30px;
	font-size: 24px;
	margin: 5px 10px;
}
.parent {
	position: relative;
	width: 800px;
	height: 800px;
	left:10px;
	border: 1px solid black;
}
.block {
	position: absolute;
	left: 500px;
	top:240px;
	width: 100px;
	height: 220px;
	background: red;
}
</style>
</head>
<body>
	key:<input type="text" id="inp">
	<div class="parent">
		<div class="block"></div>
		<div class="player"></div>
	</div>
	<script>
let pl = document.querySelector(".player");
let par = document.querySelector(".parent");
let inp = document.getElementById("inp");
let bl = document.querySelector(".block");



var up = false,
    right = false,
    down = false,
    left = false,
    speed = 12,
    x = 0,
    y = 0
document.addEventListener('keydown',press)
function press(e){
inp.value = e.code;
  if (e.code == "ShiftLeft"){
    speed += 10;
  }
  if (e.code == "KeyW"){
    up = true;
  }
  if (e.keyCode === 39 /* right */ || e.keyCode === 68 /* d */){
    right = true
  }
  if (e.keyCode === 40 /* down */ || e.keyCode === 83 /* s */){
    down = true
  }
  if (e.keyCode === 37 /* left */ || e.keyCode === 65){
    left = true
  }
}
document.addEventListener('keyup',release)
function release(e){
 if (e.code == "ShiftLeft"){
    speed -= 10;
  }
  if (e.code == "KeyW"){
    up = false
  }
  if (e.keyCode === 39 /* right */ || e.keyCode === 68 /* d */){
    right = false
  }
  if (e.keyCode === 40 /* down */ || e.keyCode === 83 /* s */){
    down = false
  }
  if (e.keyCode === 37 /* left */ || e.keyCode === 65 /* a */ || e.keyCode === 81 /* q */){
    left = false
  }
}
function gameLoop(){
  if (up){
    y = y - speed;
  }
  if (right){
    x = x + speed;
  }
  if (down){
    y = y + 10;
  }
  if (left){
    x = x - speed;
  }
  // console.log(speed)
 if (y < 0  || y+pl.offsetHeight >= par.offsetHeight) {
  	y = pl.offsetTop ;
  }
 if (x < 0 || x+pl.offsetWidth >= par.offsetWidth)
  {x = pl.offsetLeft}

if (x+pl.offsetWidth > bl.offsetLeft && y+pl.offsetHeight >= bl.offsetTop && y <= bl.offsetTop+bl.offsetHeight && x <= bl.offsetLeft + bl.offsetWidth ) {
	x = pl.offsetLeft;
	y = pl.offsetTop;
}

  pl.style.left = x+'px';
  pl.style.top = y+'px';
  window.requestAnimationFrame(gameLoop);
}
window.requestAnimationFrame(gameLoop);

	</script>
</body>
</html>
  • Вопрос задан
  • 107 просмотров
Пригласить эксперта
Ответы на вопрос 1
@historydev Куратор тега JavaScript
Острая аллергия на анимешников
даже не вспотел click

P.S. Не юзабильно это всё, юзайте canvas.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы