2016年5月11日水曜日

クリックした時に都道府県名を表示させる

前回のカスタマイズによって、マウスカーソル直下の要素名を取得できるようになった。
地理的メモ帳: jQueryでマウスカーソル直下の要素名を取得し続ける

今回は、
1.マウスクリック時に、
2.カーソル直下要素のID名を取得し、
3.マウスカーソル近傍に、
4.都道府県名を表示させる。
以上のものを実装した。
それぞれの参考サイトは下記の通り。

jQuery 便利なonを使おう(on click) - Qiita

あのスマホゲームみたいにクリックした場所が点灯するサンプルつくってみた

[CSS] 文字は透過させずにそのまま、背景だけ透明にする方法 - Webworker's Clip

これによって、日本地図上をクリックした時に、有効範囲(SVGでIDが設定してある範囲)上にカーソルが合った場合、その都道府県名が表示される。
クリック時にイベントが実行されるようにしてあるが、カーソルが乗ったときや止まったときに実行させるなどのカスタマイズは可能だ。

これでクリックによる追加情報の表示ができるようになった。

今回のソースコードは下の通り。

<script>
(function($){
var i;
var w = $('#text').width();
var h = $('#text').height();
var array = [ //Name of Prefecture
  "HOPPOURYOUDO",
  "HOKKAIDO",
  "AOMORI",
  "IWATE",
  "AKITA",
  "YAMAGATA",
  "MIYAGI",
  "FUKUSHIMA",
  "IBARAKI",
  "TOCHIGI",
  "GUNMA",
  "SAITAMA",
  "TOKYO",
  "TOKYO_ISLANDS",
  "KANAGAWA",
  "CHIBA",
  "YAMANASHI",
  "NIIGATA",
  "ISHIKAWA",
  "HUKUI",
  "TOYAMA",
  "NAGANO",
  "SIZUOKA",
  "GIFU",
  "AICHI",
  "MIE",
  "SHIGA",
  "WAKAYAMA",
  "KYOTO",
  "OSAKA",
  "HYOGO",
  "NARA",
  "OKAYAMA",
  "TOTTORI",
  "HIROSHIMA",
  "YAMAGUCHI",
  "SHIMANE",
  "KAGAWA",
  "KOUCHI",
  "TOKUSHIMA",
  "EHIME",
  "FUKUOKA",
  "NAGASAKI",
  "SAGA",
  "KUMAMOTO",
  "OOITA",
  "MIYAZAKI",
  "KAGOSHIMA",
  "KAGOSHIMA_ISOLATED_ISLANDS",
  "OKINAWA"
];
var name_array ={
  "HOPPOURYOUDO":"北海道",
  "HOKKAIDO":"北海道",
  "AOMORI":"青森県",
  "IWATE":"岩手県",
  "AKITA":"秋田県",
  "YAMAGATA":"山形県",
  "MIYAGI":"宮城県",
  "FUKUSHIMA":"福島県",
  "IBARAKI":"茨城県",
  "TOCHIGI":"栃木県",
  "GUNMA":"群馬県",
  "SAITAMA":"埼玉県",
  "TOKYO":"東京都",
  "TOKYO_ISLANDS":"東京都",
  "KANAGAWA":"神奈川県",
  "CHIBA":"千葉県",
  "YAMANASHI":"山梨県",
  "NIIGATA":"新潟県",
  "ISHIKAWA":"石川県",
  "HUKUI":"福井県",
  "TOYAMA":"富山県",
  "NAGANO":"長野県",
  "SIZUOKA":"静岡県",
  "GIFU":"岐阜県",
  "AICHI":"愛知県",
  "MIE":"三重県",
  "SHIGA":"滋賀県",
  "WAKAYAMA":"和歌山県",
  "KYOTO":"京都府",
  "OSAKA":"大阪府",
  "HYOGO":"兵庫県",
  "NARA":"奈良県",
  "OKAYAMA":"岡山県",
  "TOTTORI":"鳥取県",
  "HIROSHIMA":"広島県",
  "YAMAGUCHI":"山口県",
  "SHIMANE":"島根県",
  "KAGAWA":"香川県",
  "KOUCHI":"高知県",
  "TOKUSHIMA":"徳島県",
  "EHIME":"愛媛県",
  "FUKUOKA":"福岡県",
  "NAGASAKI":"長崎県",
  "SAGA":"佐賀県",
  "KUMAMOTO":"熊本県",
  "OOITA":"大分県",
  "MIYAZAKI":"宮崎県",
  "KAGOSHIMA":"鹿児島県",
  "KAGOSHIMA_ISOLATED_ISLANDS":"鹿児島県",
  "OKINAWA":"沖縄県"
};

$('#btn-test1').on("click", function() {
  for(var i=0;i<50;i++){
      $('#'+array[i]).css({ fill: '#'+Math.floor(Math.random()*16777215).toString(16) });
    }
});

$(".main-outer").on("click", function(evt) {
if(! $('#text').is(':animated')){
  if(typeof $(jQuery(":hover")[jQuery(":hover").length -1]).attr("id") != 'undefined'){
    var text = $(jQuery(":hover")[jQuery(":hover").length -1]).attr("id");
    $('#text').css("display","none");
    var areaOffset = $("#text").parent().offset();
    var x = evt.pageX - areaOffset.left;
    var y = evt.pageY - areaOffset.top;
    $('#text').css({
      top: y,
      left: x
    });
    $("#text").html(name_array[text]).fadeIn(200);
  }
}

});

}(jQuery));
</script>

以上。

2016年5月10日火曜日

jQueryでマウスカーソル直下の要素名を取得し続ける

