SlideShare una empresa de Scribd logo
1 de 30
Descargar para leer sin conexión
インラインSVGをつかって
地図っぽいものをつくってみる
2012/7/21 第5回 HTML5など勉強会
HTML5-West.jp Kadoppe




                        1
自己紹介
• 名前:門脇   恒平 @kadoppe

• 職業:エンジニア
Rails, (Java¦Coffee)Script, Objective-C

• 肩書き:
HTML5-West.jpコアメンバー/ShareWis Inc. CTO

• 趣味:ポッドキャスト/        Ust配信
                                最近ももクロが好きすぎて辛いです。

                        2
本日の資料

• プレゼンスライド


• SlideShare: http://www.slideshare.net/kadoppe


• ソースコード


• GitHub: https://github.com/kadoppe



                        3
Chapter 1:
SVGとはなんぞや。



             4
いい資料あり

• 才色兼備なグラフィックス                          - SVGが見せるWebの未来
Mozilla Japan - Brian Birtlesさん

http://people.mozilla.org/ bbirtles/pres/fxdevcon-2012/




               この資料読むだけでSVGはOK!



                                    5
SVGの3つの特徴


 ベクター      XML    インライン
グラフィック   フォーマット    SVG




           6
ベクター
グラフィック   ベクター vs ビットマップ




         点で画像を表現       線で画像を表現
                        出展: http://ja.wikipedia.org/wiki/ファイル:Bitmap_VS_SVG.svg
                   7
XML
フォーマット   画像をXMLで書く!
• プログラマーが大好き(?)なXMLが使える


 • 円:<circle>要素


 • 四角:<rect>要素


 • 線:<path>要素


 • グループ化:<g>要素

                      出展: http://ja.wikipedia.org/wiki/ファイル:SVG.svg
                  8
インライン
 SVG    HTMLにSVGを埋め込む!

• HTML文書に直接SVGの要素を記述できる

<!DOCTYPE html>
<html>                     CSSによるルック
  <head></head>
                           アンドフィール変更
  <body>
    <h1>SVG画像だよ。<h1>
                                          が可能に!
    <svg>
      <circle>
    </svg>             JavaScriptによる操作/
  </body>               イベントハンドリング
</html>




                       9
対応ブラウザ



>= 1.5    >= 9        最初から   >= 3.0

   ただし、ブラウザ間でサポートしている機能、挙動に違いがある




                 10
SVGデモまとめサイト「svgwow」
                      http://svgwow.org

         11
Chapter 2:
インラインSVGでつくる
地図っぽいもの


             12
Webブラウザ + SVG = ??

インラインSVGを使って何かつくりたい!




  SVGといったら「ズーム」だ!



 Webブラウザ + ズーム = 地図!?


             13
Webブラウザ + SVG = 地図

       納得!(仕事でもつくってるしね。)



           14
Webブラウザで動く地図といえば?




   Bing Maps        Google Maps

特徴その1:ドラッグで地図を動かせる(Pan)

特徴その2:ホイールでズームレベルを変更できる
(Zoom in / Zoom out)
               15
ライブコーディング
• ゴール:Zoom    / Pan機能を備えた地図っぽいもの

• Step   1:地図データの準備

• Step   2:地図データをSVGで描画

• Step   3:CSSでスタイルを整える

• Step   4:Panの実装

• Step   5:Zoomの実装        ※ JavaScriptのライブラリは使わない

                     16
Step 1
         地図データの準備

         地図データは自分で作成したい!


• 完璧な地図データは作成できない
→ 円で陸地を、背景で海を表現

• 各円の半径、中心座標データを
JSON形式で作成                  完成イメージ


                  17
Step 2
            地図データをSVGで描画
•   今回使うSVG要素

    •   <svg>要素:SVG画像を表す
        <svg><!-- SVG画像 --></svg>


    •   <circle>要素:円を表す
        <!-- 座標(10, 20)に半径5pxの円を表示 -->
        <circle cx=”10” cy=”20” r=”5”>



    <circle>要素をappendChild()を使って追加していく

                                18
Step 2    補足: createElementNS()
// 要素は生成されない
var circleElm1 = document.createElement(“circle”);

// 要素は生成される
var circleElm2 = document.createElementNS(
                    “http://www.w3.org/2000/svg”, “circle”
                 );

•   document.createElementNS()

    •   XML名前空間を指定して要素を生成するメソッド

    •   SVG要素の生成にはSVGのXML名前空間の指定が必要

                           19
Step 3
         CSSでスタイルを整える


                 地図に見えない!


   現在の 地図

          CSSで背景色、要素の色を指定する


                  20
Step 4
         Panの実装

    マウスドラッグで地図をPanしたい!


• 実装手順を分割


 1. <circle>要素をまとめて動かせるようにする

 2. ドラッグ操作を検出してPanできるようにする



               21
Step 4      1. <circle>要素をまとめて動かす
•   今回使うSVG要素:<g>要素

    •   役割1:複数のSVG要素をグループ化する
        <g><circle><circle><circle><circle></g>


    •   役割2:子要素の位置/形状をまとめて操作する (transform属性)
        <!-- 子要素をx軸方向に50px, y軸方向に25px動かす -->
        <g transform=”translate(50, 25)”><!-- 略 --></g>


             とりあえず決め打ちで地図をPanしてみる


                                22
