내 코드는 here입니다. 세 위치 : zero(0,0)
, end(200,200)
, random(0,200)
.CSS 스타일이 아직 완전히 적용되지 않은 상태에서 전환이 너무 일찍 시작됩니다.
div는 처음에 random(0,200)
위치에 있습니다.
1 단계) 위치 zero(0,0)
에 사업부를 설정합니다
단계 2) 위치를 zero
에서 end
으로 옮깁니다. CSS 스타일 (className = 'pos_zero'
가) 완전히 아직 적용되지 않은 상태,
document.getElementById('x').className = 'pos_zero'; // set the div to the position zero(0,0)
move();
// in function move:
// document.getElementById('x').className = ' trans';
// document.getElementById('x').className += ' pos_end' ;
그 전환이 너무 일찍 시작하는 것 같다 :이 단계는 애니메이션을 아주 잘 does't 작업 같은
코드가 있습니다. 단지 random
위치에서 end
위치로 직접 이동합니다. 그리고 실제로 원하는 것은 random
이 아닌 zero
위치의 end
위치에 애니메이션을 배치하는 것입니다. 이 같은
코드가 작동합니다
document.getElementById('x').className = 'pos_zero'; // set the div to the position zero(0,0)
setTimeout('move()',1);
이 코드는 timeout
기능을 사용하여 성공적으로 수행. 이 코드는 div 위치를 pos_zero
으로 설정 한 다음 timeout
함수로 비동기 적으로 전환합니다. 그리고 timeout
기능은별로 전문적이지 않습니다.
그래서 저는보다 전문적인 솔루션을 찾고 있습니다.
그건 그렇고. 나는 궁금해. 스타일이 완전히 적용되도록하는 방법이 있다면 "Style.flush()"또는 무엇인가?
@Inerdial 작동합니다! 많은 감사합니다. 업데이트를 강제 실행하려면 (즉각적인 동기 리플 로우 또는 재 레이아웃을 강제 실행) 자바 스크립트는 변경 사항에 영향을받는 속성을 읽어야합니다. someSpan 및 otherSpan의 위치`새로운 코드는 Timeout없이 작동합니다.
document.getElementById('x').className = 'pos_zero';
var tmp = document.getElementById('x').offsetTop; // read a property to force an update.
move();
모두들 감사합니다. 그리고 나 혼란스럽게 만들어서 미안해.
'setTimeout (move) '을 사용하면 원하는 것을 할 수 있습니다. 그냥 사용해라. 이 문제는 "비동기식"이라는 것이 무엇인지 이해하지 못합니다.'setTimeout' 호출은 함수의 마지막 함수이며 반환 값은 필요 없습니다. – millimoose
표준화 된 JS 프레임 워크의 시대에 자신 만의 '$'함수를 만드는 것은 혼란 스럽습니다. – mVChr
To Inerdial : 네 말이 맞아. 그러나 나는이 "비동기"방법이 이상하게 보였고 나를 불편하게 만든다고 생각한다. 그리고'setTimeout'은 익명의 클래스 나 프로토 타입 함수 같은 상황에서 특히 사용하기에 편리하지 않습니다. 그래서 나는 그것에 열중하지 않고 더 나은 방법을 찾고 있습니다. – hardPass