パソコン部活動報告
2015/05/30
最新の技術をとりあえず試
してみることを目的とした
部です。
2015/05月活動内容
1. angular.js1.3系を利用して再利用可能なディレクティブを作成するその③
Look at me mom...dad and I are having so much fun!
1.概要
1.今回作る予定のディレクティブ
スマホでは使わないと思うけど、タブレットではDrag&Drop操作はありだと思う。
なので、汎用性のあるDrag&Dropディレクティブができれば、UIのバリエーションを増やせるなーと
思い外国産のディレクティブを使ってみたけど一部動作しなかったり拡張しようとしたけどちょっとレ
ベルが足りなかった。
でもDrag&Dropって実際使うと使いにくかったりするよね。
結局はエンジニアの自己満足な気がしてきた。
というわけで、作ればいい!という結論に至ったのでつくってみます。
余談ですが、単一画面内でDrag&Dropのソート機能とかだけを使うパターンの場合はJQueryの
sortableでやればいいと思う。
1.概要
● Drag元とDrag先をそれぞれ指定するディレクティブ
● Drop後はイベントを送出させる
● リピートされた要素でもDrag&Dropできるようにする
● HTML5のDrag&Dropを使う
機能
ぶっちゃけt○elloみたいなUIを自分でも実装できるようになりたかったのでこんな感じの機能にして
みた。
t○ello使ってみたけど、使いやすいなーって思いました。(別に宣伝じゃないよ)
最近のタスク管理アプリはカードベースのUIが多い気がする。
このUIができると、アジャイル開発用のredmine的なもの作れる気がする。
ストーリーをカードにして、順番を定義させて~的なやつ。
2.ディレクティブを考える
1.ディレクティブの構成
Drag可能なエリアを指定させるタイプのディレクティブとDrop先であるディレクティブを指定するディ
レクティブの2つが必要になる。
それぞれのパラメータとかを考えてみた。
restrict: 'AE'
transclude: false
require: '^ngModel'
scope: {dragindex: '='}
restrict: 'A'
require: '^ngModel'
scope: {}
Drag Drop
transcludeをDrag側に指定してみた。
これはディレクティブとした要素の内容をテンプレートの一部として利用できるようになるディレクティ
ブ。
後は、requireを「require: '^ngModel'」ってする。
親コントローラーを参照できるようにして、そこからDragとDropされた値を書き換えるためね。
dragIndexは位置を特定するのに使う予定。
2.ディレクティブを考える
リピート要素に対して指定されるディレクティブを想定しているので考え始めるといろいろでてきた。
● Drag中に値を保持させたり、Dropした時にどこに落ちたかわからないといけなよね。
● ってことは、DragディレクティブとDropディレクティブで値を共有しておかなきゃいけないよね。
● Drop後はDrag先から要素を消したいよね
● このディレクティブを使う側はそこらへんは意識しないで使いたいよね。
ってことで値の受け渡しとかはSharedServicesにすればよくね?
あとはどのタイミングで入れるよ?ってことなんだけど、 をDrag要素、 をエリアとし
た場合Drag&Dropでは、①~⑥のアクションが起こるよね。
それぞれでイベントが発生してるわけなんだけど、そのイベントを利用すればいけそう。
Dragする Drag中 Dropす
る
① ② ③
Dropエリ
アに入る
④
dragstart dragenter dragover
Drop先を
選ぶ
drop
⑤
Drag対象を設定
dropされる可能性がある
からdropを特定するため
のclassを設定
位置を設
定
Drag対象を取得し
てDrop先に設定し
て削除
Dropエリ
アから出
る
dragenter時
に設定した
classを削除
dragleave
⑥
2.ディレクティブを考える
SharedServicesを作ってみた。
orverIndexはdragoverを出してる要素に指定された
indexを格納する変数。
fromDataはdragされた要素を生成する際に使用した
scopeの値を保持する変数。
2.ディレクティブを考える
dragディレクティブを作ってみた
。
SharedServicesをインジェクショ
ンして使えるようにしたのがこれま
でと違うところかな。
linkで要素にdraggableを追加してDrag可能にして、分離スコープのdragindexをdata-indexとして追加する。
dragstartをonしておいて、イベント発生時に対象要素に指定したdata-indexとhtmlを取得しておいて
dataTransferにぶっこむ。
イベント発生したscopeにバインドされた値をSharedServicesのfromに設定。
2.ディレクティブを考える
dropディレクティブを作ってみた
。
まずは
dragenter,dragover,dragleaveのイ
ベントの処理から。
dragenterとdragleaveに関しては
イベントが発生した要素にイベント
用のclassを追加/削除しているだけ
。
dragoverはイベントが発生した要
素から位置を特定するためのindex
が存在している(drag要素として
も指定されている)かをチェックし
てindexがあればそれを設定。
なかったら特に指定しない。これなら一方的にDropするエリアであっても対応できる気がする。
2.ディレクティブを考える
dropイベント時の処理。
2.ディレクティブを考える
ここの処理ではdataTransferとSharedSearviceからデータを取得して、$modelValueの値を変更する
ことで画面側でも反映されるようにしてる。
後は必要そうな情報をobjectにまとめて$emitするって感じ。
一応今はDrop先(to)、Drag元(from)、削除対象(remove)、同一要素内での移動かのフラグ
(isSameContainer)を渡してる。
利用する側は「dropItemComplete」をonしておいてイベントをキャッチする感じかな。
キャッチしたら、socket.ioでemitして別の人の画面も反映させにいけば、比較的リアルタイムな感じ
で行ける気がする。
3.ディレクティブを使う
1. HTMLに指定する
赤枠のところが指定した箇所ね。
3.ディレクティブを使う
うごかすぜー!!!!!!!!
3.ディレクティブを使う
4.最後
Drop先の要素が1つしない場合に、一番下に入れれないバグがあるけど、とりあえず動くのが作れた。
たぶん、indexの取得部分にバグがあるのかなー。
まぁそのうち直します。
今回のディレクティブ作成は結構勉強になったなー。
socket.ioもふつうに使えたから、やれることのバリエーションが増えたかなー。
次はReactやるか、それともUnity5やるか、どっちにしようかな。

