JQuery-UIのResizableとDraggableを利用してスケジュール表を作る その4(日付の取得)
おはようございます。
少し間が空きましたが、
JQuery-UIプラグインを用いたスケジュール表の続きです。
イベント処理を追加し、日付を取得、表示できるようにしてみました。
プログラムは前回のものを流用します。
スポンサーリンク
画面
sample.html
<!DOCTYPE html> <html lang="ja"> <head> <meta charset="UTF-8"> <title>要素のドラッグとリサイズのサンプル</title> <link rel="stylesheet" href="http://code.jquery.com/ui/1.10.0/themes/base/jquery-ui.css" /> <link rel="stylesheet" href="./css/style.css" /> </head> <body> <div class="frame"> ....割愛 </div> <div style="margin:10px;"> <span>日付:</span> <span id="date"></span> <input id="days" type="hidden" value="1"/> </div> </body> <script type="text/javascript" src="https://code.jquery.com/jquery-3.2.1.min.js"></script> <script src="http://code.jquery.com/jquery-1.8.3.js"></script> <script src="http://code.jquery.com/ui/1.10.0/jquery-ui.js"></script> <script> // 幅、高さの定義 var DIV_W = 34 var CELL_W = 37; var CELL_H = 25; $(document).ready( function () { // リサイズ設定 $('#panel1, #panel2').resizable({ handles: "e" , grid: [CELL_W, CELL_H] , resize: function( event, ui ) { var info = getDaysInfo(event, ui); $("#date").text(info.text) } , stop: function( event, ui ) { var info = getDaysInfo(event, ui); alert(info.text); } }); // ドラッグ設定 $('#panel1, #panel2').draggable({ containment: "#detailTable" , grid: [CELL_W, 0] , opacity: 0.7 , scroll: true , drag: function( event, ui ) { var info = getDaysInfo(event, ui); $("#date").text(info.text) } , stop: function( event, ui ) { var info = getDaysInfo(event, ui); alert(info.text); } }); } ); /** * 渡されたデータから日付の情報を作成して返します. * */ function getDaysInfo(event, ui) { var info = new Object(); info.start = ui.position.left == 0 ? 1 : 1 + ui.position.left / CELL_W; if (ui.size) { info.end = info.start + (ui.size.width - DIV_W) / CELL_W; } else { info.end = info.start + (event.target.offsetWidth - DIV_W) / CELL_W; } info.days = info.end - info.start; info.allDay = (info.end == info.start) if (info.allDay) { info.text = info.start + "日"; } else { info.text = info.start + "日 ~ " + info.end + "日"; } return info } </script> </html>
テーブル部分のプログラムは割愛しました。(長くなるので)
変更箇所は、日付を表示(確認)するラベル要素とスクリプト部分です。
スケジュール線要素をリサイズしたり、ドラッグした際に、
日付セルの幅、スケジュール線の幅、高さなどから日付を計算するようにしています。
(うまいやり方があったら教えてください。。)
起動してみる
無事に日付が表示されました。
スクショはありませんが、リサイズ、ドラッグ終了時にアラートでも表示するようにしています。
まとめ
まだまだ問題点は残るものの、日付の情報が取れれば色々な処理ができそうです。
次回は新規でスケジュール線を追加する処理を試してみようかと思います。
(おそらく最終回)
ではでは。
ディスカッション
コメント一覧
まだ、コメントがありません