Вообщем, есть код
var robot = document.getElementById('robot');
console.log(robot);
setTimeout(function(){robot.style.marginLeft = '10px'}, 1500);
и мне надо чтобы margin вызывался 50 раз и с каждым разом растояние увеличивалось на 10 пикселей и тайминг на пол секунды. Как для этой программы создать цикл?
JavaScript
как создать цикл для margin?
Намного проще и удобней для этих целей применить возможности CSS3
Вот приблизительно так а неговнокодить как некоторые
<div id="robot" style="background: red; width: 5vh;height: 5vh">1</div>
<script>
setTimeout(()=>
robot.style.cssText+="transition-duration: 15s;transition-timing-function: ease-out;margin-left: 90vh;"
,1000);
</script>
⚤
Вот приблизительно так а неговнокодить как некоторые
<div id="robot" style="background: red; width: 5vh;height: 5vh">1</div>
<script>
setTimeout(()=>
robot.style.cssText+="transition-duration: 15s;transition-timing-function: ease-out;margin-left: 90vh;"
,1000);
</script>
⚤
Andrey Kr
.style.cssText+= это и есть говнокод... самый дебильный из всех что можно было написать.
Можно конечно и так:
setTimeout(function () {
robot.style.marginLeft = '10px';
const intrvl = setInterval(() => {
let ml = parseInt(robot.style.marginLeft);
robot.style.marginLeft = (ml += 10) + 'px';
if (ml >= 510)
clearInterval(intrvl);
}, 500);
}, 1500);
, но анимацию обычно делают через requestAnimationFrame()... чтобы все плавненько было.
setTimeout(function () {
robot.style.marginLeft = '10px';
const intrvl = setInterval(() => {
let ml = parseInt(robot.style.marginLeft);
robot.style.marginLeft = (ml += 10) + 'px';
if (ml >= 510)
clearInterval(intrvl);
}, 500);
}, 1500);
, но анимацию обычно делают через requestAnimationFrame()... чтобы все плавненько было.
решение у меня заняло чуть дольше, чем я думал: 15 минут, вместо 3х.
Вот как оно выглядит:
https://jsfiddle.net/h0y4o6us/
Тут надо не забывать учитывать несколько вещей:
1) что данные стиля хранятся как string (вместе с значением "px" или любого другого обозначения системы измерения (ну там, em, % и т. п.)).
Соответственно, получая значение стиля, надо его превратить в число, очистив от этих вот "px" и всего прочего (я это делаю с помощью replace(), преобразовать в число (делаю с помощью parseInt()), а вот потом уже - действовать с числом, прибавляя нужное.
2) Важный момент. Тебе нужна рекурсивная (т. е. самовызывающаяся) функция, которая опирается на ВНЕШНЕЕ (т. е. обявленное вне этой функции) число, которое в этой функции ты будешь уменьшать (у тебя оно равно 50).
В общем, смотри что у меня получилось, надеюсь, тебе это будет полезно.
Играйся в песочницах типа jsfidlle побольше - и всё будет получаться!
Вот как оно выглядит:
https://jsfiddle.net/h0y4o6us/
Тут надо не забывать учитывать несколько вещей:
1) что данные стиля хранятся как string (вместе с значением "px" или любого другого обозначения системы измерения (ну там, em, % и т. п.)).
Соответственно, получая значение стиля, надо его превратить в число, очистив от этих вот "px" и всего прочего (я это делаю с помощью replace(), преобразовать в число (делаю с помощью parseInt()), а вот потом уже - действовать с числом, прибавляя нужное.
2) Важный момент. Тебе нужна рекурсивная (т. е. самовызывающаяся) функция, которая опирается на ВНЕШНЕЕ (т. е. обявленное вне этой функции) число, которое в этой функции ты будешь уменьшать (у тебя оно равно 50).
В общем, смотри что у меня получилось, надеюсь, тебе это будет полезно.
Играйся в песочницах типа jsfidlle побольше - и всё будет получаться!
Виктор Тимошкин
вообщем спасибо, оказалось все намного проще. Просто через цикл for указал переменную и назначил чтобы каждый раз она увеличивалась на то количество пикселей, которое мне надо)
Похожие вопросы
- Проблема с решением задачи (циклы)
- Для чего практически нужен цикл в языках программирования javascript, php ?
- Сравниваю циклы while и for и хочу понять разницу между ними. Они выполняют условно одно и тоже. Это вся разница?
- Когда использовать цикл for, а когда while?
- Как сделать проверку через бесконечный цикл?
- Почему цикл while не останавливается когда i=0 ?
- Для чего нужен цикл for...of, если есть цикл for...in
- Зачем нужны Циклы в JavaScript? Бесконечный цикл который не делает ничего.
- Javascript как сделать так, чтобы два рандомных числа в одном цикле не повтрялись
- С помощью вложенного цикла нужно нарисовать такую фигуру..