0

Raphael.js を使用して円セクターの簡単なアニメーションを作成しようとしています。アニメーションは、円のセクターを 0 から 2 * Pi まで展開する必要があります。問題は、1 秒後にアニメーションなしで円を描くことです。

これが私のコードです:

<html>
<head>
    <title></title>
    <script src="raphael.js"></script>
</head>
<body>
    <script>
        window.onload = function () {
            var paper = Raphael("holder");

            paper.ca.sector = function (x, y, r1, r2, startAngle, endAngle, color) {
                    var x11 = x + r1 * Math.sin(startAngle);
                    var y11 = y - r1 * Math.cos(startAngle);
                    var x21 = x + r1 * Math.sin(endAngle);
                    var y21 = y - r1 * Math.cos(endAngle);

                    var x12 = x + r2 * Math.sin(startAngle);
                    var y12 = y - r2 * Math.cos(startAngle);
                    var x22 = x + r2 * Math.sin(endAngle);
                    var y22 = y - r2 * Math.cos(endAngle);

                    var big = 0;
                    if (endAngle - startAngle > Math.PI) 
                        big = 1;

                    var pathList = ["M", x12, y12,
                                    "A", r2, r2, 0, big, 1, x22, y22,
                                    "L", x21, y21, 
                                    "A", r1, r1, 0, big, 0, x11, y11,
                                    "Z"];

                    return {path: pathList, fill: color, stroke: "none"};
                }

            var p = paper.path().attr({sector: [300, 300, 100, 140, 0, 0.0001, "pink"]});
            p.animate({sector: [300, 300, 100, 140, 0, Math.PI * 1.999999, "pink"]}, 1000, "bounce");
        };
    </script>

    <div id="holder" style="width: 700px; height: 700px;"></div>
</body>
</html>

長いリストで申し訳ありません。

では、なぜそれが起こるのでしょうか?そして、私は何を間違っていますか?

ありがとう!

4

1 に答える 1

1

作業コードは次のとおりです。

        var paper = Raphael("holder");

        var createSector = function (x, y, r1, r2, startAngle, endAngle, color) {
                var x11 = x + r1 * Math.sin(startAngle);
                var y11 = y - r1 * Math.cos(startAngle);
                var x21 = x + r1 * Math.sin(endAngle);
                var y21 = y - r1 * Math.cos(endAngle);

                var x12 = x + r2 * Math.sin(startAngle);
                var y12 = y - r2 * Math.cos(startAngle);
                var x22 = x + r2 * Math.sin(endAngle);
                var y22 = y - r2 * Math.cos(endAngle);

                var big = 0;
                if (endAngle - startAngle > Math.PI) 
                    big = 1;

                var pathList = ["M", x12, y12,
                                "A", r2, r2, 0, big, 1, x22, y22,
                                "L", x21, y21, 
                                "A", r1, r1, 0, big, 0, x11, y11,
                                "Z"];

                return {path: pathList, fill: color, stroke: "none"};
            }

        var p = paper.path();
           p.attr(createSector(300, 300, 100, 140, 0, 0.001, "pink"));
        p.animate(createSector(300, 300, 100, 140, 0.01, Math.PI * 1.999999, "pink"), 1000, "bounce");

まだわかりませんが、なぜあなたのコードが機能しないのですか

JSFiddle デモ

編集:わかりました、いくつかの値を試してみましたが、パスの塗りつぶしがアニメーションと組み合わせて使用​​されていないため、ラファエルのバグのように見えます。

var paper = Raphael("holder");

        paper.customAttributes.sector = function (x, y, r1, r2, startAngle, endAngle, color,strokeWidth) {
                var x11 = x + r1 * Math.sin(startAngle);
                var y11 = y - r1 * Math.cos(startAngle);
                var x21 = x + r1 * Math.sin(endAngle);
                var y21 = y - r1 * Math.cos(endAngle);

                var x12 = x + r2 * Math.sin(startAngle);
                var y12 = y - r2 * Math.cos(startAngle);
                var x22 = x + r2 * Math.sin(endAngle);
                var y22 = y - r2 * Math.cos(endAngle);

                var big = 0;
                if (endAngle - startAngle > Math.PI) 
                    big = 1;

                var pathList = ["M", x12, y12,
                                "A", r2, r2, 0, big, 1, x22, y22,
                                "L", x21, y21, 
                                "A", r1, r1, 0, big, 0, x11, y11,
                                "Z"];

            return {path: pathList, fill: color,'stroke-width':strokeWidth};
            }

        var p = paper.path();
           p.attr({sector: [300, 300, 100, 140, 0, 0.0001, "#caac12",1]});
        p.animate({sector: [300, 300, 100, 140, 0.0001, Math.PI * 1.999999, "#cacaca",0]}, 3000);

JSFiddle デモ 2

于 2013-10-21T05:43:00.550 に答える