タグ「jQuery」の一覧

Google Maps APIとTwitter APIを連携させて遊んでみた。

2010.1.29 金曜日

なんだかやたら忙しくなり、
忙しくなればなるほど余分なことやって遊びたくなるという。

何気なくTwitterのAPI仕様書を読み直してたら、検索用のAPIでgeocodeを指定出来るとのことで、試しにGoogle Maps APIと連携させてみた。

[TwitterMaps]

地図の右側に、表示範囲内で発言された最新15件のツイートを表示。
地図を動かす度にAPIを実行するので、制限(100回/1h)に引っかかりやすそう。

地図上にピンを打って表示できるかな…と期待してたんだけど、
検索のAPIは認証不要で使えるからか(?)戻ってくるデータにgeocodeが入ってこないみたい。

APIから戻ってくるデータは
「geo」には一律nullが入っていて、
「location」に、プロフィールの「現在地」がテキストで入っている物と、緯度経度が入っている物が混じってる感じだった。

テキストボックスに透かし文字を入れるJS

2009.11.27 金曜日

最近多い気がする。
テキストボックスが空の時に初期値で警告文とか入っていて、フォーカスすると消えるアレ。
textbox

ここんとこ出番が多かったのでjQueryのプラグインにしてみた。
未入力のままフォームがsubmitされると初期値が送信されちゃうので、親のformオブジェクトを探してsubmitの際に空にするようにしてみた。

サンプル

サンプル

使い方

<br />
$("#text01").setDefaultValue("値を入力してください");<br
/>
$
("#text02").setDefaultValue("値を入力してください", "gray");<br />

第一引数に初期値になるメッセージ
第二引数にクラス名を入れると、初期値を表示している際に適用される。
グレー文字で出したいとか、背景を赤にしたいとかありそうだったので。

ソース

Download: textbox.js
  1. <br />
  2. (function($) {<br />
  3.     $.extend({<br />
  4.         textarea : new function(){<br />
  5.             var TA = this;<br />
  6.             TA.set = function(o, m, c){<br />
  7.                 if (Object.prototype.toString.call(m) != "[object String]")return false;<br />
  8.                 var parent;<br />
  9.                 var p = o.parents();<br />
  10.                 for(var i=0;i</p>
  11. <p.length;i++){<br />
  12.                     if (typeof p[i].elements != "undefined"){<br />
  13.                         $(p[i]).submit(function(){<br />
  14.                             if (o.val() == m){<br />
  15.                                 o.val('');<br />
  16.                             }<br />
  17.                         });<br />
  18.                         break;<br />
  19.                     }<br />
  20.                 }<br />
  21.                 if (o.val() == "" || o.val() == m){<br />
  22.                     o.val(m);<br />
  23.                     if (c) o.addClass(c);<br />
  24.                 }<br />
  25.                 o.focus(function(){<br />
  26.                     if (o.val() == m){<br />
  27.                         o.val('');<br />
  28.                         if (c) o.removeClass(c);<br />
  29.                     }<br />
  30.                 });<br />
  31.                 o.blur(function(){<br />
  32.                     if (o.val() == ""){<br />
  33.                         o.val(m);<br />
  34.                         if (c) o.addClass(c);<br />
  35.                     }<br />
  36.                 });<br />
  37.             }<br />
  38.         }<br />
  39.     });<br />
  40.     $.fn.extend({<br />
  41.         setDefaultValue: function(m, c){<br />
  42.             $.textarea.set($(this), m, c);<br />
  43.         }<br />
  44.     });<br />
  45. })(jQuery);<br />

jQueryと再起関数でツリーメニュー

2009.11.17 火曜日

任意の数の多段に対応したツリーメニュー。
リクエストに、階層単位での処理(開く際に同階層の他のメニューを閉じる)があったんで再起関数を使ったんだけど、jQueryのセレクタでちょっと戸惑った。

再起で1階層づつ処理したかったんで、上手いことやる方法ないかと探してたんだけど、

parent > child 
(親子関係を指定して要素を選択する。)

これって、parentを省略して

$(">child", elem)

って書き方でいけるのね。メモメモ。

サンプル

サンプル

ソース

HTML

  1. <script language="javascript" type="text/javascript" src="jquery.js"></script>
  2. <script language="javascript" type="text/javascript" src="treeMenu.js"></script>
  3.  
  4. <ul id="sample01" class="sample_ul treeMenu">
  5.   <li><span>Menu1</span>
  6.     <ul>
  7.       <li><a href="#">Menu1.1</a></li>
  8.       <li><a href="#">Menu1.2</a></li>
  9.       <li><a href="#">Menu1.3</a></li>
  10.     </ul>
  11.   </li>
  12. </ul>

 
JS

