Drag & Drop - Ext JS 版

 

Ajax JavaScript Framework の Ext JS 2.0 を使用して作成した、ドラッグ&ドロップのサンプルです。

Ext JS は、Yahoo! UI, jQuery, Prototype といった、他の Framework と組み合わせて使うことが出来ますが、 今回のサンプルでは、他の Framework とは組み合わせずに、すべて Ext JS でまかなっています。

サンプルについて、ブラウザごとの動作確認結果は Drag & Drop (Ajax JavaScript) にまとめてあります。

Demo

問題.次の表をドラッグ&ドロップにより完成させてください。

オリンピック 開催国
2004年(夏季)
アテネ
2006年(冬季)
トリノ
2008年(夏季)
ペキン
選択肢

  

ソースコード

ここでは JavaScript のみ掲載します。 CSS と HTML についてはDrag & Drop - 共通ソース(CSS, HTML) 全ソースコード を参照してください。

以下の「Ext JS の読み込み」では ext.js を読み込んでいますが、これは必要なモジュールだけをビルドしたものです。 ビルド方法については、次のセクション Ext JS のビルド方法 を参照してください。

Ext JS の読み込み
<!--
<script type="text/javascript" src="/usr/lib/extjs/2.0/adapter/ext/ext-base.js"></script>
<script type="text/javascript" src="/usr/lib/extjs/2.0/ext-all.js"></script>
-->
<script type="text/javascript" src="/usr/lib/extjs/2.0/ext.js"></script>

JavaScript
<script type="text/javascript">
//<![CDATA[
(function() {

var correct = { opt0: 'ans1', opt1: 'ans2', opt2: 'ans0' }  // 正解

var mark = function(event) {
    var points = 0;
    var max = 0;
    for (key in correct) {
        var answer = Ext.get(key).dom.parentNode.id;
        points += (correct[key] == answer) ? 1: 0;
        ++max;
    }
    var score = Math.floor(points / max * 100);
    var judge = (score >= 70) ? '合格': '不合格';
    Ext.get('result').dom.innerHTML = judge + ':' + score + '%';
}

Ext.override(Ext.dd.DD, {
    startDrag: function(x, y) {
        Ext.get(this.getEl()).applyStyles({ opacity: 0.5, zIndex: 1 });
    },
    endDrag: function(e) {
        Ext.get(this.getEl()).applyStyles({ opacity: 1.0, zIndex: 0 })
                             .applyStyles({ left: 0, top: 0 });
    },
    onDragEnter: function(e, id) {
        Ext.get(id).addClass('dragenter');
    },
    onDragOut: function(e, id) {
        Ext.get(id).removeClass('dragenter')
    },
    onDragDrop: function(e, id) {
        var drop = Ext.get(id).removeClass('dragenter');
        if (drop.query('.draggable').length == 0) {
            drop.appendChild(
                Ext.get(this.getEl()).applyStyles({ left: 0, top: 0 })
            );
        }
    }
});

Ext.onReady(function() {
    Ext.select('.dropzone').each(function(elm) {
        new Ext.dd.DDTarget(elm.dom.id);
    });
    Ext.select('.draggable').each(function(elm) {
        elm.applyStyles({ left: 0, top: 0 });
        new Ext.dd.DD(elm.dom.id).isTarget = false;
    });
    Ext.get('submit').on('click', mark);
    Ext.get('wait').applyStyles({ display: 'none' })
});

}());
//]]>
</script>

Ext JS のビルド方法

Ext JS をビルドするには、 Build your own Ext 2.0 でウィザード形式で進めます。 操作箇所を ハイライト で示します。

Choose a Library

◎ No Adapter (Ext Stand-alone)
○ Yahoo UI!
○ jQuery
○ Prototype/Scriptaculous
[ Next >> ]

Choose Components and Classes

☑ Ext Core (Required)
☐ .....
Core - Drag and Drop
☐ .....
[ << Back ] [ Build It! ]

以上で、ext.js のダウンロードが始まります。

更新履歴

日付 内容
2007-12-22 初版