更新ボタンの横にスピナーを実装する

説明

WordPressの管理画面ではAJAXを使って何らかの処理を行う際、数秒間の空き時間にアイコンがクルクル回る「スピナー」を表示しているところがある。今作っているプラグインでこの「スピナー」を使いたくなったので、実装方法を調べてみた。

「スピナー」の実体

まずは「スピナー」を表示しているページとして、「クラシックエディター」の更新ウィジェットがある。

更新ボタンの横でクルクル

「更新」ボタンを押し、ブラウザの開発者向け機能を使って「スピナー」を表示中のHTMLコードを確認してみた(以下は便宜上タブなどを除外)。

<div id="publishing-action">
<span class="spinner is-active"></span>
input name="original_publish" type="hidden" id="original_publish" value="更新">
<input name="save" type="submit" class="button button-primary button-large" id="publish" value="更新">
</div>

これによると、「スピナー」の実態はspan要素だった。通常時はspinnerクラスが指定され、アイコンが回転している状態ではis-activeクラスが追加されていた。

2つのクラスのスタイルは、/wp-admin/css/common.cssにて次のように定義されている。

.spinner {
	background: url(../images/spinner.gif) no-repeat;
	background-size: 20px 20px;
	display: inline-block;
	visibility: hidden;
	float: right;
	vertical-align: middle;
	opacity: 0.7;
	filter: alpha(opacity=70);
	width: 20px;
	height: 20px;
	margin: 4px 10px 0;
}

.spinner.is-active,
.loading-content .spinner {
	visibility: visible;
}

spinnerクラスは背景画像にアニメーションGIFが指定され標準では非表示。これをis-activeクラスを追加することで背景画像が表示される仕組みになっている。

実装してみた

さっそく「スピナー」を表示したいところにspan要素を追加。ここではid属性値として'update-spinner'を指定している。

<span id="update-spinner" class="spinner"></span>

ボタンをクリックした際のJavaScriptコードは次のような感じ。AJAXリクエストの前にis-activeクラスを追加し、レスポンスが返ってきたらis-activeクラスを削除している。

$( '#update-spinner' ).addClass( 'is-active' );

var params = {
	action: ajax_action,
	_ajax_nonce: ajax_nonce,
	_wp_http_referer: http_referer,
	param: param,
};
$.post( ajaxurl, params, function( response ) {

	// レスポンスを処理

}, 'json' )
.always( function ( data ) {
	$( '#update-spinner' ).removeClass( 'is-active' );
} );

管理画面向けの場合は/wp-admin/css/common.cssは読み込まれているので、ほかに手間はいらない。「スピナー」の実装はとてもお手軽のようだ。


最終更新 : 2019年05月14日 10:20

お勧め

wp_insert_user(2019年5月29日 更新)

mixed wp_insert_user( mixed $userdata )
ユーザーを登録する。

fetch_feed(2018年5月27日 更新)

mixed fetch_feed( mixed $url )
RSSまたはAtom形式のフィードデータを読み込む。

is_tag(2018年5月27日 更新)

bool is_tag( [ mixed $slug = '' ] )
要求されているページが、タグアーカイブページか調べる。

esc_js(2019年1月24日 更新)

string esc_js( string $text )
文字列をインラインJavaScript向けにエスケープ処理する。

wp_list_pages(2015年4月28日 更新)

string wp_list_pages( [ mixed $args = '' ] )
固定ページを一覧表示する。