У меня возникли проблемы с написанием одного на первый взгляд простенького кода. Я хотел создать небольшую анимацию, в ходе которой текстовый элемент html должен был перемещаться по экрану веб-страницы и менять направления после столкновения с краями. Проблема заключается в том, цикл, в котором происходит изменение параметров Margin элемента не обновляет отображение элемента на странице. Т.е. если сделать цикл конечным, элемент мгновенно переместится на свою конечную позицию, если же цикл бесконечный то страница просто будет грузиться вечно.
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Document</title>
<script>
'use strict';
window.onload = function() {
let movingElement = document.getElementById("movingThing");
let destiny = [1, -1];
let xDirection = destiny[Math.round(Math.random() * 1)];
let yDirection = destiny[Math.round(Math.random() * 1)];
let speed = 1;
movingElement.style.marginTop = 200 + 'px';
movingElement.style.marginLeft = 200 + 'px';
for (let i = 0; i < 99; i++) {
if (movingElement.style.marginTop >= document.body.clientHeight ||
movingElement.style.marginTop <= 0)
yDirection *= -1;
if (movingElement.style.marginLeft >= document.body.clientWidth ||
movingElement.style.marginLeft <= 0)
xDirection *= -1;
movingElement.style.marginTop = parseInt(movingElement.style.marginTop) + speed * yDirection + 'px'
movingElement.style.marginLeft = parseInt(movingElement.style.marginLeft) + speed * xDirection + 'px'
}
}
</script>
</head>
<body>
<p style="font-size: 45px" id="movingThing">$</p>
</body>
</html>
использовать вместо цикла setInterval
let movingElement = document.getElementById("movingThing");
const windowWidth = document.documentElement.clientWidth;
const windowHeight = document.documentElement.clientHeight;
const elemWidth = movingElement.clientWidth;
const elemHeight = movingElement.clientHeight;
let destiny = [1, -1];
let xDirection = destiny[Math.round(Math.random() * 1)];
let yDirection = destiny[Math.round(Math.random() * 1)];
let speed = 1;
movingElement.style.top = 100 + 'px';
movingElement.style.left = 100 + 'px';
setInterval(() => {
const top = parseInt(movingElement.style.top);
const left = parseInt(movingElement.style.left);
if (top == (windowHeight - elemHeight) || top == 0) yDirection *= -1;
if (left == (windowWidth - elemWidth) || left == 0) xDirection *= -1;
movingElement.style.top = top + speed * yDirection + 'px'
movingElement.style.left = left + speed * xDirection + 'px'
}, 10)
p {
margin: 0;
position: absolute;
}
<p style="font-size: 45px" id="movingThing">$</p>
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Задача в том что по окончанию заполнения первого инпута "Фамилия", ниже появлялся второй "Имя" и затем третий "Отчество" (который к заполнению...
Решил сделать на основе вот этого видео расширение парсерСделал, но оно выдает ошибку
Нужно отправить POST запрос и получить ответ от сервера, сделал след образом:
Столкнулся с весьма непонятной ситуациейАктиватор не видит подходящих конструкторов, хотя они есть в классе, и они отображаются при логировании