Webサイトで特に見ていただきたいところなどは、
文字を大きくしたり、
囲ったり、
アンダーラインを引いたりと、いろいろな工夫をされていると思います。
今回はアンダーラインを、スクロールでその箇所が表示されたときにアニメーションさせる方法をご紹介したいと思います。
アニメーションアンダーラインの種類
下記のように、色やスピードを簡単に変更できます。
下線青で、3秒でアニメーション下線デフォルトの#ffdc00色で、1秒でアニメーション
また、もう少し手を加えれば、下線を引きたい文字にも装飾を施すことができます。
[ani2 sec=0.5]点線付きの文字色赤で、下線デフォルトの#FFCCFF色で、0.5秒でアニメーション[/ani2]
必要な編集箇所
アニメーションアンダーラインを使うには、以下3か所での設定が最低限必要となります。
場所 | 内容 |
function.php | 下線を定義する |
javascript | アニメーションを定義する |
投稿記事 | 使いたい場所でアニメーションアンダーラインの関数を呼び出す |
function.phpを編集しよう
必ず事前にバックアップを取ってから編集作業をしましょう。
function.phpを編集するには、以下のいずれかを行います。
①外観>テーマエディターからテーマのための関数 (functions.php)を開き、追記する
もしくは、
②プラグイン「Snippets」>「Add New」から追記をします。
プラグイン「Snippets」を入れていない方もいらっしゃると思いますので、
今回はテーマエディターからの追記方法を記載します。
function.php編集手順
①外観>テーマエディターを開く。
②テーマのための関数 (functions.php)を開く。
③以下を追記し、保存する。
function ani_under($atts,$content = null){
extract(shortcode_atts(array(
'color' => (string)'#ffdc00',
'sec' => '2'
), $atts));
$sc = 'color: #333;text-decoration: none;background: -webkit-linear-gradient(transparent 60%,'.(string)$color.' 40%);background: -o-linear-gradient(transparent 60%,'.(string)$color.' 40%);background: linear-gradient(transparent 60%,'.(string)$color.' 40%);background-repeat: no-repeat;background-size: 0% 100%;transition: background-size '.$sec.'s;';
return ''. $content .'';
}
add_shortcode('ani', 'ani_under');
コードの意味は下部でご説明します。
JavaScriptを編集しよう
プラグインの「カスタムCSS&JS」を使って、JavaScriptを登録したいと思います。
JavaScript登録手順
①カスタムCSS&JS>カスタムJSの追加をクリックする。
②Code欄に以下を記入し、保存する。
jQuery(function(){ jQuery(window).scroll(function(){ var windowHeight =jQuery(window).height(); var windowTop =jQuery(window).scrollTop(); jQuery('.underz').each(function(){ var objectImage =jQuery(this).offset().top; if(windowTop > objectImage - windowHeight*3/5){jQuery(this).css('background-size','100% 100%')}; }); }); });
コードの意味は下部でご説明します。
投稿記事に使おう
登録したショートコードを呼び出し、使いましょう。
投稿画面で下部コードを書くと、
↓ 下部のように表示されます。
下線青で、3秒でアニメーション
投稿画面で下部コードを書くと、
[ani sec=1]下線デフォルトの#ffdc00色で、1秒でアニメーション[/ani]
↓ 下部のように表示されます。
下線デフォルトの#ffdc00色で、1秒でアニメーションクイックタグに追加しよう
繰返し使うことが想定されるため、
テキスト編集画面で表示されるクイックタグに追加したいと思います。
ここでは、AddQuicktagなどの有名なプラグインは利用せず、
function.phpに追記したいと思います。
上記同様、以下2つのいずれかの方法で登録が可能ですが、
すでにクイックタグを追加していた場合、
同じ関数名は定義できないため、既存のクイックタグの追加関数の中に定義するようにしてください。
①外観>テーマエディターからテーマのための関数 (functions.php)を開き、追記する
もしくは、
②プラグイン「Snippets」>「Add New」から追記をします。
function.php編集手順
①外観>テーマエディターを開く。
②テーマのための関数 (functions.php)を開く。
③以下を追記し、保存する。
function add_button_quicktag() { ?> } add_action(‘admin_print_footer_scripts’, ‘add_button_quicktag’);
編集内容を確認しよう
使えるようになったところで、
追加したコードの内容を1つずつ確認したいと思います。
function.php(アニメーションアンダーライン用)
function ani_under($atts,$content = null){ 〜〜〜 }
2つの引数を必要とするani_underという関数を定義しています。
1つ目の引数「$atts」でコードに入力された引数を取得します。
2つ目の引数「$content = null」で、コードに囲まれた項目を取得(デフォルトでは空の状態)します。
extract(shortcode_atts(array( 'color' => (string)'#ffdc00', 'sec' => '2' ), $atts));
extract関数は、array配列を別々に扱うことができるようにする関数です。
extract関数を使わないと、
array配列は電車のように、電車全体を考えなければいけません。
これを電車全体を意識せず、車両単体で扱うことができるようにするのがextract関数です。
array( 'color' => (string)'#ffdc00', 'sec' => '2' )
array配列に2つを入れています。
1つ目は色で、指定がなければデフォルトの■#ffdc00が適用されます。
2つ目は秒数で、線を引くための時間です。
$sc = 'color: #333; text-decoration: none; background: -webkit-linear-gradient(transparent 60%,'.(string)$color.' 40%); background: -o-linear-gradient(transparent 60%,'.(string)$color.' 40%); background: linear-gradient(transparent 60%,'.(string)$color.' 40%); background-repeat: no-repeat; background-size: 0% 100%; transition: background-size '.$sec.'s;';
下線を引く文字列に関する設定をします。
- color: #333;
色は■#333の少し暗い灰色にしています。
- text-decoration: none;
名前のとおり、文字列を装飾します。
ここでは「none」を設定していますので、装飾はしていません。
# | 内容 |
none | 装飾なし |
underline | 下線を引く |
overline | 文字列に上に線を引く |
line-through | 取り消し線を引く |
solid | 実線を引く |
double | 二重線を引く |
dotted | 点線を引く |
dashed | 破線を引く |
wavy | 波線を引く |
画面表示 | コード |
線無し
下線
上線
取り消し線
下線・実線
下線・二重線
下線・点線
下線・破線
下線・波線
下線・赤
|
|
background: -webkit-linear-gradient(transparent 60%,'.(string)$color.' 40%); background: -o-linear-gradient(transparent 60%,'.(string)$color.' 40%); background: linear-gradient(transparent 60%,'.(string)$color.' 40%);
線形(一方向)グラデーションを設定しています。
土のブラウザでも同じように表示させるように、3行設定しています。
60%までは透明にし、残り40%は指定した色にしています。
- background-repeat: no-repeat;
繰返し表示はさせません。
- background-size: 0% 100%;
背景画像の寸法を設定します。
背景領域に対する割合を幅、高さの順で指定します。
- transition: background-size ‘.$sec.’s;’;
アニメーションを持続させる時間を設定します。
- return ‘<span class=”underz” style=”‘.$sc.'”>’. $content .'</span>’;
spanタグに指定した文字列、秒数を設定して返します。
- add_shortcode(‘ani’, ‘ani_under’);
定義したani_under関数を、aniというショートコードで定義しています。
これにより、投稿画面でaniのショートコードを使うと、
ani_underの関数が呼び出されることになります。
JavaScript
-
- jQuery(window).scroll(function(){
- ~~~
});
ブラウザのウィンドウがスクロールしたときに処理をさせます。
-
- var windowHeight =jQuery(window).height();
- var windowTop =jQuery(window).scrollTop();
ウィンドウの高さと、
要素の上から、スクロールしたときに最も上に表示されているコンテンツまでの距離を取得し、
windowHeightと、windowTop という変数に入れています。
-
- jQuery(‘.underz’).each(function(){
- ~~~
- });
「underz」の名前がついたクラスの処理を行います。
-
- var objectImage =jQuery(this).offset().top;
指定した要素のtopの位置を取得して変数に格納しています。
-
- if(windowTop > objectImage – windowHeight*3/5){
- jQuery(this).css(‘background-size’,’100% 100%’)};
- });
以下の条件が成り立った場合に、背景画像の寸法を100%のサイズにします。
条件)コンテンツまでの距離 > 指定した要素の位置-ウィンドウの高さ×3÷5
function.php(クイックタグ用)
- function add_button_quicktag() {
- ~~~
- }
クイックタグボタンを追加する関数です。
# | 内容 |
ani_underLine | クイックタグに登録する関数名 |
アニメ下線 | クイックタグに表示するボタン名 |
[ani color=#ffdc00 sec=3]下線内容[/ani] | クイックタグを1回押したときに投稿画面に表示される内容 |
もし、上記を、次のように記載すると、
クイックタグを1回押したときは、開始タグの[ani color=#ffdc00 sec=3]だけが表示され、
2回目には、閉じタグの[/ani]が表示されます。
- QTags.addButton(‘ani_underLine’,’アニメ下線’,’[ani color=#ffdc00 sec=3]’,’[/ani]’);
- add_action(‘admin_print_footer_scripts’, ‘add_button_quicktag’);
「admin_print_footer_scripts」がフックされたときに、
add_button_quicktagの関数が呼ばれ、処理されます。
簡単に言えば、関数を呼び出す処理タイミングを設定しています。
まとめ
今回の方法は、でびきんさんのブログを参考にさせていただいております。
アニメーションアンダーラインの実装方法はそのままに、
ショートコード部分は、プラグインを使わずに登録しています。
このアニメーションアンダーラインは、Cocoon以外でも実装できますよ✨