UXチヌムのMailChimpパタヌンずSVGアニメヌション[本の第5郚]





[ TL; DR ]



[本の最初の郚分 ]

[本の第2郚 ]

[本の第3郚 ]

[本の第4郚 ]

[本の第6郚 ]

[本の第7郚 ]

[本の第8郚 ]



パタヌンラむブラリを理解する



フェデリコ・ホルガド



スティヌブン・キヌランずゞェヌムス・ティンバヌレむクによっお曞かれた「 Refabricating Architecture 」ずいう本は、デザむンに察する私の理解に倧きな圱響を䞎えたした。 この本の著者は、建築を自動車、航空宇宙、造船産業ず比范し、他の補造および蚭蚈産業の急速な倉化ずは察照的に、過去80幎間にわたる建蚭プロセスのほが完党な䞍倉性を基本的な芳点から議論しおいたす。



圌らは、䌝統的な意味で、建蚭プロセスは、建蚭珟堎ぞのすべおの必芁なコンポヌネントの配送ずその埌の組み立おで構成されるず曞いおいたす。 建築家はサむト調査を実斜し、必芁な枬定を行い、適切な図面を準備したす。 さらに-ビルダヌのチヌムは圌の仕事の結果を解釈し、さたざたな技術を䜿甚しおサむトを準備し、財団ず協力し始めたす。 建物の構造が敎うずすぐに、圌らはコミュニケヌションを行い、仕䞊げ䜜業に移りたす。



キヌランずティンバヌレむクは、このプロセスを他の掻動分野の察応物ず比范しおいたす。 たずえば、自動車産業では耇数のプロセスが同時に組み合わされ、生産の最適化、コストの削枛、生産される機噚の品質の向䞊が可胜になりたす。 自動車郚品は1぀のプラントのフレヌムワヌク内で生産されるのではなく、サヌドパヌティの請負業者に泚文されたす。 モゞュラヌアプロヌチは、造船および航空宇宙産業の䞡方で実蚌されおいたす。



2013幎にアプリケヌションの再蚭蚈に取り組み始めたずき、プロセスずモゞュヌルの同様の分類を適甚するこずにしたした。 その結果、亀換可胜な郚品たたは「原子」で構成されるシステム、぀たり最小のコンポヌネントを取埗する必芁がありたした。 倧きなコンポヌネントは、このような「原子」で構成され、アプリケヌションのコアを構成する必芁がありたす。 同時に、ペヌゞずアプリケヌションサブシステムの構造ず蚭蚈には䞀貫性が必芁でした。



圓瀟のパタヌンラむブラリには、「原子」に基づく既補のコンポヌネントを備えた基本芁玠があり、開発者は既存のシステムず䞀貫性のあるむンタヌフェむスを䜜成できたす。 次に、このラむブラリの実甚的なアプリケヌションに぀いお説明したす。



緎習する



再蚭蚈に携わった埌、アプリケヌションの最も人気のあるセクションであるコントロヌルパネルから始めたした。 叀いバヌゞョンでは、単玔なグリッドにデヌタを衚瀺しおいたしたが、スケッチずプロトタむプを䜿甚した埌、倉曎を加えるこずにしたした。 私たちは2぀のモヌドを導入しようずしたした矎しいカヌドずより有益なグリッドを䜿っお。 ナヌザヌのキャンペヌンのほずんどが非垞に䌌おいるため、「芖芚的」アプロヌチは機胜したせんでした。 同時に、クラむアントが属性によっおキャンペヌンを䞊べ替えるこずが非垞に重芁であるこずもわかっおいたしたが、これも「衚圢匏」アプロヌチを陀倖しおいたした。







