게임에서 CSS 전환을 건너뛰거나 콜백을 생략하는 이유는 무엇입니까?

Barbara Streisand
풀어 주다: 2024-11-01 16:09:02
원래의
648명이 탐색했습니다.

Why Is My CSS Transition Skipped or Callback Omitted in My Game?

CSS 전환 건너뛰기 또는 콜백 생략

이 다각적인 문의에서 개발자는 게임 프로젝트 내에서 CSS 전환 및 콜백 호출의 간헐적인 불일치에 대해 당혹감을 표현합니다. jQuery를 순수 JavaScript로 대체했음에도 불구하고 CSS를 사용하여 발사체 위치를 전환하려는 시도는 예상대로 작동하지 못하여 전환을 시작하는 데 1ms의 시간 초과가 필요했습니다. 게다가 전환 콜백이 때때로 실행되지 않아 개발자가 당황했습니다.

이 문제의 복잡성을 자세히 알아보려면 CSS 전환이 요소의 계산된 스타일 변경에 의존한다는 점을 인정해야 합니다. 이 경우와 같이 인라인 스타일을 설정하면 브라우저가 계산된 스타일을 즉시 업데이트하지 않아 예상 요소 속성과 실제 요소 속성이 일치하지 않을 수 있습니다.

전환 속성이 ​​적용되면 계산된 왼쪽 및 위쪽 요소 속성이 일치하지 않습니다. 값이 이미 의도한 값과 일치하여 수행할 작업이 없는 상태로 전환될 수 있습니다. 따라서 건너뛰고 Transitionend 이벤트가 트리거되지 않습니다.

이를 수정하기 위해 개발자는 요소의 offsetHeight에 액세스하거나 DOM 메서드를 사용하여 리플로우를 트리거하는 등 스타일 재계산을 강제하는 기술을 사용할 수 있습니다. 예를 들면 다음과 같습니다.

<code class="javascript">let animdiv = document.getElementById('animid');
animdiv.addEventListener("transitionend", function(event) { ... }, false);
// force a reflow
animdiv.offsetTop;
Object.assign(animdiv.style, {left: "100px", top: "100px" });</code>
로그인 후 복사

스타일 재계산을 강제하면 계산된 스타일이 최신 상태가 되어 전환이 요소 위치의 변경 사항을 정확하게 추적하고 Transitionend 이벤트를 올바르게 실행할 수 있습니다.

위 내용은 게임에서 CSS 전환을 건너뛰거나 콜백을 생략하는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