WordPress のテーマ TwentyFourteen のカスタマイズ記事です。
TwentyFourteen のカスタマイズで :hover を使いクリック (およびタップ) 時に色を変えたりしているのですが、スマホのブラウザで「戻る」を押すと色が戻らない (押されたままの状態) になるというバグがあります。
状況がわかりづらいと思うので下記にそのスクリーンショットを掲載します。
タイトルをクリックしてページ遷移

ブラウザの「戻る」で前回のページを表示

このように色が変わったままで、リロードされない限り色が戻りません。iPhone しか持っていないので確認していませんが、Android でもこうなる様子。
調べても根本解決というのがないっぽくて、対処方法としては「CSS で hover 時の処理を変更」か javascrpt で何とかするという方法になるみたいです。
ただ、CSS を見直すのは面倒なので今回は javascript で何とかしてみようと思います。
スポンサーリンク
hover 時の動作を制御する処理を追加
今回は下記ページで紹介されているコードをそのまま使わせていただきました。
上記のページではコードとともに細かい解説がされていますので必読です。
TwentyFourteen に読み込ませる javascript は、下記のコードを「touch.js」というファイル名で保存しておきます。保存先は TwentyFourteen 子テーマ内に「js」ディレクトリを作ってそこに保存します。
(function ($) {
var linkTouchStart = function(){
thisAnchor = $(this);
touchPos = thisAnchor.offset().top;
moveCheck = function(){
nowPos = thisAnchor.offset().top;
if(touchPos == nowPos){
thisAnchor.addClass("hover");
}
}
setTimeout(moveCheck,100);
}
var linkTouchEnd = function(){
thisAnchor = $(this);
hoverRemove = function(){
thisAnchor.removeClass("hover");
}
setTimeout(hoverRemove,500);
}
$(document).on('touchstart mousedown','a',linkTouchStart);
$(document).on('touchend mouseup','a',linkTouchEnd);
})(jQuery);
マウス操作時の処理も入っていますが、スマホ操作時は「指が触れたら」、「指が離れたら」という感じで動作します。通常は「指が離れたら」動作をするようなので hover 時の動作が遅くなるようです。
保存後は、TwentyFourteen でこのコードを読み込むように設定してあげます。設定は子テーマ内の functions.php で行います。(functions.php はなければ作成)
if ( ! is_admin() ) {
function deregister_script() {
wp_deregister_script( 'jquery' );
wp_deregister_script( 'jquery-migrate' );
}
function register_script() {
$jsdir = get_stylesheet_directory_uri();
wp_register_script(
'jquery',
'//ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js',
false,
'1.10.2',
true
);
wp_register_script(
'jquery-migrate',
'//cdnjs.cloudflare.com/ajax/libs/jquery-migrate/1.2.1/jquery-migrate.min.js',
array( 'jquery' ),
'1.2.1',
true
);
wp_register_script(
'touch',
"$jsdir/js/touch.js",
array( 'jquery' ),
'1.0',
true
);
}
function add_script() {
deregister_script();
register_script();
wp_enqueue_script( 'jquery' );
wp_enqueue_script( 'jquery-migrate' );
wp_enqueue_script( 'touch' );
}
add_action( 'wp_enqueue_scripts', 'add_script' );
}
今回は初編集だったのでこのようにしてみました。
親テーマから呼ばれている jquery, jquery-migrate は一度取り消して CDN 経由にしています。
後はスマホから動作確認をして問題なければ OK です。
実の所、これを実装しても「戻る」直後は色が戻っていないのですが、何かしらの動作 (どこかをタッチ) すると色が戻るので大分良くなった感じです。
簡単でしたが「TwentyFourteenでスマホ表示のhoverが戻らない問題を解消する」は以上になります。