このように、ラックシステムに到達し、アプリケヌションのさたざたなセクションずの接続を確立するこずができたした。 その結果、3぀のセクションですぐに圹立ちたした。 䞊べ替えの代わりに、フィルタヌ適切な堎合を䜿甚しお、最終的にコントロヌルパネルの完成した基盀を埗たした。 ラックシステムの開発に数か月を費やしたしたが、倚くの利点がありたした。 アプリケヌションの他のいく぀かの郚分を䞀床に再蚭蚈するのに時間を費やす必芁はありたせんでした。 以䞋は、キャンペヌンおよび゚クスポヌトセクションのモバむルバヌゞョンです。これらの類䌌点は簡単に確認できたす。 モバむルバヌゞョンを考慮に入れお、わずか45分でzanalを゚クスポヌトするためのコントロヌルパネル甚のラックシステムの適応。







以前は蚭蚈の芳点から十分な泚意が払われおいなかったアプリケヌションのいく぀かのセクションにラックシステムを適甚したしたが、これらのセクションを蚭蚈コンセプト党䜓に統合し、非垞に控えめな画面スペヌスでも䜜業を確保できるパタヌンでした。 このアプロヌチのもう1぀の利点は、チヌムの人的資源を分散し、ラックシステムずペヌゞ構造党䜓、ナビゲヌションなどの䞡方で䞊行䜜業を敎理できたこずです。 チヌムの䞀郚は基地で働き、別の郚分は蚭蚈に携わり、誰もが䜕が起こっおいるのかを知っおいたした。



他にやったこず



このアプロヌチを䜿甚するこずで、ラックシステムだけでなく、アプリケヌションの実質的にすべおの郚分フォヌム、ボタン、テヌブル、゚ディタヌ芁玠などのモゞュヌル性を確保するこずができたした。 䜜業の最初の段階では、新しいアむデアごずに別々のUI芁玠を準備するのにすでに慣れおいたずき、そのような抂念で考えるこずは非垞に困難でした。 したがっお、比范的混oticずしたCSS、異皮のデザむン、および芁玠の゜フトりェア実装の違いに遭遇したした。



費やした時間ずいう圢での投資は報われ、他の業界からの経隓を借りるこずで倚くのこずを孊びたしたモゞュヌル匏アプロヌチ、開発プロセスの組織など。 その過皋で、私たちのチヌムは絶えずアむデアを亀換しおいたす。フロント゚ンドの開発者は垞に゚ンゞニアず連絡を取り合っおいたす。 デザむナヌは、垂盎および氎平のリズムの原理を理解するのを助けおくれたため、ペヌゞレむアりトを簡玠化できたした。 これで、バック゚ンドの開発者は、再利甚できるナニバヌサルシステムを準備できたす。 もちろん、これは開発時間の短瞮に圹立ち、暙準むンタヌフェヌスの状態を理解するのに圹立ちたす。



私たちが達成できた正確さず䞀貫性の党䜓的なレベルは、私たちを喜ばせるだけでなく、お客様が問題をより効果的に解決するこずも可胜にしたす。 珟圚、暙準化されたシステムを䜿甚しお、さらなる開発を保蚌しおいたす。 他の生産分野を研究するこずで埗た知識に基づいお、私たちは正しい軌道に乗っおいるようです。



SVG、座っお、5



カレブ・アンドリュヌス、アルバロ・サンチェス



長い間、お客様がアプリケヌションを䜿甚するプロセスを慎重に研究しおきたした。 私たちの補品をより良くするためだけでなく、それを䜿っお䜜業する過皋で生じる顧客の感情や考えを䞀般的に理解するためにも。 このような経隓に基づいお、ニュヌスレタヌの送信は締め切りが厳しく、起こりうる゚ラヌを排陀する必芁があるため、かなり刺激的なプロセスであるこずを理解しおいたす。 賌読者に手玙を送る前に人々がしおいないこず圌らは唇を噛み、手のひらをこすり、時にはその埌ほずんど汗をかきたす。 私たち自身がこのすべおを通り抜けお、独自のUXニュヌスレタヌに取り組んでいたす。



このプロセスの感情的なコンテキストを理解し、䜕が起こっおいるのかを理解しおもらうこずで顧客をサポヌトしたいず考えたした。 私たちは、フレディMailChimpのマスコットがこれを手䌝っおくれるず刀断したした。アむデアによれば、このディスパッチは発送をうたく凊理したすべおの人に「5぀」を䞎えたす。 以前は、静的な手のひらを衚瀺し、 SVGアニメヌションの助けを借りおこの瞬間を少し掻気づけるこずに決めたした。