Step 4   2. ドラッグ操作を検出してPanする


• <svg>要素に以下のイベントハンドラを登録


 • mousedown   → mousemove → mouseup
     ドラッグ開始        ドラッグ中     ドラッグ終了



         ドラッグ中のマウスポインタの移動量を元に
         <g>要素のtransform属性の値を変更する


                     23
Step 5
         Zoomの実装

   マウスホイールで地図をZoomしたい!


• 実装手順を分割


 1. <circle>要素をまとめて拡大/縮小できるように

 2. ホイール操作を検出してZoomできるようにする



               24
Step 5   1. <circle>要素をまとめて拡大縮小



• <g>要素のtransform属性にscale()を指定

 <!-- 子要素のサイズを2倍に -->
 <g transform=”translate(50, 25) scale(2)”></g>



          とりあえずは決め打ちでZoomしてみる




                           25
Step 5      2. ホイール操作を検出してZoomする
•   ホイール操作の検出方法はブラウザによって異なる

•   Google Chromeの場合

    •   <svg>要素に mousewheel イベントハンドラを登録

•   他のブラウザの場合

    •   参考記事: http://codaholic.org/?p=1139
                                        今回はChromeのみ対応
               マウスホイールが動いた向きをもとに
            <g>要素のtransform属性の値を変更する
                              26
完成!




 描画   Pan   Zoom




       27
改善ポイント

• Google   Maps / Bing Maps に近づくために

 • Zoom機能のクロスブラウザ対応


 • マウスポインタの位置に向かってZoomしたい


 • Panした時の挙動に慣性をつける



                     28
まとめ
• SVGの3つの特徴


 • ベクターグラフィック


 •   XMLフォーマット

 • インラインSVG


• Webブラウザ   + SVG = 地図

 •   JavaScriptとCSSを使って地図っぽいものをつくった
                    29
おしまい!

ご清聴ありがとうございました!



       30

Más contenido relacionado

La actualidad más candente

Guide to GraalVM (JJUG CCC 2019 Fall)
Guide to GraalVM (JJUG CCC 2019 Fall)Guide to GraalVM (JJUG CCC 2019 Fall)
Guide to GraalVM (JJUG CCC 2019 Fall)Koichi Sakata
 
つくらない ものづくり ~明日からできるリーンスタートアップ~
つくらない ものづくり ~明日からできるリーンスタートアップ~つくらない ものづくり ~明日からできるリーンスタートアップ~
つくらない ものづくり ~明日からできるリーンスタートアップ~圭 進藤
 
Inline SVG - トラブルとその対策
Inline SVG - トラブルとその対策Inline SVG - トラブルとその対策
Inline SVG - トラブルとその対策Kohei Kadowaki
 
エンジニアから飛んでくるマサカリを受け止める心得
エンジニアから飛んでくるマサカリを受け止める心得エンジニアから飛んでくるマサカリを受け止める心得
エンジニアから飛んでくるマサカリを受け止める心得Reimi Kuramochi Chiba
 
高橋メソッドサンプル
高橋メソッドサンプル高橋メソッドサンプル
高橋メソッドサンプルTakashi Fujimoto
 
ITコミュニティと情報発信に共通する成長と貢献の要素
ITコミュニティと情報発信に共通する成長と貢献の要素ITコミュニティと情報発信に共通する成長と貢献の要素
ITコミュニティと情報発信に共通する成長と貢献の要素NISHIHARA Shota
 
IL2CPPに関する軽い話
IL2CPPに関する軽い話IL2CPPに関する軽い話
IL2CPPに関する軽い話Wooram Yang
 
DSIRNLP #3 LZ4 の速さの秘密に迫ってみる
DSIRNLP #3 LZ4 の速さの秘密に迫ってみるDSIRNLP #3 LZ4 の速さの秘密に迫ってみる
DSIRNLP #3 LZ4 の速さの秘密に迫ってみるAtsushi KOMIYA
 
新卒2ヶ月でAIを社会実装させた3つのデザイン
新卒2ヶ月でAIを社会実装させた3つのデザイン新卒2ヶ月でAIを社会実装させた3つのデザイン
新卒2ヶ月でAIを社会実装させた3つのデザインNodokaFujimoto
 
ロジカルプレゼンテーション
ロジカルプレゼンテーションロジカルプレゼンテーション
ロジカルプレゼンテーションAya Kaino
 
コンシューマゲーム開発におけるHansoftの活用事例
コンシューマゲーム開発におけるHansoftの活用事例コンシューマゲーム開発におけるHansoftの活用事例
コンシューマゲーム開発におけるHansoftの活用事例Hiroyuki Tanaka
 
共同創業チーム
共同創業チーム共同創業チーム
共同創業チームMasa Tadokoro
 
テストコードの DRY と DAMP
テストコードの DRY と DAMPテストコードの DRY と DAMP
テストコードの DRY と DAMPYusuke Kagata
 
