JSFiddle - React, Tailwind, and code Playground

HTML

<script src="http://code.createjs.com/easeljs-0.7.1.min.js"></script>
<link rel="stylesheet" href="http://wuzhiwei.net/libs/bootstrap/css/bootstrap.min.css">
<script src="http://wuzhiwei.net/libs/gsap/TweenMax.min.js"></script>
<div class="container">
    <div class="panel panel-default">
        <div class="panel-heading">Hanoi Tower</div>
        <div class="panel-body">
            <canvas id="stage" class="center-block" width="400" height="220" style="border:1px black solid "></canvas>
            <div id="ctrl" class="center-block">
                <label for="numsel">Disc Number:</label>
                <select id="numsel">
                    <option value="3">3</option>
                    <option value="4">4</option>
                    <option value="5">5</option>
                    <option value="6">6</option>
                </select>
                <button class="btn btn-default" id="start" value="start">Start</button>
                <label for="step">Step:</label> <span class="badge" id="step">0</span>

            </div>
        </div>
    </div>
</div>

CSS

.panel {
    min-width:400px;
}
#stage {
    margin-bottom:15px;
}
#start {
    margin-left:20px;
    margin-right:20px;
}

.center-block{
    text-align: center;
}

JavaScript

var stage = new createjs.Stage('stage');
TweenLite.ticker.addEventListener("tick", stage.update, stage);

var hanoi = new createjs.Container();
stage.addChild(hanoi);
hanoi.x = 50;
hanoi.y = 200;

var base = new createjs.Shape();
base.graphics.beginFill("#000000").drawRect(0, 0, 300, 10);
hanoi.addChild(base);

var pegs = [];
for (var i = 0; i < 3; ++i) {
    pegs[i] = makePeg();
    hanoi.addChild(pegs[i]);
    pegs[i].x = 43 + i * 100;
    pegs[i].y = -120;
}

var discs = [];
var colors = ["#0B61A4", "#00CC00", "#C9F601", "#FFD201", "#FF7201", "E20149"];
for (i = 0; i < 6; ++i) {
    discs[i] = new createjs.Shape();
    discs[i].graphics.beginFill(colors[i]).drawRect(0, 0, 100 - i * 14, 10);
    discs[i].x = 48;
    discs[i].y = i * -10;
    discs[i].regX = 50 - i * 7;
    discs[i].regY = 10;
    hanoi.addChild(discs[i]);
}

function makePeg() {
    var peg = new createjs.Shape();
    peg.graphics.beginFill("#000000").drawRect(0, 0, 10, 120);
    return peg;
}

var pegStack = [
    [0, 1, 2],
    [],
    []
];
var delay = -2.0;

function hanoiSolve(n, a, b, c) {
    if (n > 0) {
        hanoiSolve(n - 1, a, c, b);
        var disc = pegStack[a].pop();
        var cx = 48 + a * 100;
        var xx = 48 + c * 100;
        var yy = pegStack[c].length * -10;
        var mx = (cx + xx) / 2;
        var tl = new TimelineLite({
            delay: delay += 2.0
        });
        tl.append(TweenLite.to(discs[disc], 0.5, {
            y: -130,
            onStart: function () {
                $("#step").html(++step);
            }
        }));
        tl.append(TweenLite.to(discs[disc], 1, {

            bezier: [{
                x: mx,
                y: -160
            }, {
                x: xx,
                y: -130
            }]
        }));
        tl.append(TweenLite.to(discs[disc], 0.5, {
            y: yy,
        }));
        pegStack[c].push(disc);
        hanoiSolve(n - 1, b, a, c);
    }
}

var debug = new...