그림과 같은 효과를 얻으려면(잎이 떨어지는 경우):
HTML 코드:
<!DOCTYPE html><html><head> <title>HTML5 나뭇잎 떨어지는 애니메이션</title> <meta charset=utf-8> <meta name=viewport content=width=500px,initial-scale=0.64> <link rel =stylesheet href=leaves.css 유형=text/css> <script src=leaves.js type=text/javascript></script></head><body> <div id=container> <div id=leafContainer></div> <div id=message> <em>이것은 다음을 기반으로 하는 낙엽 애니메이션입니다. 웹킷< /em> </div> </div> </body></html>css 코드: body{ background-color: #4E4226;}#container { 위치: 상대 높이: 700px; 500px; 여백: 10px 자동; 오버플로: 숨김; 테두리: 4px 솔리드 #5C090A; 배경: #4E4226 url('images/BackgroundLeaves.jpg') 왼쪽 상단 반복 없음;}#leafContainer { 위치: 너비: 100% ; 높이: 100%;}#message{ 위치: 절대: 160px; 너비: 100%; 높이: 300px; 배경:투명 url('images/textBackground.png') 반복-x 센터; 글꼴 크기: 220%; 텍스트 정렬 : 중앙; 패딩: 20px 10px; -webkit-box-sizing: -webkit-ground-size: 100% 100%; z-index: 1;}em { 글꼴-가중치: 굵게; 글꼴-스타일: 일반;}#leafContainer > div { 위치: 절대값: 100px; -webkit-animation-iteration -카운트: 무한; -webkit-애니메이션-방향: 정상; -webkit-애니메이션-타이밍-함수: 선형;}#leafContainer > div > img { 위치: 절대; 너비: 100px; -webkit-animation-iteration-count: -webkit-animation-timing-function: out; -webkit-transform-origin: 50% -100%;}@-webkit-keyframes 페이드{ 0% { 불투명도: 1; } 95% { 불투명도: 1; } 100% { 불투명도: 0; }}@-webkit-keyframes 드롭{ 0% { -webkit-transform: 번역(0px, -50px) } 100% { -webkit-transform: 번역(0px, 650px); }}@-webkit-keyframes clockwiseSpin{ 0% { -webkit-transform: 회전(-50deg); } 100% { -webkit-transform: 회전(50deg) }}@-webkit-keyframes counterclockwiseSpinAndFlip { 0% { -webkit-transform: scale(-1, 1) 회전 (50deg); } 100% { -webkit-transform: scale(-1, 1) 회전(-50deg); }}js 코드: const NUMBER_OF_LEAVES = 30; function init(){ var 컨테이너 = document.getElementById('leafContainer'); for (var i = 0; i < NUMBER_OF_LEAVES; i++) { Container.appendChild(createALeaf()); }}함수 randomInteger(low, high){ return low + Math.floor(Math.random() * (높음 - 낮음));}function randomFloat(낮음, 높음){ 반환 낮음 + Math.random() * (높음 - 낮음);}function pixelValue(값){ 반환 값 + 'px';}함수 지속 값(값){ 반환 값 + 's';}함수 createALeaf(){ var leafDiv = document.createElement('div'); leafDiv.style.top = -100px; leafDiv.style.left = pixelValue(randomInteger(0, 500)); leafDiv.style.webkitAnimationName = 'fade, drop'; var fadeAndDropDuration = DurationValue(randomFloat(5, 11)); fadeAndDropDuration + ', ' + fadeAndDropDuration var; leafDelay = DurationValue(randomFloat(0, 5)); leafDiv.style.webkitAnimationDelay = leafDelay + ', ' + leafDelay; var image = document.createElement('img') image.src = 'images/realLeaf' + randomInteger( 1, 5) + '.png'; var spinAnimationName = (Math.random() < 0.5) ? 'clockwiseSpin' : 'counterclockwiseSpinAndFlip'; image.style.webkitAnimationName = spinDuration = DurationValue(randomFloat(4, 8)) image.style.appendChild(image); .addEventListener('load', init, false); 추신: html5 캔버스가 연속 프레임 이미지를 처리하는 방법을 살펴보겠습니다. 다음 코드는 IE8 이상을 기반으로 합니다. <!DOCTYPE html><html><head><meta charset=utf-8><meta name=viewport content=width=device-width, 초기 규모=1.0, 최소 규모=1.0, 최대 규모=1.0, user-scalable=no/><title>캔버스 데모</title><script>var canvas = null;//초기화 매개변수 var img = null;var ctx = null;var imageReady = false;window.onload = function() { var canvas = document.getElementById(animation_canvas); canvas.width = canvas.parentNode.clientWidth; canvas.height = canvas.parentNode.clientHeight; console.log(캔버스는 지원되지 않습니다. HTML5 호환 브라우저를 설치하세요.) } // 캔버스의 2D 컨텍스트를 가져오고 직사각형을 그립니다. ctx = canvas.getContext(2d); ctx.fillRect(0, 0, canvas.width, canvas.height); img = document.createElement ); img.src = Images/ab0.png; img.onload = loading();} //이미지가 로드된 후에만 애니메이션 주기가 시작되는지 확인 function load() { imageReady = true; setTimeout(update, 1000/3);//초당 3프레임 추가 타이머}function redraw() { ctx.fillRect(0, 0, 460, 460); 이미지, 0, 0, 232, 180);} //이미지가 지정된 속도로 애니메이션되도록 하려면 경과된 시간을 추적한 다음 각 프레임에 할당된 시간을 기준으로 프레임을 재생해야 합니다. 기본 단계는 다음과 같습니다. //1 초당 프레임 수로 애니메이션 속도(msPerFrame)를 설정합니다. //2. 게임을 반복할 때 마지막 프레임 이후 경과한 시간(델타)을 계산합니다. //3. 경과된 시간이 애니메이션 프레임을 완료하기에 충분하면 이 프레임을 재생하고 누적 델타를 0으로 설정합니다. //4. 경과 시간이 충분하지 않으면 델타 시간(acDelta)을 기억(누적)합니다. var 프레임 = 0;var lastUpdateTime = 0;var acDelta = 0;var msPerFrame = 200;function update() { requestAnimFrame(update); var delta = Date.now() - lastUpdateTime; (),lastUpdateTime); if (acDelta > msPerFrame){ acDelta = 0; img.src='images/ab'+frame+'.png'; if(frame >= 3) frame = 0; //프레임이 그려지고 진행되면 타이머가 재설정됩니다. }else{ acDelta += delta; } lastUpdateTime = Date.now();}//requestAnimFrame은 기본적으로 setTimeout을 수행하지만 브라우저는 프레임을 렌더링하고 있다는 것을 알고 있으므로 그리기 루프 및 나머지 페이지와 상호 작용하는 방법을 최적화할 수 있습니다. 리플로우. //어떤 경우에는 특히 휴대폰의 경우 requestAnimFrame보다 setTimeout을 사용하는 것이 더 좋습니다. //다음은 다양한 브라우저에서 requestAnimFrame을 호출하는 경우의 표준 감지 방법은 다음과 같습니다: window.requestAnimFrame = (function(){ return window.requestAnimationFrame || window.webkitRequestAnimationFrame || window.mozRequestAnimationFrame || window.oRequestAnimationFrame || window.msRequestAnimationFrame || 함수( 콜백 ){ window.setTimeout(콜백, 1000 / 3); //requestAnimFrame 지원을 사용할 수 없는 경우에도 내장된 setTimeout을 사용할 수 있습니다. };})();</script></head><body style=position:absolute;margin:0;padding :0. ;너비:100%;높이:100%;> <canvas id=animation_canvas></canvas></body></html> 요약위 내용은 편집자가 소개한 HTML5+Webkit 기반의 낙엽 애니메이션 구현입니다. 궁금한 점이 있으시면 메시지를 남겨주시면 편집자가 시간에 맞춰 답변해 드리겠습니다. 또한 VeVb 무술 웹사이트를 지원해 주신 모든 분들께 감사드립니다!