事業が対峙する現実からエンジニアリングを俯瞰する #devlove
事業が対峙する現実からエンジニアリングを俯瞰する #devlove事業が対峙する現実からエンジニアリングを俯瞰する #devlove
事業が対峙する現実からエンジニアリングを俯瞰する #devloveItsuki Kuroda
 
何となく勉強した気分になれるパーサ入門
何となく勉強した気分になれるパーサ入門何となく勉強した気分になれるパーサ入門
何となく勉強した気分になれるパーサ入門masayoshi takahashi
 
簡単な算数でできる文章校正
簡単な算数でできる文章校正簡単な算数でできる文章校正
簡単な算数でできる文章校正hirokiky
 
PFD(Process Flow Diagram)の書き方紹介
PFD(Process Flow Diagram)の書き方紹介PFD(Process Flow Diagram)の書き方紹介
PFD(Process Flow Diagram)の書き方紹介Noriyuki Mizuno
 
「のどが渇いた」というユーザーに何を出す? ユーザーの「欲しい」に惑わされない、本当のインサイトを見つけるUXデザイン・UXリサーチ
「のどが渇いた」というユーザーに何を出す? ユーザーの「欲しい」に惑わされない、本当のインサイトを見つけるUXデザイン・UXリサーチ「のどが渇いた」というユーザーに何を出す? ユーザーの「欲しい」に惑わされない、本当のインサイトを見つけるUXデザイン・UXリサーチ
「のどが渇いた」というユーザーに何を出す? ユーザーの「欲しい」に惑わされない、本当のインサイトを見つけるUXデザイン・UXリサーチYoshiki Hayama
 

La actualidad más candente (20)

Guide to GraalVM (JJUG CCC 2019 Fall)
Guide to GraalVM (JJUG CCC 2019 Fall)Guide to GraalVM (JJUG CCC 2019 Fall)
Guide to GraalVM (JJUG CCC 2019 Fall)
 
つくらない ものづくり ~明日からできるリーンスタートアップ~
つくらない ものづくり ~明日からできるリーンスタートアップ~つくらない ものづくり ~明日からできるリーンスタートアップ~
つくらない ものづくり ~明日からできるリーンスタートアップ~
 
Inline SVG - トラブルとその対策
Inline SVG - トラブルとその対策Inline SVG - トラブルとその対策
Inline SVG - トラブルとその対策
 
エンジニアから飛んでくるマサカリを受け止める心得
エンジニアから飛んでくるマサカリを受け止める心得エンジニアから飛んでくるマサカリを受け止める心得
エンジニアから飛んでくるマサカリを受け止める心得
 
高橋メソッドサンプル
高橋メソッドサンプル高橋メソッドサンプル
高橋メソッドサンプル
 
ITコミュニティと情報発信に共通する成長と貢献の要素
ITコミュニティと情報発信に共通する成長と貢献の要素ITコミュニティと情報発信に共通する成長と貢献の要素
ITコミュニティと情報発信に共通する成長と貢献の要素
 
目指せグラフマスター
目指せグラフマスター目指せグラフマスター
目指せグラフマスター
 
IL2CPPに関する軽い話
IL2CPPに関する軽い話IL2CPPに関する軽い話
IL2CPPに関する軽い話
 
DSIRNLP #3 LZ4 の速さの秘密に迫ってみる
DSIRNLP #3 LZ4 の速さの秘密に迫ってみるDSIRNLP #3 LZ4 の速さの秘密に迫ってみる
DSIRNLP #3 LZ4 の速さの秘密に迫ってみる
 
新卒2ヶ月でAIを社会実装させた3つのデザイン
新卒2ヶ月でAIを社会実装させた3つのデザイン新卒2ヶ月でAIを社会実装させた3つのデザイン
新卒2ヶ月でAIを社会実装させた3つのデザイン
 
ロジカルプレゼンテーション
ロジカルプレゼンテーションロジカルプレゼンテーション
ロジカルプレゼンテーション
 
コンシューマゲーム開発におけるHansoftの活用事例
コンシューマゲーム開発におけるHansoftの活用事例コンシューマゲーム開発におけるHansoftの活用事例
コンシューマゲーム開発におけるHansoftの活用事例
 
共同創業チーム
共同創業チーム共同創業チーム
共同創業チーム
 
テストコードの DRY と DAMP
テストコードの DRY と DAMPテストコードの DRY と DAMP
テストコードの DRY と DAMP
 
事業が対峙する現実からエンジニアリングを俯瞰する #devlove
事業が対峙する現実からエンジニアリングを俯瞰する #devlove事業が対峙する現実からエンジニアリングを俯瞰する #devlove
事業が対峙する現実からエンジニアリングを俯瞰する #devlove
 
Ninja Testing at Toteka03
Ninja Testing at Toteka03Ninja Testing at Toteka03
Ninja Testing at Toteka03
 
何となく勉強した気分になれるパーサ入門
何となく勉強した気分になれるパーサ入門何となく勉強した気分になれるパーサ入門
何となく勉強した気分になれるパーサ入門
 
簡単な算数でできる文章校正
簡単な算数でできる文章校正簡単な算数でできる文章校正
簡単な算数でできる文章校正
 
PFD(Process Flow Diagram)の書き方紹介
PFD(Process Flow Diagram)の書き方紹介PFD(Process Flow Diagram)の書き方紹介
PFD(Process Flow Diagram)の書き方紹介
 