More Related Content

PDF
enchant.jsを使った子ども向けプログラミングワークショップ講義内容
ODP
クロスプラットフォームなPlayNを使ってみた
PPT
ペアプロどうでしょう?
PDF
Project Tiny + Photon Realtime
PDF
MOONBlockでプログラミング体験
PDF
Vagrant でお手軽開発環境
PDF
日曜プログラマーがHtml5とかで通信対戦ゲームを作ってます
PDF
20101127 Android Usability Seminar
enchant.jsを使った子ども向けプログラミングワークショップ講義内容
クロスプラットフォームなPlayNを使ってみた
ペアプロどうでしょう?
Project Tiny + Photon Realtime
MOONBlockでプログラミング体験
Vagrant でお手軽開発環境
日曜プログラマーがHtml5とかで通信対戦ゲームを作ってます
20101127 Android Usability Seminar

What's hot (20)

PDF
スクリプト・プログラマー宣言
PDF
今から始めるPhotoshopによるWeb制作-初期設定編
PDF
Ios android tips
PPTX
あたしデザイナだけど"ナントカ.js"と仲良くできたよ
PDF
『これからはじめるプログラミング基礎の基礎』 のエッセンス
PDF
第12回東京ブロガーミートアップ動画
PDF
はじめてのAndroidアプリ
PPTX
Unite2017 参加報告 GlobalWalkers
PDF
(たぶん)やさしいUnity
PDF
『「ペーパープロトタイピング」に学ぶユーザー中心設計(UCD)』すくすくスクラム
PPTX
MobProgramming at ヴァル研究所 - 紹介
PPTX
Mob Programming ってなんですか?
PPTX
MobProgramming at クリエーションライン
ODP
Simutrans札幌オフプレゼンテーション
PPTX
モブプログラミングを体験しよう at Agile Japan 2017 愛媛サテライト
PPTX
2010/8/27 TechEd2010 ライトニングトーク
PDF
チラ見せ♡ナイト@20150410 LT公開用
PPTX
MobProgrammingを体験してみよう!
PDF
UE4・Re:ゼロから始めるVR開発
PDF
Adobe XDを使うと、こんなに効率よくゲームUIが作れちゃうの!?
スクリプト・プログラマー宣言
今から始めるPhotoshopによるWeb制作-初期設定編
Ios android tips
あたしデザイナだけど"ナントカ.js"と仲良くできたよ
『これからはじめるプログラミング基礎の基礎』 のエッセンス
第12回東京ブロガーミートアップ動画
はじめてのAndroidアプリ
Unite2017 参加報告 GlobalWalkers
(たぶん)やさしいUnity
『「ペーパープロトタイピング」に学ぶユーザー中心設計(UCD)』すくすくスクラム
MobProgramming at ヴァル研究所 - 紹介
Mob Programming ってなんですか?
MobProgramming at クリエーションライン
Simutrans札幌オフプレゼンテーション
モブプログラミングを体験しよう at Agile Japan 2017 愛媛サテライト
2010/8/27 TechEd2010 ライトニングトーク
チラ見せ♡ナイト@20150410 LT公開用
MobProgrammingを体験してみよう!
UE4・Re:ゼロから始めるVR開発
Adobe XDを使うと、こんなに効率よくゲームUIが作れちゃうの!?
Ad

