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
Submit search
EN
Uploaded by
mizdra
PDF, PPTX
7,572 views
Vue.js でタイマーを作る
Dentoo.LT #16 飛び入り枠でのスライドです
Technology
◦
Read more
4
Save
Share
Embed
Embed presentation
Download
Download as PDF, PPTX
1
/ 32
2
/ 32
3
/ 32
4
/ 32
5
/ 32
6
/ 32
7
/ 32
8
/ 32
9
/ 32
10
/ 32
11
/ 32
12
/ 32
13
/ 32
14
/ 32
15
/ 32
16
/ 32
17
/ 32
18
/ 32
19
/ 32
20
/ 32
21
/ 32
22
/ 32
23
/ 32
24
/ 32
25
/ 32
26
/ 32
27
/ 32
28
/ 32
29
/ 32
30
/ 32
31
/ 32
32
/ 32
More Related Content
PPTX
initとプロセス再起動
by
Takashi Takizawa
PDF
サーバーサイド Kotlin のテストフレームワーク事情
by
Shinya Mochida
PDF
ドメイン駆動設計という仕事の流儀
by
増田 亨
PDF
ChatGPTのデータソースにPostgreSQLを使う(第42回PostgreSQLアンカンファレンス@オンライン 発表資料)
by
NTT DATA Technology & Innovation
PDF
たのしい高階関数
by
Shinichi Kozake
PPTX
Introduction to es6
by
NexThoughts Technologies
PDF
組み合わせテストの設計(PictMaster勉強会) 2008年7月17日
by
Keizo Tatsumi
PDF
Amazon SNS+SQSによる Fanoutシナリオの話
by
Yoichi Toyota
initとプロセス再起動
by
Takashi Takizawa
サーバーサイド Kotlin のテストフレームワーク事情
by
Shinya Mochida
ドメイン駆動設計という仕事の流儀
by
増田 亨
ChatGPTのデータソースにPostgreSQLを使う(第42回PostgreSQLアンカンファレンス@オンライン 発表資料)
by
NTT DATA Technology & Innovation
たのしい高階関数
by
Shinichi Kozake
Introduction to es6
by
NexThoughts Technologies
組み合わせテストの設計(PictMaster勉強会) 2008年7月17日
by
Keizo Tatsumi
Amazon SNS+SQSによる Fanoutシナリオの話
by
Yoichi Toyota
What's hot
PDF
Apache Arrow - データ処理ツールの次世代プラットフォーム
by
Kouhei Sutou
PDF
これからLDAPを始めるなら 「389-ds」を使ってみよう
by
Nobuyuki Sasaki
PDF
1日5分でPostgreSQLに詳しくなるアプリの開発 ~PostgRESTを使ってみた~(第38回PostgreSQLアンカンファレンス@オンライン 発...
by
NTT DATA Technology & Innovation
PPT
Cassandraのしくみ データの読み書き編
by
Yuki Morishita
PDF
Dockerの期待と現実~Docker都市伝説はなぜ生まれるのか~
by
Masahito Zembutsu
PDF
Apache Arrow Flight – ビッグデータ用高速データ転送フレームワーク #dbts2021
by
Kouhei Sutou
PPTX
MySQL Technology Cafe #14 MySQL Shellを使ってもっと楽をしようの会
by
オラクルエンジニア通信
PDF
【BS2】.NET 6 最新アップデート
by
日本マイクロソフト株式会社
PDF
Scala の関数型プログラミングを支える技術
by
Naoki Aoyama
PDF
RDF Semantic Graph「RDF 超入門」
by
オラクルエンジニア通信
PDF
MvcのFatモデルに立ち向かう
by
Shun Hikita
PDF
ZOZOTOWNのマルチクラウドへの挑戦と挫折、そして未来
by
Hiromasa Oka
PDF
Embulk, an open-source plugin-based parallel bulk data loader
by
Sadayuki Furuhashi
PDF
Vue, vue router, vuex
by
Samundra khatri
PDF
이스티오 (Istio) 자습서 v0.5.0
by
Jo Hoon
PDF
ADFS With Cloud Service ~シングルサインオン最新手法~
by
Mari Miyakawa
PPTX
実行統計による実践的SQLチューニング
by
健一 三原
PPTX
日本における自動運転普及の課題と展望
by
真広 佐藤
PDF
Handling iframes using selenium web driver
by
Pankaj Biswas
PDF
Closures in Javascript
by
David Semeria
Apache Arrow - データ処理ツールの次世代プラットフォーム
by
Kouhei Sutou
これからLDAPを始めるなら 「389-ds」を使ってみよう
by
Nobuyuki Sasaki
1日5分でPostgreSQLに詳しくなるアプリの開発 ~PostgRESTを使ってみた~(第38回PostgreSQLアンカンファレンス@オンライン 発...
by
NTT DATA Technology & Innovation
Cassandraのしくみ データの読み書き編
by
Yuki Morishita
Dockerの期待と現実~Docker都市伝説はなぜ生まれるのか~
by
Masahito Zembutsu
Apache Arrow Flight – ビッグデータ用高速データ転送フレームワーク #dbts2021
by
Kouhei Sutou
MySQL Technology Cafe #14 MySQL Shellを使ってもっと楽をしようの会
by
オラクルエンジニア通信
【BS2】.NET 6 最新アップデート
by
日本マイクロソフト株式会社
Scala の関数型プログラミングを支える技術
by
Naoki Aoyama
RDF Semantic Graph「RDF 超入門」
by
オラクルエンジニア通信
MvcのFatモデルに立ち向かう
by
Shun Hikita
ZOZOTOWNのマルチクラウドへの挑戦と挫折、そして未来
by
Hiromasa Oka
Embulk, an open-source plugin-based parallel bulk data loader
by
Sadayuki Furuhashi
Vue, vue router, vuex
by
Samundra khatri
이스티오 (Istio) 자습서 v0.5.0
by
Jo Hoon
ADFS With Cloud Service ~シングルサインオン最新手法~
by
Mari Miyakawa
実行統計による実践的SQLチューニング
by
健一 三原
日本における自動運転普及の課題と展望
by
真広 佐藤
Handling iframes using selenium web driver
by
Pankaj Biswas
Closures in Javascript
by
David Semeria
Recently uploaded
PDF
エンジニアが選ぶべきAIエディタ & Antigravity 活用例@ウェビナー「触ってみてどうだった?Google Antigravity 既存IDEと...
by
NorihiroSunada
PDF
Machine Tests Benchmark Suite. Explain github.com/alexziskind1/machine_tests #2
by
Tasuku Takahashi
PDF
流行りに乗っかるClaris FileMaker 〜AI関連機能の紹介〜 by 合同会社イボルブ
by
Evolve LLC.
PDF
Machine Tests Benchmark Suite. Explain github.com/alexziskind1/machine_tests #1
by
Tasuku Takahashi
PPTX
楽々ナレッジベース「楽ナレ」3種比較 - Dify / AWS S3 Vector / Google File Search Tool
by
Kiyohide Yamaguchi
PDF
20251210_MultiDevinForEnterprise on Devin 1st Anniv Meetup
by
Masaki Yamakawa
エンジニアが選ぶべきAIエディタ & Antigravity 活用例@ウェビナー「触ってみてどうだった?Google Antigravity 既存IDEと...
by
NorihiroSunada
Machine Tests Benchmark Suite. Explain github.com/alexziskind1/machine_tests #2
by
Tasuku Takahashi
流行りに乗っかるClaris FileMaker 〜AI関連機能の紹介〜 by 合同会社イボルブ
by
Evolve LLC.
Machine Tests Benchmark Suite. Explain github.com/alexziskind1/machine_tests #1
by
Tasuku Takahashi
楽々ナレッジベース「楽ナレ」3種比較 - Dify / AWS S3 Vector / Google File Search Tool
by
Kiyohide Yamaguchi
20251210_MultiDevinForEnterprise on Devin 1st Anniv Meetup
by
Masaki Yamakawa
Vue.js でタイマーを作る
1.
Vue.js でタイマーを作る
2.
自己紹介 mizdra 学域1年生 ポケモンの乱数調整のツールを作ったりしています
3.
モチベーション Vue.js でタイマーを作る 乱数調整に使われているエメタイマーというタイマーがFlash製な のでリプレースしたい Vue.js 流行ってるし使ってみたい
4.
エメタイマーとは 実際に見たほうが早い http://pokem.client.jp/emloop.htm
5.
仕様 (カウントダウン)タイマー 時間を設定し, カウントダウンを開始する フレーム⇔秒変換機能 60フレーム ==
1秒 メインタイマーが開始する前に別途メインタイマー開始待機用のタ イマー(待機タイマー)を設ける n秒待機してから(メインタイマーの)カウントダウン開始する 機能 エメタイマーの機能を再現するだけ
6.
手順 1. Vue.js +
Webpack のテンプレートを作成 2. Vueコンポーネントをゴリゴリ書く
7.
今日紹介する予定の話題 Vue.js (メイン) vuelidate window.requestAnimationFrame Fetch API Web
Audio API
8.
今日紹介する話題 Vue.js (メイン) vuelidate window.requestAnimationFrame Fetch API Web
Audio API 時間がないのでちょっとだけ...
9.
やっていきます
10.
Vue.js とは ユーザーインターフェイスを構築するためのプログレッシブフレー ムワークです。 https://jp.vuejs.org/v2/guide/#はじめに 仮想DOMのサポート(Vue.js
v2 以降) 新しいDOMと古いDOMを比較し, 差分のみを更新する 新しいDOMで全てを置き換える(更新する)よりもDOM操作の 回数が少なくなる 参考: ReactとFluxのこと// Speaker Deck: https://speakerdeck.com/geta6/reacttofluxfalsekoto リアクティブ(Modelを変更したらDOMが自動で更新される) ルーティングなどは行わず, Viewのみに焦点を当てている Reactっぽい
11.
Reactとの違い 軽い ReactはJSX, Vue.jsはTemplate すべての正しいHTMLはテンプレートとしても正しくなる Pug(旧Jade), Slim,
Hamlなどのメタ言語を自由に使える 単一ファイルコンポーネント Template, ロジック, Styleそれぞれ別々のファイルで管理する のではなく, 1つのファイル(.vue)で管理するという思想 これら3つの要素は互いに関係しており, 1つのファイルで管理 したほうが保守性に優れている...という考え 参考: 他のフレームワークとの比較‑ Vue.js: https://jp.vuejs.org/v2/guide/comparison.html
12.
JSX in React //
https://jp.vuejs.org/v2/guide/comparison.html render () { let { items } = this.props let children if (items.length > 0) { children = ( <ul> {items.map(item => <li key={item.id}>{item.name}</li> )} </ul> ) } else { children = <p>項目は見つかりませんでした。</p> } return ( <div className='list-container'> {children} </div> ) }
13.
Template in Vue.js <!--
https://jp.vuejs.org/v2/guide/comparison.html --> <template> <div class="list-container"> <ul v-if="items.length"> <li v-for="item in items"> {{ item.name }} </li> </ul> <p v-else>項目は見つかりませんでした。</p> </div> </template> 英語らしく読める JSXほどキモくない あくまでも極端な例(当然JSXにも利点はある)
14.
単一ファイルコンポーネント <!-- hello.vue --> <template> <p
class="message"> {{ msg }} </p> </template> <script> export default { name: 'hello', data() { return { msg: 'Welcome to Your Vue.js App' }; } }; </script> <style scoped> .message { color: red; } </style>
15.
Vue.js + Webpack
のテンプレートを作成 Vue.js を導入する方法はいくつかある 今回はそのなかでも最も導入が簡単な公式Vue.jsテンプレートを使った 方法を紹介します
16.
公式Vue.jsテンプレート github.com/vuejs‑templates/webpack Vue.jsプロジェクトのプロトタイプを作成してくれるCLIツール npm install -g
vue-cli でインストール 使い方: $ vue init webpack <project> 対話的に作成するプロジェクトの設定を決めていく
18.
指示された通りに進める $ cd dentoolt-vue $
npm install $ npm run dev
19.
開発サーバが起動して自動でブラウザで開いてくれる
20.
プロジェクト構成 .babelrc .editorconfig .gitignore .postcssrc.js README.md index.html package.json build/ ... 開発サーバやwebpackの設定 config/
... その他設定(環境変数等) node_modules/ src/ App.vue ... エントリポイント main.js assets/ ... アセット(画像とか) components/ ... コンポーネント Hello.vue static/ ... ??? src/components にコンポーネントを追加していく
21.
時間を表示するコンポーネントを書く DurationView.vue mm:ss.ms 形式で残り時間を表示 Template(一部) <template> <div class="view"> <span>{{ minutes
| pad }}分</span> <span>{{ seconds | pad }}秒</span> <span>{{ cs | pad }}</span> </div> </template>
22.
ロジック(一部) <script> export default { name:
'duration-view', props: ['value'], // 0以上の数値 computed: { minutes() { return Math.trunc(this.value / 1000 / 60); }, seconds() { return Math.trunc(this.value / 1000) % 60; }, cs() { return Math.trunc(this.value / 10) % 100; }, }, filters: { pad(value) { // 左側を0詰めして2桁にするフィルタ return value.toString().padStart(2, '0'); }, }, }; </script>
23.
value の単位はms value を親コンポーネントから与えると minutes , seconds , cs プロパティが自動で生成される
24.
補足 プロパティを見るのにVue.js devtoolsを使っている 発行されたアクション(jsネイティブのイベントのようなもの)も見る ことができる
25.
タイマーを書く CountdownTimer.vue Template <template> <duration-view :value="duration" /> </template>
26.
import DurationView from
'./DurationView'; export default { name: 'countdown-timer', components: { DurationView, }, data: function () { return { paused: true, ended: true, duration: 0 }; }, ... }; </script>
27.
..., methods: { start(duration =
this.duration) { if (this.paused) { this.paused = false; this.ended = false; this.updateDuration(duration); // 残り時間を更新 this.startRAFLoop(); // タイマーを起動 } else { this.updateDuration(duration); } this.$emit('start'); // イベント発行 }, stop() { this.updateDuration(0); // 残り時間を0に }, pause() { this.paused = true; // pausedフラグを立てる }, ... } }; </script>
28.
肝心のタイマー起動部分 startRAFLoop() { const raf
= window.requestAnimationFrame; const cb = (currentTime_ms, prevTime_ms) => { if (this.ended) { this.$emit('pause'); this.$emit('ended'); } else if (this.paused) { this.$emit('pause'); } else { // if `this.paused` is `false`, this timer this.updateDuration(this.duration - (currentTime_ms - raf(time_ms => cb(time_ms, currentTime_ms)); } }; const initialTime_ms = window.performance.now(); raf(time_ms => cb(time_ms, initialTime_ms)); },
29.
window.requestAnimationFrame() とは? window.requestAnimationFrame() メソッドは、ブラウザにアニメ ーションを行いたいことを知らせて、次の再描画の前にアニメーシ ョンを更新するために指定した関数を呼び出すことを要求します。 このメソッドの引数はひとつで、再描画の前に呼び出すコールバッ クメソッドです。 描写のタイミングに合わせて登録したコールバック関数が呼び出さ れる ハードウェアに優しい 60回/秒 setTimeout,
setIntervalよりも短い間隔で呼び出される
30.
その他の機能 他にも色々機能を作ったけど時間がないので省略するよ! ほとんどの機能は実装済み https://github.com/mizdra/vue‑test
31.
実演 $ git clone
https://github.com/mizdra/vue-test $ cd vue-test $ npm install $ npm run dev
32.
まとめ 公式Vue.jsテンプレートでお手軽に始められる (個人的に)単一ファイルコンポーネントがしっくりくる Templateで(JSXよりも)読みやすいコードがか書ける
Download