@Mty

Как сделать так чтоб сначала функция не работала а потом при нажатии на кнопку заработала и также при нажатии на кнопку перестала работать?

</style>
  <title>////</title>
 </head>
<body id="body">
<input type="button" value="нажми меня" name="Peremeshenie1" OnClick="setInterval(Peremeshenie, 20);">
  <span id="move" style="position: absolute; border: 2px dashed black;">По вертикали</span>
  </body>

  <script>
  

var phi = Math.PI / 2;   
var rho = 6;   
var rho2 = 3;  

 

function  Peremeshenie(){   

  document.getElementById('move').style.left = rho * Math.cos(phi) + 'px';  

  document.getElementById('move').style.top = rho * Math.sin(phi) + 'px'; 
    

  rho += rho2;   

}

setInterval(Peremeshenie, 20); 
  </script>


</html>
  • Вопрос задан
  • 83 просмотра
Решения вопроса 2
Stalker_RED
@Stalker_RED

Лучше вынести getElementById за пределы функции перемещения, и не искать элемент каждый раз заново.

setInterval(..., 20) - не очень круто, т.к. при 60 фпс таймер должен быть около 16 мс, точнее 1000/60=16,66666666666(6), но такую точность невозможно установить. Да и не особо помогло бы, т.к. setInterval ограничевает только нижнюю границу времени, т.е. обещает что следующее выполнение будет НЕ РАНЬШЕ чем указанное время. В итоге анимация дерганная, особенно если браузер наружен другими задачами. Но красивый выход есть. Специально для анимации существует requestAnimationFrame, который вызовется как-раз к следующей отрисовке кадра.
Ответ написан
@dimoff66
Кратко о себе: Я есть
Для остановки интервала используйте функцию clearInterval

let timerId
function myFunction() {
  // блаблабла
}

function startMe () {
  timerId = setInterval(myFunction, 1000)
}

function stopMe() {
  if (timerId) {
    clearInterval(timerId)
    timerId = null
  }
}
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы
26 апр. 2024, в 07:47
2000 руб./за проект
26 апр. 2024, в 06:46
1000 руб./в час
26 апр. 2024, в 05:31
1000 руб./за проект