Download: treeMenu.js
  1. $(document).ready(function(){
  2.     $(".treeMenu ul").hide();
  3.     $(".treeMenu").each(function(){
  4.         TM_init($(this));
  5.     });
  6.     function TM_init(elem, sp, so){
  7.         if (!sp) sp = 400;
  8.         if (!so) so = false;
  9.         $(">li:has(ul)", elem).each(function() {
  10.             var myTree = this;
  11.             $(">:first-child", myTree).click(function(e){
  12.                 var target = this;
  13.                 $(">li:has(ul)", elem).each(function(){
  14.                     if ($(">:first-child", this).get()[0] == target){
  15.                         $(">ul:first", this).slideToggle(sp);
  16.                     }else if (so == true){
  17.                         $(">ul:first", this).slideUp(sp);
  18.                     }
  19.                 });
  20.             });
  21.             TM_init($(">ul:first", myTree), sp, so);
  22.         });
  23.     }
  24. });

とりあえずデフォルト状態で、class=”treeMenu”と入っているエレメントに対して自動で設定されるようになってるけど、
速度と挙動(メニューを開いた際に同階層の他のメニューを閉じるか残すか)が変更出来るようにしてあるので、
3~5行目を編集して

//-- 速度と挙動を任意で指定
$
(".treeMenu").each(function(){
    
TM_init($(this), 300, true);
});

 

//-- IDを指定して個別設定
TM_init($("#sample01"));
TM_init($("#sample02"), 500, true);

といった感じでも。

時間もないのでとにかくシンプルにって感じで書いたんだけど、
メニューを開くトリガーに画像を使いたいって事だったので、開閉に応じた画像のスワップとかのリクエストもありそう。
コールバック関数とか渡せるようにしといたら便利になるかなぁ。

家具レイアウトシミュレーション用のJavascriptを…

2008.12.16 火曜日

引越をすることになり、その件で頭が一杯だったのでつい…。
家具どう置こうかなー、とか色々考えてて、
とリあえず、Javascriptで家具配置のシミュレーションが出来る物を自分用に簡易なの作ってこれで遊んでたんだけど、
ちょっと面白そうなんで一度ちゃんと作ってみるかも。

ガントチャートを描画するjQueryプラグイン

2008.12.12 金曜日

プロジェクト管理ツールを色々と見ていたら、ガントチャートはJpGraphというツールで出力する物が殆どで、
JpGraphだと、GDを使って画像で生成してるので綺麗に出力される反面、融通聞きにくいんじゃないかなぁ、という印象。
タスク名等のテキストにリンク張ったりとか出来た方が便利だろうし、画像生成する際のフォントの問題で日本語化も結構手間。

これってJavascriptで出したらどんな感じだろう、と、思いつきで作ってみた。

■サンプル&ダウンロード
jquery.gantt

ガントチャートプラグイン

$("#gantt01").gantt();

空っぽの状態で生成。

$("#gantt01").gantt({
'tasks':[
{ 'titles': 'Task01', 'start_date': '20081213', 'end_date': '20081222' },
{ 'titles': 'Task02', 'start_date': '20081217', 'end_date': '20081231' },
{ 'titles': 'Task03', 'start_date': '20081227', 'end_date': '20090121' }
]
});

と、引数にタスク情報を渡して一気に生成することも可能。

$('#gantt01').addTask({ 'titles': 'Task04', 'start_date': '20081230', 'end_date': '20090111' });
 
$
('#gantt01').addTask([
{ 'titles': 'Task04', 'start_date': '20081230', 'end_date': '20090111' },
{ 'titles': 'Task05', 'start_date': '20081230', 'end_date': '20090111' }
]);

タスクの追加はaddTask()
配列で一気に送ってもOK。

// 当日へ移動
$
('#gantt01').setPeriod();
// 日付指定
$
('#gantt01').setPeriod('20081212');
// 範囲指定
$
('#gantt01').setPeriod('20081212', '20090112');
 
// 次のページ
$
('#gantt01').setPeriod('+');
// 7日分送る
$
('#gantt01').setPeriod('+7');
// 前のページ
$
('#gantt01').setPeriod('-');
// 7日分前へ
$
('#gantt01').setPeriod('-7');
 
// 日単位表示
$
('#gantt01').setType('date');
// 月単位別表示
$
('#gantt01').setType('month');

表示切り替え。

$("#gantt01").gantt({
'type': 'date',                   // グラフのタイプ(date  / month)
'range': 50,                      // 表示範囲 (グラフのコマ数)
'titles': ['title01', 'title02']// タイトル項目(配列にすると複数列)
'tasks': {}                       // タスクデータ (オブジェクト)※配列で複数渡しも可
});

生成時のオプション。

$('#gantt01').addTask({
'titles': ['Task05', 'hoge']// タイトル項目(配列可。表示数は生成時の設定に依存)
'start_date': '20090103',   // 開始日 ※必須
'end_date': '20090116',     // 終了日 ※必須
'color': '#0000FF',            // グラフの色
'text': 'Task05'                // グラフの中に表示するテキスト
});

タスク追加時のオプション。
開始日と終了日だけは必須。

日付の形式は
YYYYMMDD
YYYY.MM.DD
YYYY/MM/DD
のいずれかで。

急な思いつきでガーッと作ったので色々と雑かも。
ニーズが発生したらまた手を入れると思うけど、ニッチな用途なので延々とアルファバージョンの可能性もw

使用は現在の所未定。
一応、プロジェクト管理ツールを自分らの使いやすい形式の物を自作してみたいという野望があるにはあるけど…。