[javascript]jQueryPlugin:flot グラフ作成
参考にしたサイト
flot – Project Hosting on Google Code
http://code.google.com/p/flot/
Ajaxサンプル開発者ブログ – グラフ作成用JavaScriptライブラリ
http://ajax-world.sakura.ne.jp/blog/archives/521
参考にしたサイト
flot – Project Hosting on Google Code
http://code.google.com/p/flot/
Ajaxサンプル開発者ブログ – グラフ作成用JavaScriptライブラリ
http://ajax-world.sakura.ne.jp/blog/archives/521
移植しました。
前に似たようなのを作った気がしますが、今回はjQueryです。
サンプル
/blog/childpage/jquery/03/index.html
移植していない普通のScrollToの使い方はこちら
plugin:ScrollTo 指定エレメントまでスクロールする
javascript
$(document).ready(init); function init(){ $.easing.easeNone=function(x, t, b, c, d) { return c * t / d + b; }; $.easing.RegularEaseOut=function(x, t,b,c,d){ return -c * (t /= d) * (t - 2) + b; }; $.easing.RegularEaseIn=function(x, t,b,c,d){ return c * (t /= d) * t + b; }; $.easing.RegularEaseInOut=function(x, t,b,c,d){ if((t /= d / 2) < 1)return c / 2 * t * t + b; return -c / 2 * ((--t) * (t - 2) - 1) + b; }; $.easing.StrongEaseOut=function(x, t,b,c,d){ return c * ((t = t / d - 1) * t * t * t * t + 1) + b; }; $.easing.StrongEaseIn=function(x, t,b,c,d){ return c * (t /= d) * t * t * t * t + b; }; $.easing.StrongEaseInOut=function(x, t,b,c,d){ if((t /= d / 2) < 1)return c / 2 * t * t * t * t * t + b; return c / 2 * ((t -= 2) * t * t * t * t + 2) + b; }; $.easing.ElasticEaseOut=function(x, t,b,c,d){ if(t == 0)return b; if((t /= d) == 1)return b + c; var p = d * 0.3; var a=c; var s = p / 4; return a * Math.pow(2, -10 * t) *Math.sin((t * d - s) * (2 * Math.PI) / p) + c + b; }; $.easing.ElasticEaseIn=function(x, t,b,c,d){ if(t==0)return b; if((t /= d) == 1)return b + c; var p=d * 0.3; var a=c; var s=p/4; return -(a * Math.pow(2, 10 * (t -= 1)) *Math.sin((t * d - s) * (2 * Math.PI) / p)) + b; }; $.easing.ElasticEaseInOut=function(x, t,b,c,d){ if (t == 0)return b; if ((t /= d / 2) == 2)return b + c; var p = d * (0.3 * 1.5); var a=c; var s=p/4; if (t < 1)return -0.5 * (a * Math.pow(2, 10 * (t -= 1)) *Math.sin((t * d - s) * (2 * Math.PI) /p)) + b; return a * Math.pow(2, -10 * (t -= 1)) *Math.sin((t * d - s) * (2 * Math.PI) / p ) * 0.5 + c + b; }; $.easing.BounceEaseOut=function(x, t,b,c,d){ if ((t /= d) < (1 / 2.75)){ return c * (7.5625 * t * t) + b; }else if (t < (2 / 2.75)){ return c * (7.5625 * (t -= (1.5 / 2.75)) * t + 0.75) + b; }else if (t < (2.5 / 2.75)){ return c * (7.5625 * (t -= (2.25 / 2.75)) * t + 0.9375) + b; }else{ return c * (7.5625 * (t -= (2.625 / 2.75)) * t + 0.984375) + b; } }; $.easing.BounceEaseIn=function(x, t,b,c,d){ return c - $.easing.BounceEaseOut(x,d - t, 0, c, d) + b; }; $.easing.BounceEaseInOut=function(x, t,b,c,d){ if (t < d/2){ return $.easing.BounceEaseIn(x,t * 2, 0, c, d) * 0.5 + b; }else{ return $.easing.BounceEaseOut(x,t * 2 - d, 0, c, d) * 0.5 + c * 0.5 + b; } }; $.easing.BackEaseOut=function(x, t,b,c,d){ var s = 1.70158; return c * ((t = t / d - 1) * t * ((s + 1) * t + s) + 1) + b; }; $.easing.BackEaseIn=function(x, t,b,c,d){ var s = 1.70158; return c * (t /= d) * t * ((s + 1) * t - s) + b; }; $.easing.BackEaseInOut=function(x, t,b,c,d){ var s = 1.70158; if ((t /= d / 2) < 1)return c / 2 * (t * t * (((s *= (1.525)) + 1) * t - s)) + b; return c / 2 * ((t -= 2) * t * (((s *= (1.525)) + 1) * t + s) + 2) + b; }; $('div#main a').click(when_a_release); $.scrollTo('#top', 0); } function when_a_release(){ $.scrollTo(this.hash, 800, {easing:this.innerHTML.split(" ").pop()}); return false; }
参考にしたサイト
Ariel Flesler: jQuery.ScrollTo
http://flesler.blogspot.com/2007/10/jqueryscrollto.html
ScrollTo | jQuery Plugins
http://plugins.jquery.com/project/ScrollTo
iPhone,iPodTouch,iPadのSafariでは、javascriptでタッチしたかどうか取得することが出来ます。
ここにそのサンプルを記します。
iPhone,iPodTouch,iPadで下記アクセス。
/js/07/
html
<div id="field" onSelectStart="return false;" onMouseDown="return false;"> <div id="output">touch me !</div> <div id="cross"></div> </div>
CSS
body{ padding:0; margin:0; } div#field{ padding:0; margin:0; width:320px; height:416px; border-bottom:1px solid; position:absolute; } div#output{ padding:0; padding-top:20px; margin:0; width:320px; font-size:12px; text-align:center; text-weight:bold; border:none; position:absolute; z-index:80; } div#cross{ background-image:url(../image/cross.gif); width:21px; height:21px; position:absolute; z-index:30; display:none; }
javascript
setInterval(oef_check, 1000/30); var mc; mc=document.getElementById("field"); //タッチした時 mc.addEventListener("touchstart", onTouchStart, false); //指が動いた時 mc.addEventListener("touchmove", onTouchMove, false); //指が離れた時 mc.addEventListener("touchend", onTouchEnd, false); //イベントがシステムによってキャンセルされた時 mc.addEventListener("touchcancel", onTouchCancel, false); //2本の指がタッチした時 mc.addEventListener("gesturestart", onGestureStart, false); //2本の指が動いた時 mc.addEventListener("gesturechange", onGestureChange, false); //指が0~1本になった時 mc.addEventListener("gestureend", onGestureEnd, false); function onTouchStart(e){ e.preventDefault(); st1="onTouchStart"; tlist=e.touches; set_touch_center(); } function onTouchMove(e){ e.preventDefault(); st1="onTouchMove"; tlist=e.touches; set_touch_center(); } function onTouchEnd(e){ e.preventDefault(); st1="onTouchEnd"; tlist=e.touches; set_touch_center(); } function onTouchCancel(e){ e.preventDefault(); st2="onTouchCancel"; tlist=e.touches; set_touch_center(); } function onGestureStart(e){ e.preventDefault(); st2="onGestureStart"; tlist=e.touches; set_touch_center(); } function onGestureChange(e){ e.preventDefault(); st3="onGestureChange"; tlist=e.touches; set_touch_center(); } function onGestureEnd(e){ e.preventDefault(); st2="onGestureEnd"; st3=""; tlist=e.touches; set_touch_center(); } function set_touch_center(){ var a; var m; var bx=0; var by=0; for(a=0;a<tlist.length;a++){ m=tlist[a]; bx+=m.pageX; by+=m.pageY; } bx/=tlist.length; by/=tlist.length; tc.x=bx; tc.y=by; } function oef_check(){ var s=""; s+=st1; s+="<br>"; s+=st2; s+="<br>"; s+=st3; s+="<br>"; if(tlist.length>0)s+="タッチの中心座標 x:"+tc.x+"y:"+tc.y+""; var mc=document.getElementById("output"); mc.innerHTML=s; mc=document.getElementById("cross"); mc.style.left=(tc.x-10)+"px"; mc.style.top=(tc.y-10)+"px"; mc.style.display="block"; }
JSONP(JSON with padding)
クロスドメインなデータを取得する一番シンプルなやり方です。
サンプル
javascript
var php='action.php'; var mc=document.createElement('script'); mc.type='text/javascript'; mc.src=php+'?callback=when_get_data'; document.getElementsByTagName('head')[0].appendChild(mc); function when_get_data(m){ m=eval(m); var a; var b=""; for(a in m){ b+=a+":"+m[a]+"\n"; } get_item("output").innerHTML=b; }
PHP
<?php $dat=array('name'=>'John', birthday=>'19731129', 'time'=>date('Y/m/d H:i:s')); $res='(' . json_encode($dat) . ')'; if($_GET['callback']){ $res=$_GET['callback'] . '(\'' . $res . '\');'; } header('Content-Type: text/javascript; charset=utf-8'); echo $res; ?>
jsでxmlを扱うのが面倒なのでオブジェクトに変換していつも処理してます。
下記のコードで大体問題無いです。
サンプル
//使う時 loadxml2json("xml/data.xml", when_get_data); function when_get_data(data){ alert(data); } function loadxml2json(file, finish_func){ var x=null; if(window.XMLHttpRequest){ x=new XMLHttpRequest(); }else{ try{ x=new ActiveXObject("Msxml2.XMLHTTP"); }catch(e){ try{ x=new ActiveXObject("Microsoft.XMLHTTP"); }catch(e){ x=null; } } } if(!x)return; x.open("GET", file ,true); x.onreadystatechange=function(){ if(x.readyState==4&&x.status==200){ var m=parsexml2json(x); finish_func(m); } } x.send(null); } function parsexml2json(x){ var m; if(!x)return; if(x.responseXML){ m=x.responseXML.documentElement; }else{ m=x.documentElement; } var n={}; n[m.nodeName]=parsenode(m); return n; } function parsenode(m){ var a; var b; var c; var n={}; if(m.nodeType==7)return; if(m.attributes && m.attributes.length){ for (a=0;a<m.attributes.length;a++){ b=m.attributes[a].nodeName; if(typeof(b)!="string")continue; n[b]=m.attributes[a].nodeValue; } } if(m.childNodes&&m.childNodes.length){ for(a=0;a<m.childNodes.length;a++){ b=m.childNodes[a].nodeName; if(m.childNodes[a].nodeType==3||m.childNodes[a].nodeType==4){ e=m.childNodes[a].nodeValue; if(e=="" || e=="\n")continue; n["#text"]=e; continue; } if(!n[b])n[b]=[]; c=parsenode(m.childNodes[a]); n[b].push(c); } } return n; }
jQueryのセレクタがとても便利ですが、
セレクタのためにjQueryをロードするのも気が引けるので自作しました。
指定したエレメントの配列が返ってくるだけです。
//使う時 var list=getelm("div#center ul.ul_class0 li"); function getelm(s){ var a,b,c,e,f,g,h,k,n,m; var p=s.split(" "); for(a=0;a<p.length;a++){ b=p[a]; if(b.indexOf('#')>-1){ e=b.split('#'); m=0; }else if(b.indexOf('.')>-1){ e=b.split('.'); m=1; }else{ e=[b]; m=2; } if(a>0){ c=k; }else{ k=document.getElementsByTagName(e[0]); if(m==2){ c=k; }else{ c=[]; for(f=0;f<k.length;f++){ n=k[f]; if(m==0 && n.id!=e[1])continue; if(m==1 && n.className!=e[1])continue; c.push(n); } } continue; } k=[]; for(f=0;f<c.length;f++){ g=c[f].childNodes; for(h=0;h<g.length;h++){ n=g[h]; if(n.nodeName.toLowerCase()!=e[0])continue; if(m==0 && n.id!=e[1])continue; if(m==1 && n.className!=e[1])continue; k.push(n); } } } if(p.length<2)return c; return k; }
Google Maps ルート検索を使おうと思い、サンプルを作りました。
Google Maps ルート検索
Google Maps本家とAPIで出来ることに違いがあるようです。
APIでは
・電車を使うルート検索が出来ない
・電車が使えないので出発時間、到着時間の指定が出来ない
WindowsXPの下記のブラウザで動作を確認しました。
Firefox3.6.3
GoogleChrome8.0.552.224
Safari5.0
IE8
参考にしたサイト
Google Code – Google Maps JavaScript API V3
http://code.google.com/intl/ja/apis/maps/documentation/javascript/
Googleの短縮URL「goo.gl」がAPIの提供を開始http://blog.fkoji.com/2011/01110730.html
したらしいので早速いじってみました。
あらかじめ下記サイトでAPIキーを取得しておきましょう。
URL Shortener APIのActivateボタンを押して表示されたURLのkeyの値がAPIキーです。
http://code.google.com/apis/console/
APIキーを取得したらあとはごりごり書くだけ。
PHP
< ?php $apikey='APIキー'; $url="https://www.googleapis.com/urlshortener/v1/url" . '?key=' . $apikey; $longurl=$_GET["longUrl"]; $shorturl=$_GET["shortUrl"]; if($longurl){ $request='{"longUrl": "' . $longurl . '"}'; $headers = array('Content-Type:application/json'); $conn = curl_init(); curl_setopt($conn, CURLOPT_URL, $url); curl_setopt($conn, CURLOPT_SSL_VERIFYPEER, false); curl_setopt($conn, CURLOPT_POSTFIELDS, $request); curl_setopt($conn, CURLOPT_RETURNTRANSFER, 1); curl_setopt($conn, CURLOPT_POST, true); curl_setopt($conn, CURLOPT_HEADER, false); curl_setopt($conn, CURLOPT_HTTPHEADER, $headers); }elseif($shorturl){ $url .= '&shortUrl=' . $shorturl; $conn = curl_init(); curl_setopt($conn, CURLOPT_URL, $url); curl_setopt($conn, CURLOPT_SSL_VERIFYPEER, false); curl_setopt($conn, CURLOPT_RETURNTRANSFER, 1); curl_setopt($conn, CURLOPT_HEADER, false); }else{ echo "error"; exit; } $ret=curl_exec($conn); echo $ret; curl_close($conn); exit; ?>
Javascript
//短縮するとき var m={'longUrl':対象URL}; ajax_get('action.php', m, when_get_shorturl); //元に戻すとき var m={'shortUrl':対象URL}; ajax_get('action.php', m, when_get_longurl); function when_get_shorturl(data){ var m=eval("("+data+")"); } function when_get_longurl(data){ var m=eval("("+data+")"); } function ajax_get(cgi_path, param, finish_func){ var httpObj = createHttpRequest(); if(!httpObj)return; var str=get_post_param(param); if(str!="")cgi_path+=('?'+str); httpObj.open("GET",cgi_path, true); httpObj.onreadystatechange=function(){ if(httpObj.readyState == 4 && httpObj.status == 200){ var data=httpObj.responseText; finish_func(data); } } httpObj.setRequestHeader('Content-Type','application/x-www-form-urlencoded; charset=UTF-8'); httpObj.send(); } function get_post_param(param){ if(!param)return ""; var a; var str=""; var m; var b; for(b in param){ str+=b+"="+encodeURIComponent(param[b]); str+="&"; } str=str.substring(0,str.length-1); return str; } function createHttpRequest(){ var x=null; if (window.XMLHttpRequest)return new XMLHttpRequest(); try { return new ActiveXObject("Msxml2.XMLHTTP"); } catch(e) { try { return new ActiveXObject("Microsoft.XMLHTTP"); } catch(e) { x = null; } } return x; }
参考にしたサイト
Google Code – Google URL Shortener API
http://code.google.com/intl/ja/apis/urlshortener/