Drag & Drop - script.aculo.us 版

 

Ajax JavaScript Framework の script.aculo.us 1.8.0 と、 これに同梱されている Prototype 1.6.0 を使用して作成した、ドラッグ&ドロップのサンプルです。

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

Demo

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

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

  

ソースコード

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

script.aculo.us の読み込み
<script type="text/javascript" src="/usr/lib/scriptaculous/1.8.0/lib/prototype.js"></script>
<script type="text/javascript" src="/usr/lib/scriptaculous/1.8.0/src/scriptaculous.js?load=effects,dragdrop"></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 = $(key).parentNode.id;
        points += (correct[key] == answer) ? 1: 0;
        ++max;
    }
    var score = Math.floor(points / max * 100);
    var judge = (score >= 70) ? '合格': '不合格';
    $('result').update(judge + ':' + score + '%');
}

var optDropzone = {
    hoverclass: 'dragenter',
    onDrop: function(drag, drop) {
        drag.parentNode.setStyle({ zIndex: 0 });
        drag.setStyle({ left: 0, top: 0 });
        if (drop.select('.draggable').length == 0) {
            drop.appendChild(drag);
        }
    }
}

var optDraggable = {
    starteffect: function(drag) {
        drag.parentNode.setStyle({ zIndex: 1 });
        drag.setStyle({ opacity: 0.5 });
    },
    endeffect: function(drag) {
        drag.parentNode.setStyle({ zIndex: 0 });
        drag.setStyle({ opacity: 1.0 })
            .setStyle({ left: 0, top: 0 });
    }
}

document.observe('dom:loaded', function() {
    $$('.dropzone').each(function(drop) {
        Droppables.add(drop, optDropzone);
    });
    $$('.draggable').each(function(drag) {
        new Draggable(drag, optDraggable);
    });
    $('submit').observe('click', mark);
    $('wait').setStyle({ display: 'none' });
});

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

更新履歴

日付 内容
2007-12-27 変更 script.aculo.us をバージョンアップ(1.7.0 → 1.8.0)
追加 IE の z-index 問題について、解決策を盛り込んだ (z-index は、ドラッグ要素ではなく、ドラッグ要素の「親」に対して設定する)。
追加 “ほぼ”2007-02-12版(script.aculo.us 1.7.0)の、 全ソースコード ページを追加。
2007-02-12 変更 ドラッグ&ドロップから解答の更新を削除(mark 関数内で操作結果を調べる)。 revert の視覚効果をシンプルに。
2007-02-09 変更 script.aculo.us をバージョンアップ(1.6.4 → 1.7.0)
変更 ソースコードを全面的に書き直し。
2006-09-16 変更 script.aculo.us をバージョンアップ(1.6.1 → 1.6.4)
追加 ドロップゾーンへの干渉をオレンジ色で表現。 ドロップゾーンに先客が居る場合は、ドロップをキャンセル。
2006-05-19 初版