Similar to 活動報告7 d&dなディレクティブを作る- (20)

PDF
Weekend Androidのススメ
PDF
UI&UX / 重要なのは、毎日さわって嬉しい UI UX!
PPTX
活動報告5 ~簡単なディレクティブを作る~
PDF
Eclipseデバッガを活用するための31のtips
PDF
ABC2013 Spring デザインナーとエンジニアの連携プレイのコツ
PPTX
FriendlyによるWindowsアプリテスト自動化手法 基礎技術編
PDF
Jumvo 2.0 における デザイナーとエンジニアの連携
PPT
PPTX
Jenkinsを使おうよ
PDF
iPhone開発者初心者向け資料「XcodeのStoryboardで画面を作ろう!」
PDF
【Unite 2018 Tokyo】Unityにおける疎結合設計 ~UIへの適用事例から学ぶ、テクニックとメリット~
PDF
「Camelog」Android開発秘話
PDF
マンガボックスのアプリができるまで
PPTX
Appsheet基礎講座.pptx
PDF
Google mapとgps機能を使ってみた。
PDF
iPhone develop for Beginner
PPTX
Cod2012 デバッグ講座
PDF
【名古屋】2014/2/8 Unity勉強会2
PPTX
Azure ml
PDF
知識ゼロからモバイルアプリをデザインして失敗した話
Weekend Androidのススメ
UI&UX / 重要なのは、毎日さわって嬉しい UI UX!
活動報告5 ~簡単なディレクティブを作る~
Eclipseデバッガを活用するための31のtips
ABC2013 Spring デザインナーとエンジニアの連携プレイのコツ
FriendlyによるWindowsアプリテスト自動化手法 基礎技術編
Jumvo 2.0 における デザイナーとエンジニアの連携
Jenkinsを使おうよ
iPhone開発者初心者向け資料「XcodeのStoryboardで画面を作ろう!」
【Unite 2018 Tokyo】Unityにおける疎結合設計 ~UIへの適用事例から学ぶ、テクニックとメリット~
「Camelog」Android開発秘話
マンガボックスのアプリができるまで
Appsheet基礎講座.pptx
Google mapとgps機能を使ってみた。
iPhone develop for Beginner
Cod2012 デバッグ講座
【名古屋】2014/2/8 Unity勉強会2
Azure ml
知識ゼロからモバイルアプリをデザインして失敗した話
Ad

More from vx-pc-club (8)

PDF
Bing autosuggest apiを使ってみた
PPTX
Azure text analytics apiつかってみる
PPTX
Azure app serviceの環境構築 php7とpdo-sqlsrvを使う方法-
PPTX
Azureで作るnodeアプリケーション①
PPTX
活動報告9 laravel5入門-
PPTX
活動報告8 r入門-
PPTX
活動報告6 オートコンプリート的なディレクティブを作る-
PPTX
活動報告4 ~gitとjenkinsとcloud9~
Bing autosuggest apiを使ってみた
Azure text analytics apiつかってみる
Azure app serviceの環境構築 php7とpdo-sqlsrvを使う方法-
Azureで作るnodeアプリケーション①
活動報告9 laravel5入門-
活動報告8 r入門-
活動報告6 オートコンプリート的なディレクティブを作る-
活動報告4 ~gitとjenkinsとcloud9~

活動報告7 d&dなディレクティブを作る-

Editor's Notes

  • #2: Image Sources: http://www.flickr.com/photos/cat_bus/2436839379/sizes/l/ http://www.flickr.com/photos/chippenziedeutch/1338350448/sizes/l/ http://www.flickr.com/photos/17625613@N00/63534223/sizes/o/ http://www.flickr.com/photos/andy_bernay-roman/740526711/sizes/o/ http://www.flickr.com/photos/criminalintent/2246696077/sizes/l/ http://www.flickr.com/photos/criminalintent/2300328819/sizes/l/in/set-72157603816609718/ http://www.flickr.com/photos/criminalintent/2344482203/sizes/l/in/set-72157603816609718/ http://www.flickr.com/photos/billward/110319298/sizes/o/ http://www.flickr.com/photos/ginamig/2283868571/sizes/l/ http://www.flickr.com/photos/cochese/1388690893/sizes/o/