「のどが渇いた」というユーザーに何を出す? ユーザーの「欲しい」に惑わされない、本当のインサイトを見つけるUXデザイン・UXリサーチ
「のどが渇いた」というユーザーに何を出す? ユーザーの「欲しい」に惑わされない、本当のインサイトを見つけるUXデザイン・UXリサーチ「のどが渇いた」というユーザーに何を出す? ユーザーの「欲しい」に惑わされない、本当のインサイトを見つけるUXデザイン・UXリサーチ
「のどが渇いた」というユーザーに何を出す? ユーザーの「欲しい」に惑わされない、本当のインサイトを見つけるUXデザイン・UXリサーチ
 

Destacado

CSSできる SVGアニメーション
CSSできる SVGアニメーションCSSできる SVGアニメーション
CSSできる SVGアニメーションKasumi Morita
 
数が増えてもこわくない!Quantity Queries の紹介
数が増えてもこわくない!Quantity Queries の紹介数が増えてもこわくない!Quantity Queries の紹介
数が増えてもこわくない!Quantity Queries の紹介Kasumi Morita
 
AngularJSで業務システムUI部品化
AngularJSで業務システムUI部品化AngularJSで業務システムUI部品化
AngularJSで業務システムUI部品化Toshio Ehara
 
AngularJSとD3.jsによるインタラクティブデータビジュアライゼーション
AngularJSとD3.jsによるインタラクティブデータビジュアライゼーションAngularJSとD3.jsによるインタラクティブデータビジュアライゼーション
AngularJSとD3.jsによるインタラクティブデータビジュアライゼーションYosuke Onoue
 
私がWebサイトをスタイリッシュな 今風デザインにしない理由
私がWebサイトをスタイリッシュな 今風デザインにしない理由私がWebサイトをスタイリッシュな 今風デザインにしない理由
私がWebサイトをスタイリッシュな 今風デザインにしない理由yoshipan
 
データ可視化勉強会
データ可視化勉強会データ可視化勉強会
データ可視化勉強会Daichi Morifuji
 
なんでCSSすぐ死んでしまうん
なんでCSSすぐ死んでしまうんなんでCSSすぐ死んでしまうん
なんでCSSすぐ死んでしまうんHayato Mizuno
 
ブラウザにやさしいHTML/CSS
ブラウザにやさしいHTML/CSSブラウザにやさしいHTML/CSS
ブラウザにやさしいHTML/CSSTakeharu Igari
 

Destacado (8)

CSSできる SVGアニメーション
CSSできる SVGアニメーションCSSできる SVGアニメーション
CSSできる SVGアニメーション
 
数が増えてもこわくない!Quantity Queries の紹介
数が増えてもこわくない!Quantity Queries の紹介数が増えてもこわくない!Quantity Queries の紹介
数が増えてもこわくない!Quantity Queries の紹介
 
AngularJSで業務システムUI部品化
AngularJSで業務システムUI部品化AngularJSで業務システムUI部品化
AngularJSで業務システムUI部品化
 
AngularJSとD3.jsによるインタラクティブデータビジュアライゼーション
AngularJSとD3.jsによるインタラクティブデータビジュアライゼーションAngularJSとD3.jsによるインタラクティブデータビジュアライゼーション
AngularJSとD3.jsによるインタラクティブデータビジュアライゼーション
 
私がWebサイトをスタイリッシュな 今風デザインにしない理由
私がWebサイトをスタイリッシュな 今風デザインにしない理由私がWebサイトをスタイリッシュな 今風デザインにしない理由
私がWebサイトをスタイリッシュな 今風デザインにしない理由
 
データ可視化勉強会
データ可視化勉強会データ可視化勉強会
データ可視化勉強会
 
なんでCSSすぐ死んでしまうん
なんでCSSすぐ死んでしまうんなんでCSSすぐ死んでしまうん
なんでCSSすぐ死んでしまうん
 
ブラウザにやさしいHTML/CSS
ブラウザにやさしいHTML/CSSブラウザにやさしいHTML/CSS
ブラウザにやさしいHTML/CSS
 

Similar a インラインSVGをつかって地図っぽいものをつくってみる

ShareWisをFirefoxで動かすためのSVG的とりくみ
ShareWisをFirefoxで動かすためのSVG的とりくみShareWisをFirefoxで動かすためのSVG的とりくみ
ShareWisをFirefoxで動かすためのSVG的とりくみKohei Kadowaki
 
レスポンシブWebデザイン【発展編】
レスポンシブWebデザイン【発展編】レスポンシブWebデザイン【発展編】
レスポンシブWebデザイン【発展編】Yasuhito Yabe
 
SVG MANIAX - CSS Nite After dark7
SVG MANIAX - CSS Nite After dark7SVG MANIAX - CSS Nite After dark7
SVG MANIAX - CSS Nite After dark7Naoki Matsuda
 
SVG MANIAX Ver.2 - Mars vanilla
SVG MANIAX Ver.2 -  Mars vanillaSVG MANIAX Ver.2 -  Mars vanilla
SVG MANIAX Ver.2 - Mars vanillaNaoki Matsuda
 