前回はJacascript(jQuery)を利用して、ボタンをクリックするとSVGの各要素の色を変更するものを作成した。
地理的メモ帳: JavaScript(JQuery)でSVGの色を変更する

今回の目標としては、日本地図の指定の位置データを取得することだった。
例えば北海道の上にマウスカーソルを移動させたり、クリックしたりしたときに、なんらかの情報を表示させるのである。
こうすることで、地図の色の塗り分け以上に情報を埋め込むことができるはず。

これを実現する方法として、2パタンが考えられた。
1.それぞれのSVG要素にマウスがクリックされた(もしくはマウスが乗った)イベントのスイッチを入れる。
2.マウスがクリックされた(もしくは移動した)時の真下のSVG要素は何であるかを取得する。
どちらの方法でも、追加情報の表示ができるが、今回は2番を選んだ。
理由としては、1の場合、それぞれのSVG項目へイベント用のコードを埋め込む作業が億劫であるからだ。

では、2を実現するために必要なことはなにか。
①マウスカーソルの移動(もしくはクリック)を検知する。
②マウスカーソル直下の要素を取得する。
以上の2つである。

①のマウスカーソルの移動を検知するためには下記サイトを参考とした。
jQuery(JavaScript)でマウス座標やウィンドウサイズを取得して確認するツール | EasyRamble


②のカーソル直下の要素を取得するには下記サイトを参考とした。
jQuery:現在カーソルがhoverしている要素を返す | hacknote

jQueryの「:hover」を実行すると、マウスカーソルがhoverしている要素をすべて返してくるのだ。
配列として戻っているようで、先頭(0番目)から「HTML」「BODY」……「一番上の要素」となっている。
そのため、配列の最後を取得すれば、目的のID要素が取得できるという寸法である。

ただし、最後の要素が必ずしもIDじゃないときもある。
そのため、IDなのかどうかをIF文で調べ、分岐させている。
その方法はこちらを参考に。
jQueryで属性の有無を調べるにはundefinedかどうかを調べる [俺の備忘録]

結果として、マウスカーソルが移動している時の、カーソル直下の要素IDを取得し、そのID名を表示させることができた。
実物はこちらから。
地理的メモ帳: JSテストページ

左上の「Change Color!」ボタンの下側に日本地図上でのID名が表示される。
例えばHOKKAIDOなど。

ソースコードは下記の通り。

$(".main-outer").mousemove( function(evt) {//main-outerクラス上でマウスの移動を検知
  if(typeof $(jQuery(":hover")[jQuery(":hover").length -1]).attr("id") != 'undefined'){
  //マウスカーソル直下の要素にIDがあるかどうかを確認
    var text = "Name of ID:"+$(jQuery(":hover")[jQuery(":hover").length -1]).attr("id");
    //IDがあった場合
  }else{
    var text = "Name of ID:";//IDが無かった場合
  }
  $("#text").html(text);//IDを表示させる
});


今後はマウスクリックにより、追加情報を表示できるようにしたい。

以上。





2016年5月9日月曜日

JavaScript(JQuery)でSVGの色を変更する

JacaScriptを使用し、動的にSVGの色を変更するテストページを作成した。
地理的メモ帳: JSテストページ

SVG上では都道府県ごとにIDをつけてある。
例えば北海道であれば、「HOKKAIDO」という具合。
このIDを使ってそれぞれを認識し、色を塗り分けている。
 

手順としては、下記の通り。
1.都道府県のIDを配列に用意する。
2.ボタンをクリックしたら、各IDの塗りつぶしをランダムで設定する。

これだけである。
だが、これができれば今後はページを切り替えることなく、色を塗り分けることができるのだ。
確実な前進だ。

SVGの塗りつぶしをJavaScript(JQuery)でやる方法はこちら。
jquery - SVG - Change fill color on button click - Stack Overflow

ランダムな色コードの生成はこちら。
'#'+Math.floor(Math.random()*16777215).toString(16);

GIF画像の作成はこちら。
GIFアニメ(アニメーション)作成 | 画像加工編集サイト・フリーソフト:無料写真加工ならバナー工房

以上。

2016年5月8日日曜日

都道府県旗の主色別で日本地図を作成

本サイトの日本地図はSVGを用いている。
これは一般的な画像データではないので、拡大をいくらしてもぎざぎざにならないのだ。
SVGって何? という方は、例えばこちらを参考にどうぞ。

いまさら聞けないリッチクライアント技術(9):いまさら聞けないSVG、なぜ知られていないのか? (1/3) - @IT


こちらのSVGを利用し、いろいろな色分け等をして、様々な日本地図を作ってみようと思う。
そのため、SVGの使い方を含めて少しずつ勉強していく予定である。
まずは単純にSVGのコード上で日本地図を塗り分けてみた。
するとこんな感じになる。



実際の地図はこちらのリンクから。
地理的メモ帳: 都道府県旗主色別日本地図
リンク先でも説明しているが、こちらの日本地図は都道府県旗の主色ごとに色を塗り分けている。

実はそれぞれの旗について、一次ソース、つまり各都道府県の公式サイトから情報を集めようとした。
だが北海道から始めて、千葉県まで南下したあたりで心がくじけてしまう……。
理由としては、公式サイト上に旗の画像がなかったり(県章はあるものの)、指定はあっても勧告等の形でルールがあるだけで実物がなかったりしたからだ。
そのため、現在の旗の主色とはもしかしたら異なるかもしれないが、それはご愛嬌として許していただきたい。

今回はSVGのコードそれ自体を修正したため、これ以上の拡張性はない。
今後はJavascript等を利用して、もう少し容易に変更できるようにしていきたい。
理想としては、何かしらのアクションを起こすと、それに応じて動的に色が変わるのが良い。

以上。