美文网首页Web
JS中konva第三方绘制库的使用

JS中konva第三方绘制库的使用

作者: 追逐_chase | 来源:发表于2019-10-10 11:53 被阅读0次
    web.jpeg

    1. Konva特点

    * 小巧、使用方便、适合移动端和pc端
    * 支持丰富的事件处理操作
    * 支持类似JQuery的操作方式
    * 开源,可以随意更改
    * 社区更新比较活跃,github托管源码
    * 性能也不错
    

    2. Konva的基本使用

    • 舞台的概念的引入。整个视图看做是一个舞台 stage
    • 舞台中可以绘制很多个层 layer
    • layer下面可以有很多的group
    • group下面可以有 矩形、图片、其他形状等
    2.1 创建要绘制的容器
        <body>
            <div id="con"></div>
    
        </body>
    
    2.2 引入Konva库和使用
    • 引用
    <script src="JS/konva.js"></script>
    
    • 使用
    //创建一个 舞台
        var stage = new Konva.Stage({
            width:window.innerWidth,
            height:window.innerHeight,
            container:"con"   //需要存放舞台的Dom容器
        });
    
    //第二步:创建层
    var layer = new Konva.Layer();  //创建一个层
    stage.add(layer);               //把层添加到舞台
    
    //3.创建组
    
        //对象里面传入配置参数
        //如果对象里面 设置了 x,y那么在绘制图层的时候
        // 这个x,y就是坐标原点,绘制图形的参考点
        var group =  new  Konva.Group({
    
        });
    // 把组添加到 绘制层
        layer.add(group);
    
    //创建要绘制的 图形
        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             //是否可以进行拖拽
        });
        
    
    //添加到组中
    group.add( rect );  //把矩形添加到组中
    
    //绘制
    layer.draw();       //绘制层到舞台上
    
    
    • 例子
    <script type="text/javascript">
        
        //创建一个 舞台
        var stage = new Konva.Stage({
            width:window.innerWidth,
            height:window.innerHeight,
            container:"con"
        });
    
        //2.创建绘制层
        var layer = new Konva.Layer();
    
        //把配置层添加到 舞台上
        stage.add(layer);
    
        //3.创建组
    
        //对象里面传入配置参数
        //如果对象里面 设置了 x,y那么在绘制图层的时候
        // 这个x,y就是坐标原点,绘制图形的参考点
        var group =  new  Konva.Group({
    
        });
    
        // 把组添加到 绘制层
        layer.add(group);
    
        //4.绘制一个矩形
    
        //原生的canvas在平移,缩放的时候都会对x,y有影响,但是Konva 没有
        var rect = new  Konva.Rect({
            x:200,
            y:200,
            height:100,
            width:200,
            //填充颜色
            fill:"red",
            //描边颜色
            stroke:"blue",
            strokeWidth:10,
            //是否可以推动
            draggable:true,
            scaleX:2,
            scaleY:2,
            dash:[1,1]
            //是否可见
            // visible:false
    
        });
        //添加到组里面
        group.add(rect);
    
    
         var circle = new Konva.Circle({
              x:100,
              y:100,
               radius: 40,
               fill: 'red',
              stroke: 'black',
               strokeWidth: 5
         });
    
         group.add(circle);
    
    
        // 创建五角星
        var star = new Konva.Star({
            x: 200,
            y: 400,
            numPoints: 5,
            //内圆的半径
            innerRadius: 30,
            //外圆的半径
            outerRadius: 70,
            fill: 'red',
            stroke: 'black',
            strokeWidth: 4,
            draggable : true
        });
    
        group.add(star);
    
    
        //5.绘制到图层
        layer.draw();
    
        
        
    </script>
    
    
    
    image.png
    • 进度条的绘制
    <script type="text/javascript">
        //1.创建舞台
        var stage = new  Konva.Stage({
            width:window.innerWidth,
            height:window.innerHeight,
            container:"con"
        });
    
        //2.创建绘制层
        var layer = new  Konva.Layer();
    
        stage.add(layer);
    
        //3.创建矩形
    
        var progress = new  ProgressBar({
            x:1/8 * stage.width(),
            y:1/2 * stage.height(),
            width: 3/4 * stage.width(),
            height:1/15 * stage.height(),
            strokeColor:"#ccc",
            fillColor:"red",
            strokeWidth:1,
            value:0.1,
            cornerRadius:5.0
    
        });
        //绘制
        progress.render(layer);
    
        layer.draw();
    
      progress.update(function () {
          console.log("1111");
      });
      
    
    
    </script>
    
    
    
    • 自定义构造函数类ProgressBar
    function ProgressBar(option) {
    
            this._init(option)
    
     };
    
     ProgressBar.prototype = {
         constructor:ProgressBar,
         _init:function (option) {
             option = option||{};
             //坐标点
             this.x = option.x || 0;
             this.y = option.y || 0;
             this.width = option.width||0;
             this.height = option.height ||0;
             //颜色
             this.fillColor = option.fillColor || "black";
             this.strokeColor = option.strokeColor||"black";
             this.strokeWidth = option.strokeWidth || 1;
             //进度值
             this.value = option.value || 0.1;
             //圆角
             this.cornerRadius = option.cornerRadius;
         },
         //绘制
         render:function (layer) {
            this.group = new Konva.Group();
            layer.add(this.group);
    
            //绘制内部矩形
    
             var innerRect = new Konva.Rect({
                 x:this.x,
                 y:this.y,
                 //宽度按比例
                 width:this.width * this.value,
                 height:this.height,
                 fill:this.fillColor,
                 id:"innerRect"
             });
    
             this.group.add(innerRect);
    
             //绘制外部矩形
    
             var outRect = new  Konva.Rect({
                 x:this.x,
                 y:this.y,
                 width:this.width,
                 height:this.height,
                 stroke:this.strokeColor,
                 strokeWidth:this.strokeWidth,
                 //圆角属性
                 cornerRadius:this.cornerRadius
             });
    
             this.group.add(outRect);
    
    
    
         },
         update:function (fn) {
             //获取到内部矩形
             var recct = this.group.findOne("#innerRect");
             //更改this
             var that = this;
             that.fn = fn;
             //内部矩形做动画
             recct.to({
                 width:this.width,
                 duration:3,
                 onFinish:function () {
                     //更改thisde的指向
                     if (typeof that.fn == "function"){
                         that.fn();
                     }
                 }
    
             });
         }
     };
    
    Untitled.gif

    相关文章

      网友评论

        本文标题:JS中konva第三方绘制库的使用

        本文链接:https://www.haomeiwen.com/subject/ijnxpctx.html