HTML5-20100626
HTML5-20100626HTML5-20100626
HTML5-20100626Taku AMANO
 
F-site発表資料「Flashユーザーが今覚えておきたいHTML5」
F-site発表資料「Flashユーザーが今覚えておきたいHTML5」F-site発表資料「Flashユーザーが今覚えておきたいHTML5」
F-site発表資料「Flashユーザーが今覚えておきたいHTML5」Yasunobu Ikeda
 
JavaScript + CSS3を活用して スマートフォンサイト/アプリに 動きを付けてみよう
JavaScript + CSS3を活用して スマートフォンサイト/アプリに 動きを付けてみようJavaScript + CSS3を活用して スマートフォンサイト/アプリに 動きを付けてみよう
JavaScript + CSS3を活用して スマートフォンサイト/アプリに 動きを付けてみようHiroaki Wakamatsu
 
スマホにおけるWebGL入門
スマホにおけるWebGL入門スマホにおけるWebGL入門
スマホにおけるWebGL入門Yohta Kanke
 
HTML5で作るスマホブラウザゲーム
HTML5で作るスマホブラウザゲームHTML5で作るスマホブラウザゲーム
HTML5で作るスマホブラウザゲームTakumi Ohashi
 
HTML5でスマートフォン開発の理想と現実
HTML5でスマートフォン開発の理想と現実HTML5でスマートフォン開発の理想と現実
HTML5でスマートフォン開発の理想と現実Takumi Ohashi
 
パララックスでレスポンシブでJ query mobileなサイトのつくりかた
パララックスでレスポンシブでJ query mobileなサイトのつくりかたパララックスでレスポンシブでJ query mobileなサイトのつくりかた
パララックスでレスポンシブでJ query mobileなサイトのつくりかたShumpei Shiraishi
 
㉘HTML5+CSS3でアニメーション!
㉘HTML5+CSS3でアニメーション!㉘HTML5+CSS3でアニメーション!
㉘HTML5+CSS3でアニメーション!Nishida Kansuke
 
JJUG CCC 2016 Fall: World is not a square, rendering world coastline map with...
JJUG CCC 2016 Fall: World is not a square, rendering world coastline map with...JJUG CCC 2016 Fall: World is not a square, rendering world coastline map with...
JJUG CCC 2016 Fall: World is not a square, rendering world coastline map with...torutk
 
Data Visualization meetup 2017
Data Visualization meetup 2017Data Visualization meetup 2017
Data Visualization meetup 2017清水 正行
 
AngularJSでデータビジュアライゼーションがしたい
AngularJSでデータビジュアライゼーションがしたいAngularJSでデータビジュアライゼーションがしたい
AngularJSでデータビジュアライゼーションがしたいYosuke Onoue
 
おふとんから眺めるSVG
おふとんから眺めるSVGおふとんから眺めるSVG
おふとんから眺めるSVGcocu_628496
 
Css3でキャラクターアニメーションに挑戦してみた
Css3でキャラクターアニメーションに挑戦してみたCss3でキャラクターアニメーションに挑戦してみた
Css3でキャラクターアニメーションに挑戦してみたShinichi Sato
 
Firefox OSでSVGをつかってみた
Firefox OSでSVGをつかってみたFirefox OSでSVGをつかってみた
Firefox OSでSVGをつかってみたKohei Kadowaki
 
インタラクティブコンテンツにおけるHTML5とFlash
インタラクティブコンテンツにおけるHTML5とFlashインタラクティブコンテンツにおけるHTML5とFlash
インタラクティブコンテンツにおけるHTML5とFlashYasunobu Ikeda
 

Similar a インラインSVGをつかって地図っぽいものをつくってみる (20)

ShareWisをFirefoxで動かすためのSVG的とりくみ
ShareWisをFirefoxで動かすためのSVG的とりくみShareWisをFirefoxで動かすためのSVG的とりくみ
ShareWisをFirefoxで動かすためのSVG的とりくみ
 
レスポンシブWebデザイン【発展編】
レスポンシブWebデザイン【発展編】レスポンシブWebデザイン【発展編】
レスポンシブWebデザイン【発展編】
 
SVG MANIAX - CSS Nite After dark7
SVG MANIAX - CSS Nite After dark7SVG MANIAX - CSS Nite After dark7
SVG MANIAX - CSS Nite After dark7
 
SVG MANIAX Ver.2 - Mars vanilla
SVG MANIAX Ver.2 -  Mars vanillaSVG MANIAX Ver.2 -  Mars vanilla
SVG MANIAX Ver.2 - Mars vanilla
 
Canvas勉強会
Canvas勉強会Canvas勉強会
Canvas勉強会
 
HTML5-20100626
HTML5-20100626HTML5-20100626
HTML5-20100626
 
F-site発表資料「Flashユーザーが今覚えておきたいHTML5」
F-site発表資料「Flashユーザーが今覚えておきたいHTML5」F-site発表資料「Flashユーザーが今覚えておきたいHTML5」
F-site発表資料「Flashユーザーが今覚えておきたいHTML5」
 
