oCanvas 一款以对象的方式操作canvas

0
(0)

oCanvas changes the way you work with the canvas element. With the native canvas API you are drawing pixels onto the canvas. But when building something, you tend to think more in terms of objects than actual pixels. This is what oCanvas is made to do — create a bridge between the native API and the way you want to work. If you would want to access the native API, that is also possible.

http://ocanvas.org/docs

 

例子代码:

<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>oCanvas Demo</title>
	<script src="ocanvas-2.7.4.min.js"></script>
	<style type="text/css">
		
	</style>
</head>
<body>
	<canvas id="c1" width="1000" height="600"></canvas>
	<script type="text/javascript">

	// 创建一个Canvas画布对象
		var canvas = oCanvas.create({
			canvas:"#c1",
			background:'#000000'
		});

		// Center planet
		var center = canvas.display.ellipse({
			x:canvas.width/2,
			y:canvas.height/2,
			radius:canvas.width/20,
			fill:'#fff'
		}).add();


		// Prototype objects that will be used to instantiate the others
		
		var satelliteProto = canvas.display.ellipse({
			fill:'#eee'
		});

		var pathProto = canvas.display.ellipse({
			stroke:'1px #999'
		});

		// Set up data
		var satellites=[];depth=3;
		var satelliteColors=["#FF0000","#00BC22","#00659D"];
		var pathColors=["#6C6868","#EF1919","#20208F"];
		// Create seven satellites and paths. Definition is further down.
		
		for (var i = 0,l=7; i <l; i++) {
			createSatellite({
				parent:center,
				depth:1,
				distance:(i+1)*canvas.width/6,
				radius:canvas.width/100,
				speed:1
			})
		};

		// Set up a tick function that will move all satellites each time
		
		canvas.setLoop(function () {
			for (var i = 0; i < satellites.length; i++) {
				satellites[i].rotation+=satellites[i].speed;
			};
		});

		// Definition for a satellite and its corresponding path
		function createSatellite (options) {
			// Create the path that the satellite will follow
	var path = pathProto.clone({
		radius: options.distance,
		x: options.x || 0, y: options.y || 0,
		strokeColor: pathColors[options.depth - 1]
	});
	options.parent.addChild(path);

	// Create a new satellite
	var satellite = satelliteProto.clone({
		origin: {
			x: 0,
			y: options.distance * (Math.round(Math.random()) ? 1 : -1)
		},
		speed: Math.random() * (2 * Math.random() - 0.5) + 0.5,
		radius: options.radius,
		x: options.x || 0, y: options.y || 0,
		fill: satelliteColors[options.depth - 1],
		rotation: Math.random() * 360
	});
	options.parent.addChild(satellite);
	satellites.push(satellite);

	// Create another satellite that will circle around this satellite
	if (options.depth < depth) {
		createSatellite({
			parent: satellite, depth: options.depth + 1,
			distance: options.radius * 7,
			radius: options.radius / 1.5,
			x: satellite.origin.x * -1, y: satellite.origin.y * -1,
			speed: 10
		});
	}
		}
canvas.timeline.start();
	</script>
</body>
</html>

 

这篇文章有用吗?

平均评分 0 / 5. 投票数: 0

到目前为止还没有投票!成为第一位评论此文章。

很抱歉,这篇文章对您没有用!

让我们改善这篇文章!

告诉我们我们如何改善这篇文章?

分类:

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据