この記事は最後に更新してから1年以上経過しています。

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

説明

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

お勧め

is_email(2017年11月28日 更新)

mixed is_email( string $email [, bool $deprecated = false ] )
文字列がメールアドレス形式か調べる。

get_option(2019年11月14日 更新)

mixed get_option( string $setting [ , mixed $default = false ] )
パラメータ$settingで指定されたオプションの値を取得する。

has_filter(2018年5月27日 更新)

mixed has_filter( $tag, [ mixed $function_to_check = false ] )
WordPressタグにフィルターが登録されているか調べる。

make_clickable(2012年4月26日 更新)

string make_clickable( $text )
テキスト中のURLをリンクに変換する。

get_bookmark(2011年6月10日 更新)

mixed get_bookmark( mixed $bookmark [ , string $output = OBJECT [ , string $filter = 'raw' ] ] )
リンク情報を取得する。