JavaScript + CSS3を活用して スマートフォンサイト/アプリに 動きを付けてみよう
JavaScript + CSS3を活用して スマートフォンサイト/アプリに 動きを付けてみようJavaScript + CSS3を活用して スマートフォンサイト/アプリに 動きを付けてみよう
JavaScript + CSS3を活用して スマートフォンサイト/アプリに 動きを付けてみよう
 
スマホにおけるWebGL入門
スマホにおけるWebGL入門スマホにおけるWebGL入門
スマホにおけるWebGL入門
 
HTML5で作るスマホブラウザゲーム
HTML5で作るスマホブラウザゲームHTML5で作るスマホブラウザゲーム
HTML5で作るスマホブラウザゲーム
 
HTML5でスマートフォン開発の理想と現実
HTML5でスマートフォン開発の理想と現実HTML5でスマートフォン開発の理想と現実
HTML5でスマートフォン開発の理想と現実
 
パララックスでレスポンシブでJ query mobileなサイトのつくりかた
パララックスでレスポンシブでJ query mobileなサイトのつくりかたパララックスでレスポンシブでJ query mobileなサイトのつくりかた
パララックスでレスポンシブでJ query mobileなサイトのつくりかた
 
㉘HTML5+CSS3でアニメーション!
㉘HTML5+CSS3でアニメーション!㉘HTML5+CSS3でアニメーション!
㉘HTML5+CSS3でアニメーション!
 
JJUG CCC 2016 Fall: World is not a square, rendering world coastline map with...
JJUG CCC 2016 Fall: World is not a square, rendering world coastline map with...JJUG CCC 2016 Fall: World is not a square, rendering world coastline map with...
JJUG CCC 2016 Fall: World is not a square, rendering world coastline map with...
 
Data Visualization meetup 2017
Data Visualization meetup 2017Data Visualization meetup 2017
Data Visualization meetup 2017
 
AngularJSでデータビジュアライゼーションがしたい
AngularJSでデータビジュアライゼーションがしたいAngularJSでデータビジュアライゼーションがしたい
AngularJSでデータビジュアライゼーションがしたい
 
おふとんから眺めるSVG
おふとんから眺めるSVGおふとんから眺めるSVG
おふとんから眺めるSVG
 
Css3でキャラクターアニメーションに挑戦してみた
Css3でキャラクターアニメーションに挑戦してみたCss3でキャラクターアニメーションに挑戦してみた
Css3でキャラクターアニメーションに挑戦してみた
 
Firefox OSでSVGをつかってみた
Firefox OSでSVGをつかってみたFirefox OSでSVGをつかってみた
Firefox OSでSVGをつかってみた
 
インタラクティブコンテンツにおけるHTML5とFlash
インタラクティブコンテンツにおけるHTML5とFlashインタラクティブコンテンツにおけるHTML5とFlash
インタラクティブコンテンツにおけるHTML5とFlash
 

Más de Kohei Kadowaki

Pebble + JavaScriptでつくるスマートウォッチアプリ
Pebble + JavaScriptでつくるスマートウォッチアプリPebble + JavaScriptでつくるスマートウォッチアプリ
Pebble + JavaScriptでつくるスマートウォッチアプリKohei Kadowaki
 
Webでもできるデータビジュアライゼーション
WebでもできるデータビジュアライゼーションWebでもできるデータビジュアライゼーション
WebでもできるデータビジュアライゼーションKohei Kadowaki
 
いまさら聞けない!?Backbone.js 超入門
いまさら聞けない!?Backbone.js 超入門いまさら聞けない!?Backbone.js 超入門
いまさら聞けない!?Backbone.js 超入門Kohei Kadowaki
 
D3.js と SVG によるデータビジュアライゼーション
D3.js と SVG によるデータビジュアライゼーションD3.js と SVG によるデータビジュアライゼーション
D3.js と SVG によるデータビジュアライゼーションKohei Kadowaki
 
プログラマーのお仕事
プログラマーのお仕事プログラマーのお仕事
プログラマーのお仕事Kohei Kadowaki
 
5分でわかる?Backbone.js ことはじめ
5分でわかる?Backbone.js ことはじめ5分でわかる?Backbone.js ことはじめ
5分でわかる?Backbone.js ことはじめKohei Kadowaki
 
UnityでつくるはじめてのPONG
UnityでつくるはじめてのPONGUnityでつくるはじめてのPONG
UnityでつくるはじめてのPONGKohei Kadowaki
 
d3jsではじめるデータビジュアライゼーション入門
d3jsではじめるデータビジュアライゼーション入門d3jsではじめるデータビジュアライゼーション入門
d3jsではじめるデータビジュアライゼーション入門Kohei Kadowaki
 
ゲーム開発初心者の僕がUnity + WebSocketで何か作ってみた
ゲーム開発初心者の僕がUnity + WebSocketで何か作ってみたゲーム開発初心者の僕がUnity + WebSocketで何か作ってみた
ゲーム開発初心者の僕がUnity + WebSocketで何か作ってみたKohei Kadowaki
 
WebSocket + Node.jsでつくるチャットアプリ
WebSocket + Node.jsでつくるチャットアプリWebSocket + Node.jsでつくるチャットアプリ
WebSocket + Node.jsでつくるチャットアプリKohei Kadowaki
 
