码迷,mamicode.com
首页 > 其他好文 > 详细

Canvas开发库封装

时间:2017-11-21 23:59:36      阅读:432      评论:0      收藏:0      [点我收藏+]

标签:使用   nts   英文   一点   out   宽度   linear   选项   好用   

一、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、事件

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

    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
    });

Canvas开发库封装

标签:使用   nts   英文   一点   out   宽度   linear   选项   好用   

原文地址:http://www.cnblogs.com/DCL1314/p/7875410.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!