toggle-toggle / javascript-basic

🌱우아한 테크코스 프론트엔드 자바스크립트 기초 스터디 입니다.
9 stars 0 forks source link

[2021.03.11] 이벤트 루프, 자바스크립트 엔진 #7

Closed Tanney-102 closed 3 years ago

Tanney-102 commented 3 years ago

이벤트 루프

자바스크립트 엔진

chrome의 v8과 같은 자바스크립트 엔진은 다음과 같이 구성된다.

스크린샷 2021-03-11 오후 12 29 40 <출처: "캡틴 판교 블로그", https://joshua1988.github.io/web-development/translation/javascript/how-js-works-inside-engine/>

이벤트 기반

이벤트 루프

_2021-03-11__12 48 06

<출처: "캡틴 판교 블로그", [https://joshua1988.github.io/web-development/translation/javascript/how-js-works-inside-engine/](https://joshua1988.github.io/web-development/translation/javascript/how-js-works-inside-engine/)>

참고 : 자바스크립트 런타임 실습, http://latentflip.com/loupe/?code=JC5vbignYnV0dG9uJywgJ2NsaWNrJywgZnVuY3Rpb24gb25DbGljaygpIHsKICAgIGNvbnNvbGUubG9nKCdZb3UgY2xpY2tlZCB0aGUgYnV0dG9uIScpOyAgICAKfSk7Cgpjb25zb2xlLmxvZygiSGkhIik7CgpzZXRUaW1lb3V0KGZ1bmN0aW9uIHRpbWVvdXQoKSB7CiAgICBjb25zb2xlLmxvZygiQ2xpY2sgdGhlIGJ1dHRvbiEiKTsKfSwgNTAwMCk7Cgpjb25zb2xlLmxvZygiV2VsY29tZSB0byBsb3VwZS4iKTs%3D!!!PGJ1dHRvbj5jbGljayE8L2J1dHRvbj4%3D

setTimeout, setInterval, requestAnimationFrame

setTimeout

setInterval

requestAnimationFrame

export default class Spinner {
  constructor($spinnerElement, degSpeed) {
    this.$spinnerElement = $spinnerElement;
    this.degSpeed = degSpeed;
    this.deg = 0;
    this.stop = false;
  }

  spin() {
    this.deg++;
    this.$spinnerElement.style.transform = `rotate(${
      (this.deg % (360 / this.degSpeed)) * this.degSpeed
    }deg)`;

    const rafId = requestAnimationFrame(this.spin.bind(this));
    this.stop && cancelAnimationFrame(rafId);
  }

  render() {
    this.$spinnerElement.classList.add("material");
    this.spin();
  }

  clear() {
    this.stop = true;
    this.$spinnerElement.classList.remove("material");
  }
}