WebSocketことはじめ
WebSocketことはじめWebSocketことはじめ
WebSocketことはじめKohei Kadowaki
 

Más de Kohei Kadowaki (13)

Pebble + JavaScriptでつくるスマートウォッチアプリ
Pebble + JavaScriptでつくるスマートウォッチアプリPebble + JavaScriptでつくるスマートウォッチアプリ
Pebble + JavaScriptでつくるスマートウォッチアプリ
 
Webでもできるデータビジュアライゼーション
WebでもできるデータビジュアライゼーションWebでもできるデータビジュアライゼーション
Webでもできるデータビジュアライゼーション
 
いまさら聞けない!?Backbone.js 超入門
いまさら聞けない!?Backbone.js 超入門いまさら聞けない!?Backbone.js 超入門
いまさら聞けない!?Backbone.js 超入門
 
D3.js と SVG によるデータビジュアライゼーション
D3.js と SVG によるデータビジュアライゼーションD3.js と SVG によるデータビジュアライゼーション
D3.js と SVG によるデータビジュアライゼーション
 
プログラマーのお仕事
プログラマーのお仕事プログラマーのお仕事
プログラマーのお仕事
 
5分でわかる?Backbone.js ことはじめ
5分でわかる?Backbone.js ことはじめ5分でわかる?Backbone.js ことはじめ
5分でわかる?Backbone.js ことはじめ
 
UnityでつくるはじめてのPONG
UnityでつくるはじめてのPONGUnityでつくるはじめてのPONG
UnityでつくるはじめてのPONG
 
d3jsではじめるデータビジュアライゼーション入門
d3jsではじめるデータビジュアライゼーション入門d3jsではじめるデータビジュアライゼーション入門
d3jsではじめるデータビジュアライゼーション入門
 
ゲーム開発初心者の僕がUnity + WebSocketで何か作ってみた
ゲーム開発初心者の僕がUnity + WebSocketで何か作ってみたゲーム開発初心者の僕がUnity + WebSocketで何か作ってみた
ゲーム開発初心者の僕がUnity + WebSocketで何か作ってみた
 
SocketStream入門
SocketStream入門SocketStream入門
SocketStream入門
 
WebSocket + Node.jsでつくるチャットアプリ
WebSocket + Node.jsでつくるチャットアプリWebSocket + Node.jsでつくるチャットアプリ
WebSocket + Node.jsでつくるチャットアプリ
 
AndroidでWebSocket
AndroidでWebSocketAndroidでWebSocket
AndroidでWebSocket
 
WebSocketことはじめ
WebSocketことはじめWebSocketことはじめ
WebSocketことはじめ
 

Último

論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...Toru Tamaki
 
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)Hiroshi Tomioka
 
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)Hiroshi Tomioka
 
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。iPride Co., Ltd.
 
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Gamesatsushi061452
 
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
LoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイスLoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイス
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイスCRI Japan, Inc.
 
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。iPride Co., Ltd.
 
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video UnderstandingToru Tamaki
 
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアルLoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアルCRI Japan, Inc.
 
新人研修 後半 2024/04/26の勉強会で発表されたものです。
新人研修 後半        2024/04/26の勉強会で発表されたものです。新人研修 後半        2024/04/26の勉強会で発表されたものです。
新人研修 後半 2024/04/26の勉強会で発表されたものです。iPride Co., Ltd.
 
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NTT DATA Technology & Innovation
 

Último (11)

論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
 
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
 
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
 
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
 
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
 
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
LoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイスLoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイス
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
 
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
 
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
 
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアルLoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
 
新人研修 後半 2024/04/26の勉強会で発表されたものです。
新人研修 後半        2024/04/26の勉強会で発表されたものです。新人研修 後半        2024/04/26の勉強会で発表されたものです。
新人研修 後半 2024/04/26の勉強会で発表されたものです。
 
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
 

