基于HTML5+Webkit实现树叶飘落动画
程序员文章站
2022-06-21 09:44:41
本文给大家分享一段实例代码给大家介绍基于HTML5+Webkit实现树叶飘落动画效果,需要的朋友参考下吧... 17-12-28...
实现如图所示的东西效果(落叶下落):
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" type="text/css"> <script src="leaves.js" type="text/javascript"></script> </head> <body> <div id="container"> <div id="leafcontainer"></div> <div id="message"> <em>这是基于webkit的落叶动画</em> </div> </div> </body> </html> css代码: body{ background-color: #4e4226; } #container { position: relative; height: 700px; width: 500px; margin: 10px auto; overflow: hidden; border: 4px solid #5c090a; background: #4e4226 url('images/backgroundleaves.jpg') no-repeat top left; } #leafcontainer { position: absolute; width: 100%; height: 100%; } #message{ position: absolute; top: 160px; width: 100%; height: 300px; background:transparent url('images/textbackground.png') repeat-x center; color: #5c090a; font-size: 220%; font-family: 'georgia'; text-align: center; padding: 20px 10px; -webkit-box-sizing: border-box; -webkit-background-size: 100% 100%; z-index: 1; } em { font-weight: bold; font-style: normal; } #leafcontainer > div { position: absolute; width: 100px; height: 100px; -webkit-animation-iteration-count: infinite; -webkit-animation-direction: normal; -webkit-animation-timing-function: linear; } #leafcontainer > div > img { position: absolute; width: 100px; height: 100px; -webkit-animation-iteration-count: infinite; -webkit-animation-direction: alternate; -webkit-animation-timing-function: ease-in-out; -webkit-transform-origin: 50% -100%; } @-webkit-keyframes fade{ 0% { opacity: 1; } 95% { opacity: 1; } 100% { opacity: 0; } } @-webkit-keyframes drop{ 0% { -webkit-transform: translate(0px, -50px); } 100% { -webkit-transform: translate(0px, 650px); } } @-webkit-keyframes clockwisespin{ 0% { -webkit-transform: rotate(-50deg); } 100% { -webkit-transform: rotate(50deg); } } @-webkit-keyframes counterclockwisespinandflip { 0% { -webkit-transform: scale(-1, 1) rotate(50deg); } 100% { -webkit-transform: scale(-1, 1) rotate(-50deg); } } js代码: const number_of_leaves = 30; function init(){ var container = document.getelementbyid('leafcontainer'); for (var i = 0; i < number_of_leaves; i++) { container.appendchild(createaleaf()); } } function randominteger(low, high){ return low + math.floor(math.random() * (high - low)); } function randomfloat(low, high){ return low + math.random() * (high - low); } function pixelvalue(value){ return value + 'px'; } function durationvalue(value){ return value + 's'; } function 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)); leafdiv.style.webkitanimationduration = 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 = spinanimationname; var spinduration = durationvalue(randomfloat(4, 8)); image.style.webkitanimationduration = spinduration; leafdiv.appendchild(image); return leafdiv; } window.addeventlistener('load', init, false);
ps:下面看下html5 canvas处理连续帧图片,下面的代码基于ie8以上
<!doctype html> <html> <head> <meta charset="utf-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0, user-scalable=no"/> <title>canvas demo</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; if (!canvas.getcontext) { console.log("canvas not supported. please install a html5 compatible browser."); return; } // get 2d context of canvas and draw rectangel ctx = canvas.getcontext("2d"); ctx.fillstyle="black"; ctx.fillrect(0, 0, canvas.width, canvas.height); console.log(canvas.height); img = document.createelement('img'); img.src = "images/ab0.png"; img.onload = loaded(); } //保证只有图像加载后才开始循环动画 function loaded() { imageready = true; settimeout( update, 1000/3);//添加3帧每秒间隔计时器 } function redraw() { ctx.fillstyle="black"; ctx.fillrect(0, 0, 460, 460); ctx.drawimage(img, 0, 0, 232, 180); } //为了让图片以规定的速度动画,我们必须追踪已经经过的时间,然后根据分配给每帧的时间播放帧。基本步骤是: //1、按每秒几帧设置动画速度(msperframe)。 //2、当你循环游戏时,计算一下自最后一帧以后已经经过了多少时间(delta)。 //3、如果已经经过的时间足够把动画帧播完,那么播放这一帧并设置累积delta为0。 //4、如果已经经过的时间不够,那么记住(累积)delta时间(acdelta)。 var frame = 0; var lastupdatetime = 0; var acdelta = 0; var msperframe = 200; function update() { requestanimframe(update); var delta = date.now() - lastupdatetime; //console.log(date.now(),lastupdatetime); if (acdelta > msperframe){ acdelta = 0; redraw(); img.src='images/ab'+frame+'.png'; frame++; if(frame >= 3) frame = 0; //当绘制后且帧推进完,计时器就会重置。 }else{ acdelta += delta; } lastupdatetime = date.now(); } //requestanimframe的作用基本上就是settimeout,但浏览器知道你正在渲染帧,所以它可以优化绘制循环,以及如何与剩下的页面回流。 //在某些情况下,settimeout比requestanimframe更好用,特别是对于手机。 //以下是在不同的浏览器上调用requestanimframe的情况也不同,标准的检测方法如下: window.requestanimframe = (function(){ return window.requestanimationframe || window.webkitrequestanimationframe || window.mozrequestanimationframe || window.orequestanimationframe || window.msrequestanimationframe || function( callback ){ window.settimeout(callback, 1000 / 3); //如果requestanimframe支持不可用,还是可以用回内置的settimeout。 }; })(); </script> </head> <body style="position:absolute;margin:0;padding:0;width:100%;height:100%;"> <canvas id="animation_canvas"></canvas> </body> </html>
总结
以上所述是小编给大家介绍的基于html5+webkit实现树叶飘落动画,希望对大家有所帮助
上一篇: Html5百叶窗效果的示例代码
下一篇: 微信小程序“圣诞帽”的实现思路详解