我试图模仿使用EaselJS在spire's横幅中看到的画布元素。但是我的动画在chrome和firefox上都不稳定。任何帮助表示赞赏。 (首次使用EaselJS)Ch canvas画布动画 - EaselJS
我的代码:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>EaselJS</title>
<style>
body{
margin: 0;
padding: 0;
overflow: hidden;
}
#spire-canvas{
background: #333;
}
</style>
</head>
<body>
<canvas id="spire-canvas" width="1366" height="768"></canvas>
<script src="https://code.jquery.com/jquery-2.2.4.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/EaselJS/0.8.0/easeljs.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/gsap/1.19.0/TweenMax.min.js"></script>
<script>
$(document).ready(function(){
//INITIALIZATIONS
var stage,
particles = 10,
fps = 30,
viewportWidth = window.innerWidth,
viewportHeight = window.innerHeight,
circles = [];
function init(){
stage = new createjs.Stage("spire-canvas");
createjs.Ticker.addEventListener("tick", refresh);
createjs.Ticker.setFPS(fps);
console.log("init fired");
}
function refresh(){
for(var i = 0; i < particles; i++){
var circle = new createjs.Shape();
circle.graphics.beginFill('#' + Math.floor(Math.random() * 16777215).toString(16))
.drawCircle(0, 0, (Math.random() * 10));
circle.x = circle.x + Math.random() * viewportWidth;
circle.y = (Math.random() * viewportHeight) + viewportHeight;
circle.alpha = 0.1 + Math.random() * 0.2;
stage.addChild(circle);
circles.push(circle);
};
for(var i = 0; i < circles.length; i++){
var item = circles[i];
var yy = item.y + Math.floor(Math.random() * (viewportHeight - 300)) * -1;
if(item.y < 300){
TweenLite.to(item, 1, {alpha: '0', ease: Power4.easeOut, onComplete: function(){
stage.removeChild(item);
}});
}
TweenLite.to(item, 10, {y: yy});
};
stage.update();
}
init();
});
</script>
</body>
</html>
下面是一个简单示例与您的代码,并充斥着移动到合适的位置:http://jsfiddle.net/lannymcnie/abLhozah/ - 我修改了门槛,使一些项目淡出,但没有一个基于它们的初始值被补偿(它们只是停止)而足够高。你应该能够从样本中得到你需要的。 – Lanny
我知道问题出在tick中的for循环。需要彻底查阅文件。无论如何感谢一群兰尼。很好的帮助。标记为答案。 –