Canvas开发库封装

一、Canvas第三方类库

1、常见的第三方类库

  • konva.js

      <style>
      		body{
      			margin:0;
      		}
      	</style>
      </head>
      <body>
      	<div id="box"></div>
      	<script src="../konva/konva.min.js"></script>
      	<script>
      		//创建舞台
      		var stage=new Konva.Stage({
      			container:"#box",
      			width:window.innerWidth,
      			height:window.innerHeight
      		});
      		//创建层
      		var layer=new Konva.Layer({
      
      		});
      		stage.add(layer);
      		//创建图形
      		var star=new Konva.Star({
      			x:stage.getWidth()/2,
      			y:stage.getHeight()/2,
      			innerRadius:80,
      			outerRadius:200,
      			fill:"Red"
      		});
      		layer.add(star);
      		//绘制层
      		layer.draw();
      	</script>
    
  • chart.js 图表插件

  • eccharts 图表插件(百度)

  • tree.js(3d webgl 库)

二、第三方类库Konva

1、Konva的结构

  • 舞台(stage)-->层(layer)-->图形

  • Statge -->Layer -->分组(-->分组-->)-->图形

      			  Stage
                      |
               +------+------+
               |             |
             Layer         Layer
               |             |
         +-----+-----+     Shape
         |           |
       Group       Group
         |           |
         +       +---+---+
         |       |       |
      Shape   Group    Shape
                 |
                 +
                 |
               Shape
    

2、Konva绘制图形

  • Konva.Rect

      <script>
      		//创建舞台
      		var stage=new Konva.Stage({
      			container:"#box",
      			width:window.innerWidth,
      			height:window.innerHeight
      		});
      		//创建层
      		var layer=new Konva.Layer({
      			x:100,
      			y:100
      		});
      		stage.add(layer);
      		//创建一个组
      		var group=new Konva.Group({
      			x:100,
      			y:100
      		});
      		layer.add(group);
      		//创建矩形
      		var rect=new Konva.Rect({
      			x:0,
      			y:0,
      			width:100,
      			height:100,
      			stroke:"red"
      		});
      		group.add(rect);
      		layer.draw();
      </script>
    
  • Konva.Circle

      //绘制圆形
      var circle=new Konva.Circle({
      	x:stage.getWidth()/2,
      	y:stage.getHeight()/2,
      	radius:100,
      	stroke:"red",
      	fill:"green"
      });
      layer.add(circle);
    
  • Konva.Wedge

      //绘制扇形
      var wedge=new Konva.Wedge({
      	x:200,
      	y:400,
      	radius:100,
      	fill:"yellow",
      	stroke:"orange",
      	angle:90,
      	rotation:-10
      });
      layer.add(wedge);
    
  • Konva.Line

      //绘制线条
      var line1=new Konva.Line({
      	points:[700,100,900,200,800,400],
      	stroke:"skyblue",
      	strokeWidth:4,
      	lineCap:"round",
      	lineJoin:"round",
      	closed:true,
      	tension:true//曲线
      });
      layer.add(line1);
    
  • Konva.Star

  • Konva.Image

3、事件

点击正方形改变圆角最后变成圆

	<div id="box"></div>
	<script src="../konva/konva.min.js"></script>
	<script>
		//创建舞台
		var stage=new Konva.Stage({
			container:"#box",
			width:window.innerWidth,
			height:window.innerHeight
		});
		var layer=new Konva.Layer({

		});
		stage.add(layer);

		var rect=new Konva.Rect({
			x:stage.getWidth()/2,
			y:stage.getHeight()/2,
			width:200,
			height:200,
			stroke:"#000",
			strokeWidth:5,
			fill:"yellow",
			offset:{
				x:100,
				y:100
			}
		});
		layer.add(rect);
		layer.draw();

		rect.on("click",function(ev){
			rect.cornerRadius(rect.cornerRadius()+5);
			rect.scale({
				x:1.5,
				y:1.5
			})
			layer.draw();

		})
		
	</script>

4、绘制

