SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

【デブサミ2020】セッションレポート (AD)

PayPayモールとYahoo!ニュースの事例で紹介──HTMLのportal要素を活用した画面遷移設計とは【デブサミ2020】

【14-A-2】新しいHTMLを利用した画面遷移設計 〜PayPayモールとYahoo!ニュースの事例を添えて〜

  • このエントリーをはてなブックマークに追加

Portalsの実装方法を実例で解説

 続いては、PayPayモールとYahoo!ショッピングを担当するフロントエンドエンジニアの関氏から、Portalsの実装方法が解説された。関氏はPayPayモールではVue.jsやAMP、Yahoo!ショッピングではReactやTypeScriptなどの技術を使って、開発を行っている。

ヤフー株式会社フロントエンドエンジニア 関真由美氏
ヤフー株式会社フロントエンドエンジニア 関真由美氏

 まず関氏は、A.htmlとB.htmlという2つのページを例に使い、実装の流れを説明した。

 windowにHTMLPortalElementがあるかチェックした上でcreateElement()でportal要素を生成。srcにはportal要素で表示したいページのURL(B.html)を指定し、portal要素をDOMに追加する。

 portal要素を埋め込んだら、アニメーションをして、portal要素を画面全体に表示します。

 「アニメーションを使わなくてもPortalsの機能を利用することはできますが、シームレスな画面遷移を実現するためにはアニメーションは不可欠です」(関氏)

 Portalsにはアニメーションの機能はないため、CSS Transitionなどで各自実装する。

 「CSS Transitionを使う場合、可能な限りtransformもしくはopacityを使うことをお勧めします。transformとopacityはアニメーションする要素を別レイヤーに切り分けて、他の要素に影響することなくアニメーションするため、よりネイティブアプリに近い体験を実現することができます」(関氏)

 この時点では画面全体にB.htmlが表示されているが、URLはA.htmlのままである。続いて、activate()という関数を実行すると、B.htmlに直接ナビゲートすることができる。通常の画面遷移のように一瞬画面が真っ白になったりすることがなく、シームレスな画面遷移を実現できるという仕組みだ。

 activate()関数には引数でデータを渡す実装方法についてもコード例が示された。

Portalsを使って、2つのページを行き来する方法

 続いては、2つのページを行き来する方法について。Portalsを使えば、それぞれのページのJavaScriptや、UIの状態を保持して行き来したり、アニメーションを挟んだりすることも可能となる。

 2つのページを行き来するためにはPortalActivateEventを利用する。A.htmlでactivate()を実行する際に引数で渡したデータは、event.dataで取得することができる。

 また、PortalActivateEventはevent.adoptPredecessor()で、A.htmlをportal要素として取得。それをDOMに追加すれば、逆にB.htmlにA.htmlを埋め込むことができる。

 Portalsには、PortalHostというインターフェースがあり、window.portalHostで自身がportal要素として、利用されているか判定することができる。portal要素として利用されている場合のみ、UIを変更したり追加したりすることが可能だ。

 「この例では、B.htmlに×ボタンを追加しています。このボタンのクリックでactivate()を実行するように実装すれば、モーダルのようなコンテンツが作れます」(関氏)

次のページ
メッセージをやり取りする機能

この記事は参考になりましたか?

  • このエントリーをはてなブックマークに追加
【デブサミ2020】セッションレポート 連載記事一覧

もっと読む

この記事の著者

CodeZine編集部(コードジンヘンシュウブ)

CodeZineは、株式会社翔泳社が運営するソフトウェア開発者向けのWebメディアです。「デベロッパーの成長と課題解決に貢献するメディア」をコンセプトに、現場で役立つ最新情報を日々お届けします。

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

【AD】本記事の内容は記事掲載開始時点のものです 企画・制作 株式会社翔泳社

この記事は参考になりましたか?

この記事をシェア

  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/12082 2020/04/06 12:00

おすすめ

アクセスランキング

アクセスランキング

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

アクセスランキング

アクセスランキング