0

KineticJS を使用してアークを描画する場合、ブラウザー コンソールでエラーが発生します:「オブジェクト # にはメソッド 'getContext' がありません」コード:

<!DOCTYPE HTML>
<html>
  <head>
    <style>
      body {
        margin: 0px;
        padding: 0px;
      }
    </style>
   </head>
  <body>   
  <script src="http://d3lp1msu2r81bx.cloudfront.net/kjs/js/lib/kinetic-v4.7.2.min.js"></script>
  <script defer="defer">
      var stage = new Kinetic.Stage({
        container: 'container',
        width: 578,
        height: 200
      });
      var layer = new Kinetic.Layer();

     var myarc = new Kinetic.Shape({
      drawFunc: function(canvas) {
        var context=canvas.getContext('2d');
        var x = stage.getWidth()/2;
        var y = stage.getHeight()/2;
        var radius = 70;
        var startAngle = 1 * Math.PI;
        var endAngle = 0 * Math.PI;
        context.beginPath();
        context.arc(x, y, radius, startAngle, endAngle, false);
        context.stroke(this);
        canvas.fillStroke(this);
    },
    fill: '#00D2FF',
    stroke: 'red',
    strokeWidth: 15,
    draggable:true
    }); 


     myarc.on('mouseover', function() {
        this.setStroke('blue');
        this.setStrokeWidth(20);
        layer.draw();
      });

      myarc.on('mouseout', function() {
        this.setStroke('black');
        this.setStrokeWidth(4);
        layer.draw();
      });
      // add the shape to the layer
      layer.add(myarc);

      // add the layer to the stage
      stage.add(layer); 
    </script>

    <div id="container"></div>
  </body>
</html>

「コンテキスト」を drawFunc 関数パラメーターとして転送するだけで、キャンバスを使用せずに弧を描くことができます。

 drawFunc: function(context) {

、しかし、この場合、マウスオーバーイベントでアークの幅を変更できません。

4

1 に答える 1

1

Kinetic 4.7.2 にアップグレードしたようです

4.7.0 以降のバージョンには、キャンバス ラッパーではなくコンテキスト ラッパーを提供する、わずかに異なる drawFunc があります。

https://github.com/ericdrowell/KineticJS/wiki/Change-Log

これを試して:

  drawFunc: function(context) {
    var x = stage.getWidth()/2;
    var y = stage.getHeight()/2;
    var radius = 70;
    var startAngle = 1 * Math.PI;
    var endAngle = 0 * Math.PI;
    context.beginPath();
    context.arc(x, y, radius, startAngle, endAngle, false);
    context.fillStrokeShape(this);
},
于 2013-10-28T16:23:08.400 に答える