狠狠撸

狠狠撸Share a Scribd company logo
奥别产颁辞尘辫辞苍别苍迟蝉と笔辞濒测尘别谤
8/22(土) Grand-Frontend-Osaka 2015 Summer
?
? 牧 昂拡 @tk_0225
? 株式会社グラッドキューブに勤務
? Webサイト解析ASP「SiTest」の開発エンジニア
自己紹介
WebComponentsとは?
? HTML+JS+CSSをComponent化する仕組み
? 共通部品を切り出すことで再利用生を向上
? 外部に干渉しないスコープが作れる?
?→ カプセル化することが出来る
WebComponentsを構成する
4つの要素
template要素
? テンプレート(雛形)を定義できる
? <template>要素を使用
? コンテンツはアクティベートされるまで?
テンプレート内のコードは一切評価されない
? document.importNode() →?
document.body.appendChild()でアクティベート
? 既にHTML5の仕様として一部ブラウザで実装されている
<html>
<body>
<template id=“mytemplate”>
<img src=/tk_0225/webcomponentspolymer/“”>
</template>
<script>
var t = document.querySelector(“#mytemplate”);
t.content.querySelector(“img”).src = “logo.png”;
var clone = document.importNode(t.content, true);
document.body.appendChild(clone);
</script>
</body>
</html>
HTML Imports
? 外部のHTMLファイルをインポートすることが出来る
? <link rel=“import” href=“{{ImportFilePath}}”>
? importの呼び出しは一度きり?
?→ 依存性管理が楽
? import内のスクリプトは順次実行するが?
メインコンテンツの描画はブロックしない
#index.html
<html>
<body>
<link rel=“import” href=“./import.html”>
</body>
<script>
var link = document.querySelector(“link[rel=‘import’]”);
var template = link.import.querySelector(“template”);
var clone = document.importNode(template.content, true);
document.body.appendChild(clone);
</script>
</html>
#import.html
<template>
<h1>Sample!</h1>
</template>
Shadow DOM
? DOMツリーをカプセル化することが出来る
? ShadowDOMを使用すると、?
中の要素はShadowRootに関連付けされる
? 要素の中身(ShadowHost)は見えなくなり、?
代わりにShadowRootの中が見えるようになる
<section id=“section”>
<h3>ShadowDOM</h3>
</section>
<script>
var root = document
.querySelector(“#section”)
.createShadowRoot();?
root.innerHTML = “<style>h3 { color: red; }
</style><h3>ShadowDOM</h3>”;
</script>
Custom Elements
? 任意の名前の要素を作成することが出来る
? 要素名の命名規則として必ず「-」を含める必要がある
? ネイティブ要素を拡張(継承)することが出来る?
(拡張CustomElements)
<template>
<style> p { color: red; } </style>
<p>I am Shadow DOM!</p>
</template>
<script>
var proto = Object.create(HTMLElement.prototype, {
createdCallback: function(){
var t = document.querySelector(“template”);
var clone = document.importNode(t.content, true);
this.createShadowRoot().appendChild(clone);
}
});
document.registerElement(“sample-template”, {
prototype: proto
});
</script>
Polymerとは?
? Google I/Oでv1.0が発表(最近v1.1出ました)
? WebComponentsのラッパーライブラリ
? https://github.com/Polymer/polymer
? WebComponentsの簡略化と機能の強化
奥别产颁辞尘辫辞苍别苍迟蝉と笔辞濒测尘别谤
webcomponents.js, webcomponents-lite.js
Polymer
template要素
HTMLImports
ShadowDOM
CustomElements
各?
ブ?
ラ?
ウ
ザ
奥别产颁辞尘辫辞苍别苍迟蝉と笔辞濒测尘别谤
奥别产颁辞尘辫辞苍别苍迟蝉と笔辞濒测尘别谤
Polymer Catalog
https://elements.polymer-project.org/
Fe - IronElements
? Polymerの中核を担うコアコンポーネント
? 多くのコンポーネントがIronElementsに依存している
? データの通信や入力などを担っている
Md - PaperElements
? UIコンポーネント
? Material DesignがUIに適用されている
? ボタンやタブ、スライダーなど色々 っている
Go - GoogleWebComponents
? その名の通り、GoogleのWebComponents
? GoogleAnalyticsからChartやCalendar、?
Sign inまでなんでもござれ
? Googleのサービスはだいたいこれでなんとかなる
Au - GoldElements
? Eコマースのコンポーネント
? email, phone, zip, cvc(credit)などの?
inputコンポーネント
? 簡易的なバリデーションも付いている
Ne - NeonElements
? WebAnimationを提供するコンポーネント
? 現在はneon-animationのみ提供している
Pt - PlatinumElements
? プッシュ通知やリソースキャッシュのコンポーネント
? 現在はplatinum-push-messagingと?
platinum-swの2つが提供されている
Mo - Molecules
? サードパーティ製ライブラリのラッパー
? 現在はmarked-elementのみが提供されている
? marked-element?
https://github.com/chjj/marked のラッパー?
Markdownのパーサ?コンパイラ
仮想DOMはどうなる?
? WebComponentsは仮想DOMを想定して?
開発されていません
? ちなみにReactもWebComponentsを想定して?
開発されていません
ご静聴ありがとうございました

More Related Content

奥别产颁辞尘辫辞苍别苍迟蝉と笔辞濒测尘别谤