Когда я нажимаю на кнопку, я хотел бы, чтобы положение кнопки изменилось на случайное место.
Вот что я пробовал:
var b = document.querySelector("button");
b.addEventListener("click",change);
var i = Math.floor(Math.random()*500)+1;
var j = Math.floor(Math.random()*500)+1;
function change()
{
b.style.left = i+"px";
b.style.top = j+"px";
}button{
margin-left: auto;
margin-right: auto;
display: block;
position: absoulte;
}<button>
Hello World
</button>Кажется, вы устанавливаете значения для i и j только один раз. Если вы хотите, чтобы они менялись при каждом щелчке, они должны быть внутри изменения функции. Вы также ошиблись в абсолютном значении.



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Определите i и j внутри метода change(), чтобы его можно было случайным образом обновлять при нажатии кнопки.
Кроме того, в вашем коде есть опечатка position: absoulte, которую следует исправить на absolute
var b = document.querySelector("button");
b.addEventListener("click",change);
function change()
{
var i = Math.floor(Math.random()*500)+1;
var j = Math.floor(Math.random()*500)+1;
b.style.left = i+"px";
b.style.top = j+"px";
}button{
display: block;
position: absolute;
}<button>abc</button>Также отметьте, что вы исправили absolute
Вам нужно переместить случайный расчет внутрь функции change().
Чтобы сохранить элемент внутри содержащего его элемента, вы можете использовать getBoundingClientRect(). (И учитывайте размер кнопки, чтобы избежать наложения справа и снизу, используя то же самое.)
const c = document.querySelector(".container");
const b = document.querySelector("button");
function change() {
const
{ width: cWidth, height: cHeight } = c.getBoundingClientRect(),
{ width: bWidth, height: bHeight } = b.getBoundingClientRect(),
i = Math.floor(Math.random() * (cWidth - bWidth)) + 1,
j = Math.floor(Math.random() * (cHeight - bHeight)) + 1;
b.style.left = i + "px";
b.style.top = j + "px";
}
b.addEventListener("click", change);.container {
position: relative;
height: 50vh;
width: 50vw;
background-color: lightgray;
}
button{
position: absolute;
display: block;
}<div class='container'>
<button type='button' id='shifty'>Click</button>
</div>HTML: -
<body>
<div class = "ctr">
<button class = "button" id = "movingbutton">Button</button>
</div>
</body>
CSS:-
#movingbutton{
margin-left: auto;
margin-right: auto;
display: block;
position: absolute;
left : 20px;
top : 50px;
}
body{
width : 100%;
}
.ctr{
width : 100%;
height : 100%;
}
JS:-
var b = document.querySelector("#movingbutton");
b.addEventListener("click",change);
function change()
{
let i =Math.abs(Math.floor(Math.random()*window.innerWidth-55))
let j = Math.abs(Math.floor(Math.random()*window.innerHeight-21));
console.info('here' , i ,j , b.style.left , b.style.top);
b.style.left = i+'px';
b.style.top = j + "px";
}
Если вы хотите, вы можете проверить здесь: Ссылка на живой пример
Вам нужно добавить еще одно условие, если эта кнопка выходит за пределы window.innerWidth и window.innerHeight.
Если вы хотите случайным образом перемещать кнопку, вы можете использовать простой .bind(). Вы также можете перемещать кнопку, когда ваша мышь перемещается в области кнопки (не нажимая на нее). Вот оба кода:
Код для клика
var b = document.querySelector("#movingbutton");
b.addEventListener("click",change);
function change()
{
let i = Math.floor(Math.random()*500)+1;
let j = Math.floor(Math.random()*500)+1;
console.info('here' , i ,j , b.style.left , b.style.top);
b.style.left = i+'px';
b.style.top = j + "px";
}#movingbutton{
margin-left: auto;
margin-right: auto;
display: block;
position: absolute;
left : 20px;
top : 50px;
}
body{
width : 100%;
}
.ctr{
width : 100%;
height : 100%;
}<body>
<div class = "ctr">
<button class = "button" id = "movingbutton">Button</button>
</div>
</body>
Код для перемещения мыши
var b = document.querySelector("#movingbutton");
b.addEventListener("mousemove",change);
function change()
{
let i = Math.floor(Math.random()*500)+1;
let j = Math.floor(Math.random()*500)+1;
console.info('here' , i ,j , b.style.left , b.style.top);
b.style.left = i+'px';
b.style.top = j + "px";
}#movingbutton{
margin-left: auto;
margin-right: auto;
display: block;
position: absolute;
left : 20px;
top : 50px;
}
body{
width : 100%;
}
.ctr{
width : 100%;
height : 100%;
}<body>
<div class = "ctr">
<button class = "button" id = "movingbutton">Button</button>
</div>
</body>