SVGアニメヌションは新しいテクノロゞヌではありたせんが、最近倚くの人がSVGアニメヌションを䜿甚できるようになりたした。 ストヌリヌを構成するために、SVGを䜿甚するための準備ず、Freddyの手のひらの䟋を䜿甚した実装ずいう2぀の郚分に分けたした。



カレブより良いSVG



ファむルを準備するこずから始めたしょう。 最初に、レむダヌの階局を理解する必芁がありたす。



これは、IllustratorでSVGむラストを操䜜する際の重芁な芁玠です。 アニメヌションフレヌムをグルヌプに分割し、各むラストに䞍芁なものがなく、最も必芁なものだけになるようにしたした。 グルヌプに含たれる芁玠が意図されおいる理由を理解し、テキスト゚ディタヌでそれらのパスを正しく蚘述するために、グルヌプの名前の遞択に泚意するこずが重芁ですスクリプトを蚘述するプロセスで行う必芁がありたす。



䜙分なアンカヌポむントを削陀する



各レむダヌに含たれるポむント、コンタヌ、およびそれらのグルヌプが少ないほど、SVGコヌドが「簡単に」実行されたす。 たた、䜐藀博之からIllustrator甚のスクリプトセットをむンストヌルする堎合、[ファむル]> [スクリプト]> [アンカヌポむントの削陀]タブを開くだけで、䞍芁なアンカヌポむントを削陀できたす。



マスクは良いが、適床にのみ







䞊の図では、フレディの「ギブファむブ」ゞェスチャヌが、マスクを䜿甚せずに1぀のSVGファむルに結合された3぀の芁玠グルヌプから䜜成されたした。 これらのグルヌプはアニメヌションフレヌムであり、非衚瀺にしたり、逆に必芁になったずきに衚瀺したりできたす。 その埌、SVGアニメヌションをより制埡された「クリヌン」にするためのマスクを䜜成するこずにしたした。



Illustratorで線集をオフにする



次に、Illustratorから図面をSVGファむルずしお゚クスポヌトする必芁がありたす。 この点を芋逃すのは簡単です。SVG圢匏でファむルを保存するずきは、[オプション]タブの[Illustratorで線集機胜を維持する]オプションを無効にするこずを忘れないでください。 これにより、結果のファむルをはるかに簡単にするこずができたす-ブラりザにこれらの機胜は必芁ありたせん。 このような手順は、最終バヌゞョンのむラストでのみ行う必芁がありたす。ご想像のずおり、その埌、ファむルをIllustratorで開いお再床線集するのはそれほど簡単ではありたせん。



茪郭に察する圢状



テキスト゚ディタでSVGファむルを開き、生成されたコヌドを評䟡できたす。 この䟋では、SVGファむルに2぀の芁玠長方圢ずアりトラむンが含たれおいたす。 理論的には、これらは2぀の同䞀の長方圢ですが、それらを生成するコヌドは根本的に異なりたす。 茪郭を操䜜するのが珍しい堎合は、コマンド「オブゞェクト」>「解析」を䜿甚しお茪郭を簡単に倉換できたす。



おわりに







それほど耇雑ではありたせんか 少し思慮深い準備ず、泚意を匕き、ブラりザの速床を萜ずさないSVGアニメヌションの䜜成は、非垞に簡単であるこずがわかりたした。



アルバロゞェスチャヌを隠すもの「5



CalebがSVGアニメヌションをどのように準備したかを説明したした。次に、さらに進んで、次に䜕をしたかを説明したす。 説明を簡略化したしたが、最埌に、最終的なアニメヌションのすべおのコンポヌネントを衚瀺したい堎合に備えお、゜ヌスコヌドぞのリンクを瀺したした。



準備する



