ログイン画面
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。アニメーションでログイン画面を閉じます。
メソッドは、ログイン画面のインスタンスを返します。
ログイン画面のパラメータ
ここでは、ログイン画面を作成するために必要なパラメータの一覧を見てみましょう。
Parameter | Type | Default | Description |
---|---|---|---|
el | HTMLElement string | Login Screen要素。すでにHTML内にLogin Screen要素があり、この要素を使って新しいインスタンスを作成したい場合に便利です。 | |
content | string | Full Login Screen HTML layout string. Login Screen要素を動的に作成したい場合に便利です。 | |
animate | boolean | true | ログイン画面の開閉をアニメーションで行うかどうかを指定します。.open()と .close()`メソッドで上書きすることができます。 |
on | object | イベントハンドラーを持つオブジェクト。例えば、以下のようになります。
|
ログイン画面のメソッドとプロパティ
ログイン画面を作成するためには、以下のメソッドを呼び出す必要があります。
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) | ログイン画面を開く ここでは
|
loginScreen.close(animate) | ログイン画面を閉じます。ログイン画面を閉じる
|
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 イベント
Event | Target | Description |
---|---|---|
loginscreen:open | Login Screen Element<div class="login-screen"> | Login Screen がオープニングアニメーションを開始したときにイベントが発生します。 |
loginscreen:opened | Login Screen Element<div class="login-screen"> | イベントは、Login Screen のオープニングアニメーションが完了した後に発生します。 |
loginscreen:close | Login Screen Element<div class="login-screen"> | ログイン画面が閉じるアニメーションを開始すると、イベントが発生します。 |
loginscreen:closed | Login Screen Element<div class="login-screen"> | ログイン画面が閉じるアニメーションが完了するとイベントが発生する |
アプリとLogin Screenインスタンスのイベント
Login Screenインスタンスは、selfインスタンスとappインスタンスの両方にイベントを発行します。アプリインスタンスのイベントは、同じ名前でプレフィックスが loginScreen
となっています。
Event | Arguments | Target | Description |
---|---|---|---|
open | loginScreen | loginScreen | イベントは、Login Screenがオープニングアニメーションを開始したときに発生します。イベントハンドラは引数として、ログイン画面のインスタンスを受け取ります。 |
loginScreenOpen | loginScreen | app | |
opened | loginScreen | loginScreen | イベントは、Login Screenがそのオープニングアニメーションを完了した後にトリガされます。As an argument event handler receives login screen instance |
loginScreenOpened | loginScreen | app | |
close | loginScreen | loginScreen | ログイン画面が閉じるアニメーションを開始するとイベントが発生します。As an argument event handler receives login screen instance |
loginScreenClose | loginScreen | app | |
closed | loginScreen | loginScreen | ログイン画面の終了アニメーションが終了するとイベントが発生します。As an argument event handler receives login screen instance |
loginScreenClosed | loginScreen | app | |
beforeDestroy | loginScreen | loginScreen | ログイン画面のインスタンスが破棄される直前にイベントが発生します。As an argument event handler receive login screen instance |
loginScreenBeforeDestroy | loginScreen | app |
埋め込み型ログイン画面
ログイン画面は、ページやポップアップに埋め込むこともできます。ページの中にログイン画面を埋め込む例を見てみましょう。
<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>