インラインSVGをつかって地図っぽいものをつくってみる

  • 2. 自己紹介 • 名前:門脇 恒平 @kadoppe • 職業:エンジニア Rails, (Java¦Coffee)Script, Objective-C • 肩書き: HTML5-West.jpコアメンバー/ShareWis Inc. CTO • 趣味:ポッドキャスト/ Ust配信 最近ももクロが好きすぎて辛いです。 2
  • 3. 本日の資料 • プレゼンスライド • SlideShare: http://www.slideshare.net/kadoppe • ソースコード • GitHub: https://github.com/kadoppe 3
  • 5. いい資料あり • 才色兼備なグラフィックス - SVGが見せるWebの未来 Mozilla Japan - Brian Birtlesさん http://people.mozilla.org/ bbirtles/pres/fxdevcon-2012/ この資料読むだけでSVGはOK! 5
  • 6. SVGの3つの特徴 ベクター XML インライン グラフィック フォーマット SVG 6
  • 7. ベクター グラフィック ベクター vs ビットマップ 点で画像を表現 線で画像を表現 出展: http://ja.wikipedia.org/wiki/ファイル:Bitmap_VS_SVG.svg 7
  • 8. XML フォーマット 画像をXMLで書く! • プログラマーが大好き(?)なXMLが使える • 円:<circle>要素 • 四角:<rect>要素 • 線:<path>要素 • グループ化:<g>要素 出展: http://ja.wikipedia.org/wiki/ファイル:SVG.svg 8
  • 9. インライン SVG HTMLにSVGを埋め込む! • HTML文書に直接SVGの要素を記述できる <!DOCTYPE html> <html> CSSによるルック <head></head> アンドフィール変更 <body> <h1>SVG画像だよ。<h1> が可能に! <svg> <circle> </svg> JavaScriptによる操作/ </body> イベントハンドリング </html> 9
  • 10. 対応ブラウザ >= 1.5 >= 9 最初から >= 3.0 ただし、ブラウザ間でサポートしている機能、挙動に違いがある 10
  • 13. Webブラウザ + SVG = ?? インラインSVGを使って何かつくりたい! SVGといったら「ズーム」だ! Webブラウザ + ズーム = 地図!? 13
  • 14. Webブラウザ + SVG = 地図 納得!(仕事でもつくってるしね。) 14
  • 15. Webブラウザで動く地図といえば? Bing Maps Google Maps 特徴その1:ドラッグで地図を動かせる(Pan) 特徴その2:ホイールでズームレベルを変更できる (Zoom in / Zoom out) 15
  • 16. ライブコーディング • ゴール:Zoom / Pan機能を備えた地図っぽいもの • Step 1:地図データの準備 • Step 2:地図データをSVGで描画 • Step 3:CSSでスタイルを整える • Step 4:Panの実装 • Step 5:Zoomの実装 ※ JavaScriptのライブラリは使わない 16
  • 17. Step 1 地図データの準備 地図データは自分で作成したい! • 完璧な地図データは作成できない → 円で陸地を、背景で海を表現 • 各円の半径、中心座標データを JSON形式で作成 完成イメージ 17
  • 18. Step 2 地図データをSVGで描画 • 今回使うSVG要素 • <svg>要素:SVG画像を表す <svg><!-- SVG画像 --></svg> • <circle>要素:円を表す <!-- 座標(10, 20)に半径5pxの円を表示 --> <circle cx=”10” cy=”20” r=”5”> <circle>要素をappendChild()を使って追加していく 18
  • 19. Step 2 補足: createElementNS() // 要素は生成されない var circleElm1 = document.createElement(“circle”); // 要素は生成される var circleElm2 = document.createElementNS( “http://www.w3.org/2000/svg”, “circle” ); • document.createElementNS() • XML名前空間を指定して要素を生成するメソッド • SVG要素の生成にはSVGのXML名前空間の指定が必要 19
  • 20. Step 3 CSSでスタイルを整える 地図に見えない! 現在の 地図 CSSで背景色、要素の色を指定する 20
  • 21. Step 4 Panの実装 マウスドラッグで地図をPanしたい! • 実装手順を分割 1. <circle>要素をまとめて動かせるようにする 2. ドラッグ操作を検出してPanできるようにする 21
  • 22. Step 4 1. <circle>要素をまとめて動かす • 今回使うSVG要素:<g>要素 • 役割1:複数のSVG要素をグループ化する <g><circle><circle><circle><circle></g> • 役割2:子要素の位置/形状をまとめて操作する (transform属性) <!-- 子要素をx軸方向に50px, y軸方向に25px動かす --> <g transform=”translate(50, 25)”><!-- 略 --></g> とりあえず決め打ちで地図をPanしてみる 22
  • 23. Step 4 2. ドラッグ操作を検出してPanする • <svg>要素に以下のイベントハンドラを登録 • mousedown → mousemove → mouseup ドラッグ開始 ドラッグ中 ドラッグ終了 ドラッグ中のマウスポインタの移動量を元に <g>要素のtransform属性の値を変更する 23
  • 24. Step 5 Zoomの実装 マウスホイールで地図をZoomしたい! • 実装手順を分割 1. <circle>要素をまとめて拡大/縮小できるように 2. ホイール操作を検出してZoomできるようにする 24
  • 25. Step 5 1. <circle>要素をまとめて拡大縮小 • <g>要素のtransform属性にscale()を指定 <!-- 子要素のサイズを2倍に --> <g transform=”translate(50, 25) scale(2)”></g> とりあえずは決め打ちでZoomしてみる 25
  • 26. Step 5 2. ホイール操作を検出してZoomする • ホイール操作の検出方法はブラウザによって異なる • Google Chromeの場合 • <svg>要素に mousewheel イベントハンドラを登録 • 他のブラウザの場合 • 参考記事: http://codaholic.org/?p=1139 今回はChromeのみ対応 マウスホイールが動いた向きをもとに <g>要素のtransform属性の値を変更する 26
  • 27. 完成! 描画 Pan Zoom 27
  • 28. 改善ポイント • Google Maps / Bing Maps に近づくために • Zoom機能のクロスブラウザ対応 • マウスポインタの位置に向かってZoomしたい • Panした時の挙動に慣性をつける 28
  • 29. まとめ • SVGの3つの特徴 • ベクターグラフィック • XMLフォーマット • インラインSVG • Webブラウザ + SVG = 地図 • JavaScriptとCSSを使って地図っぽいものをつくった 29