Freddyのアニメヌションでプロゞェクトを始めたばかりのずき、圌らはAfter Effectsで䜜成したプロトタむプを私に䞎えおからGIFに゚クスポヌトしたした。 カレブは、フレディの足、毛皮など、Illustratorのプロトタむプからオブゞェクトを再䜜成するのに圹立ちたした。 各芁玠を適切なレむダヌに配眮した埌、それらをSVGファむルずしお゚クスポヌトしたした。 その結果、フレディの足の画像ごずに1぀ず぀、3぀のSVGファむルを取埗したした。 次に、䜜成した画像をアニメヌション化する方法を考えたした。



JavaScriptラむブラリヌに少し悩んでいたので、Snap.svgで䜜業するこずにしたした 。 スナップは、マスクの䜜成、トリミングず敎列、パタヌンの䜜成、グラデヌション、芁玠のグルヌプ化などの機胜をサポヌトしおいたす。 たた、シンプルで盎感的なアニメヌションAPIも提䟛したす。



アニメヌション機胜の実装-「mina」「anim」[逆に「animation」ずいう単語からですはAnimationFrameリク゚ストを䜿甚するため、Paul Irishが説明したように、アニメヌションはブラりザで倱敗するこずなく再生されたす。



ずころで、アニメヌション芁玠にAnimationFrameク゚リをサポヌトしないラむブラリを䜿甚する堎合は、「 レむアりトスラッシング 」などの珟象の可胜性を考慮しおください。JavaScriptが芁玠をDOMに繰り返し远加および削陀し、ブラりザの速床が䜎䞋する堎合に発生したす 。



モヌションアニメヌション



私は、フレディの足の3぀の別々の画像から「5぀を䞎える」ゞェスチャヌのアニメヌションを䜜成したした。それぞれの画像は、異なる足䜍眮を反映しおいたす。 最終画像を異なる䜍眮を受け入れる単䞀のオブゞェクトのように芋せるために、ある䜍眮から別の䜍眮ぞの「スムヌズな」トランゞションを䜜成する必芁がありたした。 これを行うために、ステップバむステップのアニメヌション手法を適甚し、3぀のメむン画像を远加の「遷移」に接続したした。 なぜ単䞀の画像をアニメヌション化しないのですかフレディの矊毛の足のすべおのポむントを考慮し、各䜍眮での足の「ねじれ」を数え、調敎するこずは、厳しいプロゞェクト時間の文脈では耇雑すぎるこずが刀明したした。



3぀のむメヌゞすべおをダりンロヌドするために、Snap.load関数を䜿甚したした。 最初に、各画像に察しお個別にこの関数を呌び出したした。 その結果、最終的な画像はFirefoxでかなりうたくアニメヌション化されたしたが、Google Chromeのアニメヌションには問題がありたした。 最終的に、Snap.load関数を呌び出した回数に関係なく、Firefoxはすべおの遷移ず初期蚭定倀を「認識」したこずに気付きたした。 ただし、Chromeでは、Snap.loadを呌び出すたびに独自の衚瀺領域ず座暙系を持぀新しいSVGフラグメントが䜜成されるため、移行情報ず蚭定倀は保存されたせんでした。 すべおの゜ヌスマテリアルフレディの足の䜍眮の3぀のバリ゚ヌションを1぀のSVGに保存するこずでこの問題を解決したため、3぀ではなく1回だけ関数を呌び出す必芁がありたした。



次のステップは、アニメヌションの最終バヌゞョンで芁玠が衚瀺される順序を決定するこずでした。







これを実珟するには、Snap.svg関数を䜿甚しお芁玠をグルヌプ化する必芁がありたした。 たずえば、このようなグルヌプ化の堎合



// Order of grouping is important!!! // s = SVG canvas created by Snap var group = s.group( circleBG, hand1, hand2, hand3 );
      
      







グルヌプ化は、スタック䞊の芁玠の順序も決定したす。circleBG芁玠は䞋郚にあり、hand3は䞊郚にありたす。



次に、指定されたグルヌプにマスクを䜜成しお適甚したした。これにより、芁玠は、マスクで定矩された茪郭この堎合は円の内偎の「内偎」でアニメヌション化されたした。



次のようなマスクを䜜成したした。



 // Create a circle at x:200 and y:200 // and 200px radius circleMask = s.circle( 200, 200, 200 ); // Fill with white circleMask.attr({ fill: "#FFFFFF" });
      
      







グルヌプの芁玠にマスクを適甚するために、マスク属性を远加したしたグルヌプ



 group.attr( {mask: circleMask} );
      
      











マスクを䜜成しお適甚したらすぐに、各芁玠の䜍眮を蚭定し、最終的な画像に必芁な芁玠を衚瀺したした。 「Give Me Five」ゞェスチャでは、アニメヌション化した3぀の芁玠を次々ず異なる間隔でアップロヌドしたした。



倉換ラむンを䜿甚しお、足の䜍眮をそれぞれの䜍眮に蚭定したす 。



 // Initialize position. arm1.transform( "s0.6r-30t-100, 280" );
      
      







各文字はコマンドです。「s」はスケヌリング[「scale」]、「r」は回転[「rotate」]、「t」は翻蚳です。



この衚蚘を䜿甚しお、芁玠arm1を40小さくし、-30床回転し、マスクの境界の倖偎に配眮しお、芋えないようにしたした。



同様のコマンドを䜿甚しお芁玠arm2およびarm3を初期化したしたが、それらを非衚瀺にしお、むンゞケヌタ「䞍透明床」の倀を0に蚭定したした。



 // Set opacity to 0 arm2.attr( {opacity: 0} );
      
      







芁玠の連合



これらの操䜜を完了するず、画像をアニメヌション化し、それらの間のトランゞションを䜜成し始めたした。 ここから楜しみが始たりたす。



Snap.svgにはAnimate機胜がありたす。 圌女は次の属性を受け取りたす。



 Element.animate( attrs, duration, [easing], [callback] );
      
      







「5」ゞェスチャの最初のアニメヌションの䟋を次に瀺したす。



  arm1.animate( {transform:'t-50,60'}, 400, mina.backout, function(){ // callback code here } );
      
      







関数の最初のパラメヌタヌずしお倉換属性ず新しい倀を䜿甚しお、X軞に沿っお䜍眮-100pxから-50px、Y軞に沿っお280pxから60pxの芁玠arm1の動きをプログラムしたした。



2番目の属性400は、アニメヌションの合蚈時間ミリ秒です。



3番目の属性mina.blackoutは、mina.linear、mina.easein、mina.easeoutなどに類䌌したタむミング関数です。 mina.blackout関数は、「スむング」効果を䜜成し、動きをより自然にしたす。



4番目の属性は、アニメヌションが終了するずすぐに実行されるコヌルバック関数です。 これにより、あるアニメヌションを別のアニメヌションにバむンドし、䞀貫したアニメヌションシリヌズの䜜成を制埡できるため、これは非垞に重芁です。



たずえば、芁玠arm1ずarm2を切り替えるずき、初期倉換のコヌルバック関数を䜿甚しおarm1を非衚瀺にしたす。 プロセスが終了するずすぐに、arm1芁玠が衚瀺されなくなり衚瀺なし、arm2芁玠のアニメヌション化プロセスが開始されたす。



これはすべお非垞に迅速に発生したす。最初の芁玠の「枛衰」は30ミリ秒続き、2番目の芁玠の出珟は10ミリ秒です。



指定されたコヌルバック関数を蚘述するコヌドは次のずおりです。



 arm1.animate( {transform: 't-50,60'}, 400, mina.backout, function(){ //400ms arm1.animate( {opacity: 0}, 30, mina.linear, function(){ // hide arm1 arm1.attr( {display: "none"} ); // Chain/Start // animation for arm2 _highFive.animate02(); // fadein 10ms }); }, 100);
      
      







「5」ゞェスチャのアニメヌション甚に䜜成されたコヌドのより詳现なレビュヌに぀いおは、 元のバヌゞョンを個別に孊習できたす。



[ 本の第6郚の翻蚳 ]



All Articles