スポンサー
Support Framework7

ログイン画面

    Framework7には、すぐに使えるログイン画面のレイアウトが用意されています。このレイアウトは、ページやログイン画面の中(埋め込み)、またはスタンドアロンのモーダルとして使用することができます。

    1.ログイン画面のレイアウト

    まず最初に、スタンドアロンのLogin Screenレイアウトを見てみましょう。このレイアウトは、ログイン画面とほぼ同じように動作します。

    <div class="login-screen">
      <!-- ビューページのデフォルトレイアウト -->
      <div class="view">
        <div class="page login-screen-page">
          <!-- page-contentには、ログイン画面の追加コンテンツがあります。 -->
          <div class="page-content login-screen-content">
            <div class="login-screen-title">My App</div>
            <!-- ログインフォーム -->
            <form>
              <div class="list">
                <ul>
                  <li class="item-content item-input">
                    <div class="item-inner">
                      <div class="item-title item-label">Username</div>
                      <div class="item-input-wrap">
                        <input type="text" name="username" placeholder="Username" />
                        <span class="input-clear-button"></span>
                      </div>
                    </div>
                  </li>
                  <li class="item-content item-input">
                    <div class="item-inner">
                      <div class="item-title item-label">Password</div>
                      <div class="item-input-wrap">
                        <input type="password" name="password" placeholder="Password" />
                        <span class="input-clear-button"></span>
                      </div>
                    </div>
                  </li>
                </ul>
              </div>
              <div class="list">
                <ul>
                  <li>
                    <a href="#" class="list-button">Sign In</a>
                  </li>
                </ul>
                <div class="block-footer">Some text with login information.</div>
              </div>
            </form>
          </div>
        </div>
      </div>
    </div>

    なお、<div class="login-screen">の中にある要素はすべて任意ですが、ログインフォームの定型レイアウトとして使用することができます。

    ログイン画面アプリのメソッド

    ログイン画面に関連するアプリのメソッドを紹介します。

    app.loginScreen.create(parameters)- Login Screenインスタンスの作成

    • parameters - object. ログイン画面のパラメータを持つオブジェクト

    作成したLogin Screenのインスタンスを返すメソッド

    app.loginScreen.destroy(el)- ログイン画面のインスタンスの破棄

    • el - HTMLElementまたはstring(CSSセレクタ付き)またはobject。破棄するログイン画面要素またはログイン画面インスタンスです。

    app.loginScreen.get(el)- HTML要素によるログイン画面インスタンスの取得

    • el - HTMLElement または string (with CSS Selector). ログイン画面の要素です。

    メソッドは、ログイン画面のインスタンスを返します。

    app.loginScreen.open(el, animate)- ログイン画面を開く

    • el - HTMLElement または string (with CSS Selector). 開くログイン画面の要素
    • animate - boolean。アニメーション付きでログイン画面を開きます。

    メソッドは、ログイン画面のインスタンスを返します。

    app.loginScreen.close(el, animate)- ログイン画面を閉じる

    • el - HTMLElementまたはstring(CSSセレクタ付き)。ログイン画面の要素を閉じます。
    • animate - boolean。アニメーションでログイン画面を閉じます。

    メソッドは、ログイン画面のインスタンスを返します。

    ログイン画面のパラメータ

    ここでは、ログイン画面を作成するために必要なパラメータの一覧を見てみましょう。

    ParameterTypeDefaultDescription
    elHTMLElement
    string
    Login Screen要素。すでにHTML内にLogin Screen要素があり、この要素を使って新しいインスタンスを作成したい場合に便利です。
    contentstringFull Login Screen HTML layout string. Login Screen要素を動的に作成したい場合に便利です。
    animatebooleantrueログイン画面の開閉をアニメーションで行うかどうかを指定します。.open().close()`メソッドで上書きすることができます。
    onobject

    イベントハンドラーを持つオブジェクト。例えば、以下のようになります。

    var loginScreen = app.loginScreen.create({
      content: '<div class="login-screen">...</div>',
      on: {
        opened: function () {
          console.log('Login Screen opened')
        }
      }
    })

    ログイン画面のメソッドとプロパティ

    ログイン画面を作成するためには、以下のメソッドを呼び出す必要があります。

    var loginScreen = app.loginScreen.create({ /* parameters */ })

    その後、初期化されたインスタンス(上記の例では、変数 loginScreen )に、便利なメソッドとプロパティを設定します。

    Properties
    loginScreen.appグローバルアプリのインスタンスへのリンク
    loginScreen.elログイン画面のHTML要素
    loginScreen.$elログイン画面のHTML要素を持つDom7インスタンス
    loginScreen.paramsログイン画面のパラメータ
    loginScreen.openedログイン画面が開かれるかどうかを示すブール値のプロップ
    Methods
    loginScreen.open(animate)ログイン画面を開く ここでは
    • animate - boolean (デフォルトでは true) - アニメーションで開くかどうかを定義します。
    loginScreen.close(animate)ログイン画面を閉じます。ログイン画面を閉じる
    • animate - boolean (デフォルトでは true) - アニメーションで閉じるかどうかを定義します。
    loginScreen.destroy()ログイン画面の破棄
    loginScreen.on(event, handler)イベントハンドラの追加
    loginScreen.once(event, handler)起動後に削除されるイベントハンドラを追加します。
    loginScreen.off(event, handler)イベントハンドラの削除
    loginScreen.off(event)指定されたイベントのハンドラをすべて削除します
    loginScreen.emit(event, ...args)インスタンスでイベントを発生させる

    リンクによるログイン画面の制御

    必要なログイン画面がDOMにあれば、リンクの特別なクラスとデータ属性を使って、開いたり閉じたりすることができます。

    • ログイン画面を開くには、"login-screen-open"クラスを任意のHTML要素(リンクが望ましい)に追加する必要があります。

    • ログイン画面を閉じるには、"login-screen-close"クラスを任意のHTML要素に追加する必要があります(リンクが望ましい)。

    • もしDOMに複数のログイン画面がある場合は、このHTML要素にdata-login-screen=".my-login-screen"属性を追加して、適切なログイン画面を指定する必要があります。

    上記のメモによると

    <!-- data-login-screen属性では、開くべきログイン画面のCSSセレクタを指定しています。 -->
    <p><a href="#" data-login-screen=".my-login-screen" class="login-screen-open">Open Login Screen</a></p>
    
    <!-- また、DOMのどこかに -->
    <div class="login-screen my-login-screen">
      <div class="view">
        <div class="page">
          <div class="navbar">
            <div class="navbar-bg"></div>
            <div class="navbar-inner">
              <div class="title">Login Screen</div>
              <div class="right">
                <!-- ログイン画面を閉じるためのリンク -->
                <a class="link login-screen-close">Close</a>
              </div>
            </div>
          </div>
        </div>
        <div class="page-content">
          ...
        </div>
      </div>
      ...
    </div>
    
    

    ログイン画面のイベント

    ログイン画面では、以下のDOMイベントがログイン画面の要素で発生し、アプリとログイン画面のインスタンスでイベントが発生します。

    DOM イベント

    EventTargetDescription
    loginscreen:openLogin Screen Element<div class="login-screen">Login Screen がオープニングアニメーションを開始したときにイベントが発生します。
    loginscreen:openedLogin Screen Element<div class="login-screen">イベントは、Login Screen のオープニングアニメーションが完了した後に発生します。
    loginscreen:closeLogin Screen Element<div class="login-screen">ログイン画面が閉じるアニメーションを開始すると、イベントが発生します。
    loginscreen:closedLogin Screen Element<div class="login-screen">ログイン画面が閉じるアニメーションが完了するとイベントが発生する

    アプリとLogin Screenインスタンスのイベント

    Login Screenインスタンスは、selfインスタンスとappインスタンスの両方にイベントを発行します。アプリインスタンスのイベントは、同じ名前でプレフィックスが loginScreen となっています。

    EventArgumentsTargetDescription
    openloginScreenloginScreenイベントは、Login Screenがオープニングアニメーションを開始したときに発生します。イベントハンドラは引数として、ログイン画面のインスタンスを受け取ります。
    loginScreenOpenloginScreenapp
    openedloginScreenloginScreenイベントは、Login Screenがそのオープニングアニメーションを完了した後にトリガされます。As an argument event handler receives login screen instance
    loginScreenOpenedloginScreenapp
    closeloginScreenloginScreenログイン画面が閉じるアニメーションを開始するとイベントが発生します。As an argument event handler receives login screen instance
    loginScreenCloseloginScreenapp
    closedloginScreenloginScreenログイン画面の終了アニメーションが終了するとイベントが発生します。As an argument event handler receives login screen instance
    loginScreenClosedloginScreenapp
    beforeDestroyloginScreenloginScreenログイン画面のインスタンスが破棄される直前にイベントが発生します。As an argument event handler receive login screen instance
    loginScreenBeforeDestroyloginScreenapp

    埋め込み型ログイン画面

    ログイン画面は、ページやポップアップに埋め込むこともできます。ページの中にログイン画面を埋め込む例を見てみましょう。

    <div class="page no-navbar no-toolbar no-swipeback login-screen-page">
      <div class="page-content login-screen-content">
        <div class="login-screen-title">My App</div>
        <form>
          <div class="list">
            <ul>
              <li class="item-content item-input">
                <div class="item-inner">
                  <div class="item-title item-label">Username</div>
                  <div class="item-input">
                    <input type="text" name="username" placeholder="Your username" />
                  </div>
                </div>
              </li>
              <li class="item-content item-input">
                <div class="item-inner">
                  <div class="item-title item-label">Password</div>
                  <div class="item-input">
                    <input type="password" name="password" placeholder="Your password" />
                  </div>
                </div>
              </li>
            </ul>
          </div>
          <div class="list">
            <ul>
              <li><a href="#" class="list-button">Sign In</a></li>
            </ul>
            <div class="block-footer">
              <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit.</p>
              <p><a href="#" class="close-login-screen">Close Login Screen</a></p>
            </div>
          </div>
        </form>
      </div>
    </div>

    ログイン画面のページでは、ユーザーからナビゲーション要素を隠すために、"no-navbar"、"no-toolbar"、"no-swipeback "クラスを追加していることに注意してください。

    CSS Variables

    Below is the list of related CSS variables (CSS custom properties).

    Note that commented variables are not specified by default and their values is what they fallback to in this case.

    :root {
      --f7-login-screen-blocks-max-width: 480px;
      /*
       --f7-login-screen-list-button-text-color: var(--f7-theme-color);
       */
      --f7-login-screen-title-text-align: center;
      --f7-login-screen-title-text-color: inherit;
      --f7-login-screen-title-letter-spacing: 0;
      --f7-login-screen-title-font-weight: 600;
      --f7-login-screen-title-font-size: 28px;
      --f7-login-screen-content-bg-color: #fff;
      --f7-login-screen-bg-color: #fff;
    }
    :root .theme-dark,
    :root.theme-dark {
      --f7-login-screen-bg-color: #121212;
      --f7-login-screen-content-bg-color: #121212;
    }
    .ios {
      --f7-login-screen-blocks-margin-vertical: 25px;
    }
    .ios .theme-dark,
    .ios.theme-dark {
      --f7-login-screen-bg-color: #000;
      --f7-login-screen-content-bg-color: #000;
    }
    .md {
      --f7-login-screen-blocks-margin-vertical: 24px;
    }
    .aurora {
      --f7-login-screen-blocks-margin-vertical: 16px;
    }
    

    Examples

    <template>
      <div class="page">
        <div class="navbar">
          <div class="navbar-bg"></div>
          <div class="navbar-inner">
            <div class="title">Login Screen</div>
          </div>
        </div>
        <div class="page-content">
          <div class="block block-strong">
            <p>
              <!-- Open in login screen that already in DOM-->
              <a href="#" class="button button-fill login-screen-open" data-login-screen=".login-screen">Open As
                Modal</a>
            </p>
            <p>
              <!-- Load page with login screen (login-screen-page.f7.html) -->
              <a href="/login-screen/" class="button button-fill">Open As Page</a>
            </p>
          </div>
        </div>
      </div>
    
      <div class="login-screen">
        <div class="view">
          <div class="page">
            <div class="page-content login-screen-content">
              <div class="login-screen-title">My App</div>
              <form>
                <div class="list">
                  <ul>
                    <li class="item-content item-input">
                      <div class="item-inner">
                        <div class="item-title item-label">Username</div>
                        <div class="item-input-wrap">
                          <input type="text" name="username" placeholder="Your username" />
                        </div>
                      </div>
                    </li>
                    <li class="item-content item-input">
                      <div class="item-inner">
                        <div class="item-title item-label">Password</div>
                        <div class="item-input-wrap">
                          <input type="password" name="password" placeholder="Your password" />
                        </div>
                      </div>
                    </li>
                  </ul>
                </div>
                <div class="list">
                  <ul>
                    <li><a class="list-button" href="#">Sign In</a></li>
                  </ul>
                  <div class="block-footer">
                    <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit.</p>
                    <p><a class="link login-screen-close" href="#">Close Login Screen</a></p>
                  </div>
                </div>
              </form>
            </div>
          </div>
        </div>
      </div>
    </template>
    <script>
      export default (props, ctx) => {
        const { $ } = ctx;
        // Login Screen-Modal DOM events
        $('.login-screen').on('loginscreen:open', function (e) {
          console.log('Login screen open')
        });
        $('.login-screen').on('loginscreen:opened', function (e) {
          console.log('Login screen opened')
        });
        $('.login-screen').on('loginscreen:close', function (e) {
          console.log('Login screen close')
        });
        $('.login-screen').on('loginscreen:closed', function (e) {
          console.log('Login screen closed')
        });
    
        
    
        return $render;
      }
    
    </script>

    ログイン画面ページ

    <template>
      <div class="page no-navbar no-toolbar no-swipeback">
        <div class="page-content login-screen-content">
          <div class="login-screen-title">My App</div>
          <form>
            <div class="list">
              <ul>
                <li class="item-content item-input">
                  <div class="item-inner">
                    <div class="item-title item-label">Username</div>
                    <div class="item-input-wrap">
                      <input type="text" name="username" placeholder="Your username" />
                    </div>
                  </div>
                </li>
                <li class="item-content item-input">
                  <div class="item-inner">
                    <div class="item-title item-label">Password</div>
                    <div class="item-input-wrap">
                      <input type="password" name="password" placeholder="Your password" />
                    </div>
                  </div>
                </li>
              </ul>
            </div>
            <div class="list">
              <ul>
                <li><a href="#" class="list-button">Sign In</a></li>
              </ul>
              <div class="block-footer">
                <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit.</p>
                <p><a href="#" class="link back">Close Login Screen</a></p>
              </div>
            </div>
          </form>
        </div>
      </div>
    </template>