Download free for 30 days
Sign in
Upload
Language (EN)
Support
Business
Mobile
Social Media
Marketing
Technology
Art & Photos
Career
Design
Education
Presentations & Public Speaking
Government & Nonprofit
Healthcare
Internet
Law
Leadership & Management
Automotive
Engineering
Software
Recruiting & HR
Retail
Sales
Services
Science
Small Business & Entrepreneurship
Food
Environment
Economy & Finance
Data & Analytics
Investor Relations
Sports
Spiritual
News & Politics
Travel
Self Improvement
Real Estate
Entertainment & Humor
Health & Medicine
Devices & Hardware
Lifestyle
Change Language
Language
English
Español
Português
Français
Deutsche
Cancel
Save
EN
Uploaded by
Muyuu Fujita
6,203 views
Objective Front-End JavaScript
JavaScript祭スピンオフ! フロントエンド祭り in Co-Edo での発表資料です
Technology
◦
Read more
12
Save
Share
Embed
Embed presentation
Download
Downloaded 25 times
1
/ 63
2
/ 63
3
/ 63
4
/ 63
5
/ 63
6
/ 63
7
/ 63
8
/ 63
9
/ 63
10
/ 63
11
/ 63
12
/ 63
13
/ 63
14
/ 63
15
/ 63
16
/ 63
17
/ 63
18
/ 63
19
/ 63
20
/ 63
21
/ 63
22
/ 63
23
/ 63
24
/ 63
25
/ 63
26
/ 63
27
/ 63
28
/ 63
29
/ 63
30
/ 63
31
/ 63
32
/ 63
33
/ 63
34
/ 63
35
/ 63
36
/ 63
37
/ 63
38
/ 63
39
/ 63
40
/ 63
41
/ 63
42
/ 63
43
/ 63
44
/ 63
45
/ 63
46
/ 63
47
/ 63
48
/ 63
49
/ 63
50
/ 63
51
/ 63
52
/ 63
53
/ 63
54
/ 63
55
/ 63
56
/ 63
57
/ 63
58
/ 63
59
/ 63
60
/ 63
61
/ 63
62
/ 63
63
/ 63
More Related Content
PDF
Grid application テンプレートを紐解く
by
Kazuhide Maruyama
PDF
Goを知る
by
Hirokazu Fukami
PDF
Backbone.js
by
daisuke shimizu
PDF
OSC 2011 KeySnail
by
Masafumi Oyamada
PPTX
Web Workers
by
kaboccha
PPTX
まだDOM操作で消耗してるの?
by
IRI MO
PDF
JavaScriptで出来る、あんなことこんなこと
by
Mayu Kimura
PPTX
React を導入したフロントエンド開発
by
daisuke-a-matsui
Grid application テンプレートを紐解く
by
Kazuhide Maruyama
Goを知る
by
Hirokazu Fukami
Backbone.js
by
daisuke shimizu
OSC 2011 KeySnail
by
Masafumi Oyamada
Web Workers
by
kaboccha
まだDOM操作で消耗してるの?
by
IRI MO
JavaScriptで出来る、あんなことこんなこと
by
Mayu Kimura
React を導入したフロントエンド開発
by
daisuke-a-matsui
Viewers also liked
PDF
Js祭り
by
Yoshihiko Hoshino
PDF
Svgアニメーションを実装してみよう 20150207
by
Kanako Kobayashi
PPT
BuddyPressで街のポータルサイトを作ろう
by
松田 千尋
PDF
React.jsでHowManyPizza
by
松田 千尋
PDF
20141022 リサーチ向け・ブラウザだけでスクレイピング(浅野)
by
Hirosuke Asano
PPTX
第3回Webスクレイピング勉強会@東京 happyou.info
by
Shogo Okamoto
PPTX
ソーシャル・スクレイピング(2014年10月Webスクレイピング勉強会資料)
by
yuzoakakura
PDF
Scraping withawsAWSを利用してスクレイピングの悩みを解決するチップス
by
Takuro Sasaki
PDF
サイト/ブログから本文抽出する方法
by
Takuro Sasaki
PDF
大規模ログ分析におけるAmazon Web Servicesの活用
by
Shintaro Takemura
PPTX
Webクローリング&スクレイピングの最前線 公開用
by
Lumin Hacker
PDF
オープンデータ・パーソナルデータビジネス最前線
by
直之 伊藤
PPTX
クローリングしにくいものに挑戦 公開用
by
Lumin Hacker
PDF
WordCamp Tokyo2016itkaasan
by
松田 千尋
PDF
オープニングトーク - 創設の思い・目的・進行方針 -データマイニング+WEB勉強会@東京
by
Koichi Hamada
PPTX
クラウドネイティブなアーキテクチャでサクサク解析
by
Yuta Imai
PDF
実践Excelスクレイピング
by
宏明 塩原
Js祭り
by
Yoshihiko Hoshino
Svgアニメーションを実装してみよう 20150207
by
Kanako Kobayashi
BuddyPressで街のポータルサイトを作ろう
by
松田 千尋
React.jsでHowManyPizza
by
松田 千尋
20141022 リサーチ向け・ブラウザだけでスクレイピング(浅野)
by
Hirosuke Asano
第3回Webスクレイピング勉強会@東京 happyou.info
by
Shogo Okamoto
ソーシャル・スクレイピング(2014年10月Webスクレイピング勉強会資料)
by
yuzoakakura
Scraping withawsAWSを利用してスクレイピングの悩みを解決するチップス
by
Takuro Sasaki
サイト/ブログから本文抽出する方法
by
Takuro Sasaki
大規模ログ分析におけるAmazon Web Servicesの活用
by
Shintaro Takemura
Webクローリング&スクレイピングの最前線 公開用
by
Lumin Hacker
オープンデータ・パーソナルデータビジネス最前線
by
直之 伊藤
クローリングしにくいものに挑戦 公開用
by
Lumin Hacker
WordCamp Tokyo2016itkaasan
by
松田 千尋
オープニングトーク - 創設の思い・目的・進行方針 -データマイニング+WEB勉強会@東京
by
Koichi Hamada
クラウドネイティブなアーキテクチャでサクサク解析
by
Yuta Imai
実践Excelスクレイピング
by
宏明 塩原
Similar to Objective Front-End JavaScript
KEY
Kawaz的jQuery入門
by
Kohki Miki
PDF
jQuery Mobile 1.2 最新情報 & Tips
by
yoshikawa_t
PDF
Web制作勉強会 #2
by
Moto Yan
PDF
Featuring Project Silk & Liike: 楽しい "モダン" Web 開発のちょっとディープなお話
by
Akira Inoue
PPTX
Chrome Extensionsの基本とデザインパターン
by
Yoichiro Tanaka
PDF
Jqm20120210
by
cmtomoda
PDF
WordBench Kobe jQueryどうでしょう
by
Hishikawa Takuro
PDF
OSC京都2011
by
haganemetal
PDF
今度こそ始めるjQuery超入門
by
西畑 一馬
PDF
jQuery Performance Tips – jQueryにおける高速化 -
by
Hayato Mizuno
PDF
20110714 j queryベーシック
by
良太 増子
PPT
jsライブラリで実装する効率的なWeb制作
by
西畑 一馬
PDF
お手軽Ajaxアプリケーションの作り方
by
Shunji Konishi
PDF
XPagesDay2014 A-4 XPages with jQueryMobile BADプラクティスガイド
by
Tetsuji Hayashi
PDF
jQuery Mobile 1.3 最新情報
by
yoshikawa_t
PDF
Firefox OSアプリ 「ModeView」
by
Hideki Akiba
PPTX
Web Component概要
by
Shumpei Shiraishi
PPTX
HTML5最新動向
by
Shumpei Shiraishi
PDF
RESTful開発フロントエンド編(SPA・AltJS・フレームワーク)
by
K Tsukada
PDF
Windows ストアアプリのつくりかた (JS + HTML + CSS)
by
Yu Nobuoka
Kawaz的jQuery入門
by
Kohki Miki
jQuery Mobile 1.2 最新情報 & Tips
by
yoshikawa_t
Web制作勉強会 #2
by
Moto Yan
Featuring Project Silk & Liike: 楽しい "モダン" Web 開発のちょっとディープなお話
by
Akira Inoue
Chrome Extensionsの基本とデザインパターン
by
Yoichiro Tanaka
Jqm20120210
by
cmtomoda
WordBench Kobe jQueryどうでしょう
by
Hishikawa Takuro
OSC京都2011
by
haganemetal
今度こそ始めるjQuery超入門
by
西畑 一馬
jQuery Performance Tips – jQueryにおける高速化 -
by
Hayato Mizuno
20110714 j queryベーシック
by
良太 増子
jsライブラリで実装する効率的なWeb制作
by
西畑 一馬
お手軽Ajaxアプリケーションの作り方
by
Shunji Konishi
XPagesDay2014 A-4 XPages with jQueryMobile BADプラクティスガイド
by
Tetsuji Hayashi
jQuery Mobile 1.3 最新情報
by
yoshikawa_t
Firefox OSアプリ 「ModeView」
by
Hideki Akiba
Web Component概要
by
Shumpei Shiraishi
HTML5最新動向
by
Shumpei Shiraishi
RESTful開発フロントエンド編(SPA・AltJS・フレームワーク)
by
K Tsukada
Windows ストアアプリのつくりかた (JS + HTML + CSS)
by
Yu Nobuoka
More from Muyuu Fujita
PDF
Hello npm
by
Muyuu Fujita
PDF
Learn ES2015
by
Muyuu Fujita
PDF
Start React with Browserify
by
Muyuu Fujita
PDF
小規模案件で作られた秘伝のタレ
by
Muyuu Fujita
PDF
閉じタグを超えた先に僕が見た景色とは
by
Muyuu Fujita
PDF
JavaScriptと共に歩いて行く決意をした君へ
by
Muyuu Fujita
PDF
非ガチ勢「よし、Coffee script使おう!」
by
Muyuu Fujita
PDF
あの時AngularJSと出会った僕らは
by
Muyuu Fujita
PDF
デザイナー向け 初めてのPhp ~サイト制作に役立つtips~
by
Muyuu Fujita
PDF
Cssアニメーションとその制御
by
Muyuu Fujita
PDF
WordPressで企業サイトのテーマを作る
by
Muyuu Fujita
KEY
WPerのWPerによるWPerのためのPHP入門
by
Muyuu Fujita
PDF
ノンプログラマのGit入門
by
Muyuu Fujita
PDF
Html5でword pressテーマを作るよ!
by
Muyuu Fujita
Hello npm
by
Muyuu Fujita
Learn ES2015
by
Muyuu Fujita
Start React with Browserify
by
Muyuu Fujita
小規模案件で作られた秘伝のタレ
by
Muyuu Fujita
閉じタグを超えた先に僕が見た景色とは
by
Muyuu Fujita
JavaScriptと共に歩いて行く決意をした君へ
by
Muyuu Fujita
非ガチ勢「よし、Coffee script使おう!」
by
Muyuu Fujita
あの時AngularJSと出会った僕らは
by
Muyuu Fujita
デザイナー向け 初めてのPhp ~サイト制作に役立つtips~
by
Muyuu Fujita
Cssアニメーションとその制御
by
Muyuu Fujita
WordPressで企業サイトのテーマを作る
by
Muyuu Fujita
WPerのWPerによるWPerのためのPHP入門
by
Muyuu Fujita
ノンプログラマのGit入門
by
Muyuu Fujita
Html5でword pressテーマを作るよ!
by
Muyuu Fujita
Objective Front-End JavaScript
1.
Objective Front-End JavaScript
2.
自己紹介 me = { name:
"muyuu", twitter: "@anticyborg", belongs: "freelance", job: "Web Front-End Engineer" };
3.
jQuery plugin
4.
GOOD • 早い • 簡単 •
何だったらJS書けなくても何とかなる
5.
BAD • 変更に弱い • プラグインにない機能を求められると詰む •
いつまで経ってもJS覚えられない 割と辛い思いをすることも多い
6.
自分で作る
7.
BAD • 面倒 • 果たして望む機能を作れるのか •
プラグインみたいにすげーの作れるのか
8.
GOOD • すげーのはいらない。必要な機能だけあれば良い • 追加機能が欲しくなったらその時足せば良い •
変更時も理解しやすい(理解しやすいように書けば)
9.
GOOD • すげーのはいらない。必要な機能だけあれば良い • 追加機能が欲しくなったらその時足せば良い •
変更時も理解しやすい(理解しやすいように書けば) JSの理解も深まるよ!
10.
いいことだらけ
11.
さぁ作ろう いま作ろう
12.
今回作るもの
13.
Tab
14.
何も考えずにタブを実装
15.
$(function() { // 最初の要素以外は非表示 $(".body
li").not(":first").hide(); $(".tab a").click(function(){ // 表示するコンテンツのIDを取得 var target = $(this).attr("href").replace("#", ""); // コンテンツ部分を全部隠す $(".body li").hide(); // クリックしたタブのhretと同じIDを持つ箇所だけを表示する $(".body").find('#' + target).show(); return false; }); });
16.
problemas
17.
パターンが増える度に コードが倍増
18.
$(function() { // アニメーションするパターン $(".body2
li").not(":first").hide(); $(".tab2 a").click(function(){ var target = $(this).attr("href").replace("#", ""); $(".body2 li").hide('slow'); $(".body2").find('#' + target).show('slow'); return false; }); // ページ表示時は2つ目が開いてるパターン $(".body3 li").not(":first").hide(); $(".tab3 a").click(function(){ var target = $(this).attr("href").replace("#", ""); $(".body3 li").hide('slow'); $(".body3").find('#' + target).show('slow'); return false; }); });
19.
solution
20.
解決法 • タブの原型となるオブジェクトを作る • 原型を元に実体を生成する •
実体はパターン毎に生成する
21.
object
22.
オブジェクトとは、名前 と値を持つプロパティを 格納するコンテナにすぎ ない — 開眼!JavaScript
23.
object sample // コンストラクタ関数を使用して僕オブジェクトを生成 var
muyuu = new Object(); //僕オブジェクトにプロパティを追加 muyuu.name = "muyuu"; muyuu.age = 33; muyuu.gender = "male"; console.log(muyuu.age); // 33 と表示される
24.
object sample //オブジェクトに関数を追加する muyuu.hello =
function(){ console.log("Hello! I'm " + muyuu.name); }; muyuu.hello(); // "Hello! I'm muyuu" と表示される • プロパティが関数の場合は「メソッド」とも呼ばれる
25.
コンストラクタ関数?
26.
コンストラクタ関数 コンストラクタ関数とは、あらかじめ決められたオブジェクト を生成するテンプレート、クッキーの抜き型のようなものだと 思ってください — 開眼!JavaScript
27.
コンストラクタ関数 var obj =
new Object(); // オブジェクトを変数objに生成 var num = new Number(123); // 数値オブジェクトを変数numに生成 var str = new String('aaa'); // 文字列オブジェクトを変数strに生成
28.
コンストラクタ関数 こんな感じのが実装されている Object = function(){ //新しいオブジェクトを作るための処理 };
29.
コンストラクタ関数で 独自オブジェクトを作る
30.
コンストラクタ関数 僕オブジェクトのテンプレートとして人コンストラクタを作る var Human =
function(name, age, gender){ this.name = name; this.age = age; this.gender = gender; this.hello = function (){ console.log("Hello! I'm " + this.name); }; };
31.
コンストラクタ関数 人コンストラクタで僕オブジェクトを作成 // Humanコンストラクタを使用して僕オブジェクトを生成 // 生成する際に僕のデータを引数で渡してあげれば //
コンストラクタの設定通りに生成される var muyuu = new Human("muyuu", 33, "male"); // 挨拶をする muyuu.hello(); // Hello! I'm muyuu と表示される
32.
ちょっと寄り道して も1歩深く
33.
通常の関数の挙動 • 関数は通常、何かしらの処理をして何かしらの値を返す • 何もreturnしない場合はfalse相当の値を返す
34.
//return がある関数 function add(a,b){ return
a + b; } console.log(add(1, 2)); // 3 // return がない関数 function alertAdd(a, b){ var add = a + b; } console.log(alertAdd()); // undefined
35.
コンストラクタ関数の挙動 • オブジェクトを返している var muyuu
= new Human("muyuu", 33, "male"); console.log(muyuu); // { // name:"muyuu", // age:33, // gender: "male", // hello: function // }
36.
Why?
37.
new 演算子 • 関数はnew演算子を使って呼び出された場合、コンストラク タ関数のthisの値として、生成されたオブジェクトとして設定 する •
new演算子を使って呼び出された場合にreturnを宣言してい ない場合は通常falseを返すところを新たに生成されるオブジ ェクト(this)を返すようになる
38.
new 演算子 var Human
= function(name, age, gender){ //new演算子で呼び出した場合、実はこの処理が入っている // var this = new Object(); this.name = name; this.age = age; ... //new演算子で呼び出し、returnを行っていない場合 //実はthisを返している //return this; };
39.
閑話休題
40.
タブコンストラクタ作って パターン毎に生成するぜ!
41.
タブの実装に必要な機能 コンストラクタ呼び出し時に以下を指定 • タブのルートのクラス • タブ部分のクラス •
コンテンツ部分のクラス
42.
タブの実装に必要な機能 必要な機能 *今表示している要素の番号(何番目) *今表示している要素が何番目かを知る機能 *タブを切り替える機能 *タブ切り替え時にクラスを付与する機能
43.
コンストラクタを作成 // constructor var Tab
= function(param){ }; Tabコンストラクタを作成
44.
コンストラクタ呼び出し時 var tab1 =
new Tab({ root: ".tab", // タブのルート要素を指定 item: ".tabHead li", // タブ部分の他所を指定 body: ".tabBody li" // コンテンツ部分の他所を指定 }); コンストラクタ関数呼び出し時に、実際ページあるタブの要素 を新たに作るオブジェクトに設定するため、オプションとして オブジェクトを渡す。
45.
コンストラクタを作成 var Tab =
function(param){ this.$root = $(param.root); this.$item = this.$root.find(param.item); this.$body = this.$root.find(param.body); ... }; コンストラクタ実行時に渡された引数からjQueryオブジェクト を保存
46.
コンストラクタを作成 var Tab =
function(param){ ... //カレントのタブとコンテンツに付与するclassを設定 this.adClass = 'current'; // カレントのコンテンツが何番目かを保存する変数を作成 this.currentIndex; ... };
47.
コンストラクタを作成 var Tab =
function(param){ this.param = param // オプションを追加 ... };
48.
コンストラクタを作成 var Tab =
function(param){ ... this.init(); //ページ表示時に実行した処理を実行 //タブをクリックした際の挙動を設定 var self = this; // alias this.$item.on("click", "a", function(){ self.setCurrent(this); // カレントをセット self.change(); // タブを切り替え }); };
49.
コンストラクタを作成 // constructor var Tab
= function(param){ this.param = param; this.$root = $(param.root); this.$item = this.$root.find(param.item); this.$body = this.$root.find(param.body); this.adClass = 'current'; // class this.currentIndex = 0; // current tab index this.init(); // 初期化 var self = this; // alias this.$item.on("click", "a", function(){ // evnet self.setCurrent(this); self.change(); }); };
50.
必要な機能をコンストラクタに追加 ページ表示時に実行する関数 Tab.prototype.init = function(){ this.setCurrent();
// カレントをセット this.change(); // タブを切り替え };
51.
必要な機能をコンストラクタに追加 カレントが何番目かを取得する関数 Tab.prototype.setCurrent = function(ele){ this.currentIndex
= 0; if (ele){ // 引数がタブの何番目の要素かを取得 var index = $(ele).parent().index(); // オブジェクト変数にセット this.currentIndex = index; } };
52.
必要な機能をコンストラクタに追加 タブを切り替える関数 Tab.prototype.change = function(){ this.changeTab();
// タブ部分を変更 this.changeBody(); // コンテンツ部分を変更 };
53.
必要な機能をコンストラクタに追加 タブ部分の変更処理をまとめた関数 Tab.prototype.changeTab = function(){ this.$item .removeClass(this.adClass)
// 全部のタブからクラスを外して .eq(this.currentIndex) // カレントのタブのみ .addClass(this.adClass); // クラスを付与する };
54.
必要な機能をコンストラクタに追加 コンテンツ部分の変更処理をまとめた関数 Tab.prototype.changeBody = function(){ this.$body .removeClass(this.adClass)
// 全部のコンテンツからクラスを外して .hide() // 非表示にして .eq(this.currentIndex) // カレントのコンテンツのみ .addClass(this.adClass) // クラスを付与して .show(); // 表示する };
55.
完成
56.
後は必要な機能を 必要になったら足すだけ
57.
コンテンツの表示で アニメーション足したい
58.
該当関数を変更するだけ Tab.prototype.changeBody = function(){ this.$body .removeClass(this.adClass)
// 全部のコンテンツからクラスを外して .hide('slow') // 非表示にして .eq(this.currentIndex) // カレントのコンテンツのみ .addClass(this.adClass) // クラスを付与して .show('slow'); // 表示する };
59.
アニメーションは オプションにしたい
60.
呼び出し時にオプションを追加 var tab1 =
new Tab({ root: ".tab", // タブのルート要素を指定 item: ".tabHead li", // タブ部分の他所を指定 body: ".tabBody li", // コンテンツ部分の他所を指定 duration: true // アニメーションの指定 });
61.
オプションによって挙動を変える Tab.prototype.changeBody = function(){ this.$body .removeClass(this.adClass)
// 全部のコンテンツからクラスを外して .hide(param.duration) // 非表示にして .eq(this.currentIndex) // カレントのコンテンツのみ .addClass(this.adClass) // クラスを付与して .show(param.duration); // 表示する };
62.
呼び出し var tab1 =
new Tab({ root: ".tab", // タブのルート要素を指定 item: ".tabHead li", // タブ部分の他所を指定 body: ".tabBody li", // コンテンツ部分の他所を指定 }); var tab2 = new Tab({ root: ".otherTab", // タブのルート要素を指定 item: ".otherTabHead .tab", // タブ部分の他所を指定 body: ".otherTabBody .content", // コンテンツ部分の他所を指定 duration: 400 });
63.
ステキ
Download