创建一个矩形: Konva.Rect(option);

	//Konva使用的基本案例
    //第一步:创建舞台
    var stage = new Konva.Stage({
        container: 'container',     //需要存放舞台的Dom容器
        width: window.innerWidth,   //设置全屏
        height: window.innerHeight
    });

    //第二步:创建层
    var layer = new Konva.Layer();  //创建一个层
    stage.add(layer);               //把层添加到舞台

    //第三步: 创建矩形
    var rect = new Konva.Rect({     //创建一个矩形
        x: 100,                     //矩形的x坐标,相对其父容器的坐标
        y: 100,                      
        width: 100,                 //矩形的宽度
        height: 100,                //矩形高度
        fill: 'gold',               //矩形填充的颜色
        stroke: 'navy',             //矩形描边的颜色
        strokeWidth: 4,             //填充宽度
        opactity: .2,               //矩形的透明度
        scale: 1.2,                 //矩形的缩放 1:原来大小
        rotation: 30,               //旋转的角度,是deg不是弧度。
        cornerRadius: 10,           //圆角的大小(像素) 
        id: 'rect1',                //id属性,类似dom的id属性
        name: 'rect',
        draggable: true             //是否可以进行拖拽
    });

    //创建一个组
    var group = new Konva.Group({
        x: 40,      
        y: 40,
    });
    group.add( rect );  //把矩形添加到组中

    //第四步: 把形状放到层中
    layer.add( group ); //把组添加到层中
   	layer.draw();       //绘制层到舞台上

5、动画

01、Konva.Tween

	<div id="box"></div>
	<script src="../konva/konva.min.js"></script>
	<script>
		//创建舞台
		var stage=new Konva.Stage({
			container:"#box",
			width:window.innerWidth,
			height:window.innerHeight
		});

		var layer=new Konva.Layer({

		});
		stage.add(layer);

		//绘制五星
		var star=new Konva.Star({
			x:stage.getWidth()/2,
			y:stage.getHeight()/2,
			innerRadius:100,
			outerRadius:200,
			fill:"orange",
			stroke:"red",
			strokeWidth:6,
			numPoints:6
		});
		layer.add(star);
		layer.draw();

		var tween=new Konva.Tween({
			node:star,
			duration:2,
			rotation:360,
			easing:Konva.Easings.Linear,
			// yoyo:true
			onFinish:function(){
				tween.reset();
				tween.play();
			}
		});
		tween.play();
		star.on("mouseenter",function(){
			tween.pause();
		}).on("mouseleave",function(){
			tween.play();
		})
	</script>
  • 1、tween的控制方法
  • tween.play(), //播放动画
  • tween.pause(), //暂停动画
  • tween.reverse(), //动画逆播放
  • tween.reset(), //重置动画
  • tween.finish(), //立即结束动画
  • seek:英文:寻找 英 [siːk] 美 [sik]
  • 2、tween的缓动控制选项
  • Konva.Easings.Linear //线性
  • Konva.Easings.EaseIn //缓动,先慢后快
  • Konva.Easings.EaseOut //先快后慢
  • Konva.Easings.EaseInOut //两头慢,中间快
  • Konva.Easings.BackEaseIn //往回来一点,然后往前冲,汽车启动类似...
  • Konva.Easings.BackEaseOut
  • Konva.Easings.BackEaseInOut
  • Konva.Easings.ElasticEaseIn //橡皮筋 英 [ɪ'læstɪk] 美 [ɪ'læstɪk]
  • Konva.Easings.ElasticEaseOut
  • Konva.Easings.ElasticEaseInOut
  • Konva.Easings.BounceEaseIn //弹跳;弹起,反跳;弹回 英 [baʊns] 美 [baʊns]
  • Konva.Easings.BounceEaseOut
  • Konva.Easings.BounceEaseInOut
  • Konva.Easings.StrongEaseIn //强力
  • Konva.Easings.StrongEaseOut
  • Konva.Easings.StrongEaseInOut

02、Konva.to

  • to就是对tween的封装,比较简单好用

      heart.to({
      	scaleX:.5,
      	scaleY:.5,
      	duration:2,
      	yoyo:true
      });
    
posted @ 2017-11-21 21:21  不完美的完美  阅读(3778)  评论(0编辑  收藏  举报