今回はページ内リンクでスムーズに移動するテクニックを紹介します。
wordpressではjQueryを読み込んでいるので、jQueryで動くものはライブラリを使用します。
ページ内リンクとは?
目次などを実装しているサイトが増えてきています。その目次の項目をクリックした際に、ページ内でその位置まで移動できるリンクがページ内リンクです。
実現に必要なお約束
wordpressで、初期から読み込まれるjQueryをそのまま応用して実現できる形を目指します。
jQueryの後に読み込むJavaScript
<script> //スムーズスクロール jQuery(function(){ // #で始まるアンカーをクリックした場合に処理 jQuery('a[href^=#]').click(function() { // スクロールの速度 var speed = 400; // ミリ秒 // アンカーの値取得 var href= jQuery(this).attr("href"); // 移動先を取得 var target = jQuery(href == "#" || href == "" ? 'html' : href); // 移動先を数値で取得 var position = target.offset().top; // スムーススクロール jQuery('body,html').animate({scrollTop:position}, speed, 'swing'); return false; }); }); </script>
このように書くことで、スムースな動きを実行できます。
スクロールのスピードは「speed」を変更すれば変更できます。また、最後に「false」を返すことで、URLに影響を与えないようにしています。
jQueryのアニメタグを使用しています。WordPressだと「$」が競合するので「$」の部分を「jQuery」に変更しましょう。
実際に書いてみよう
実際にソースコードを書いてみましょう。
html
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <script type='text/javascript' src='https://soricity.com/wpress/wp-includes/js/jquery/jquery.js'></script> <!-- #リンクのスムーズスクロール --> <script> //スムーズスクロール jQuery(function(){ // #で始まるアンカーをクリックした場合に処理 jQuery('a[href^=#]').click(function() { // スクロールの速度 var speed = 400; // ミリ秒 // アンカーの値取得 var href= jQuery(this).attr("href"); // 移動先を取得 var target = jQuery(href == "#" || href == "" ? 'html' : href); // 移動先を数値で取得 var position = target.offset().top; // スムーススクロール jQuery('body,html').animate({scrollTop:position}, speed, 'swing'); return false; }); }); </script> <title>jQuery</title> <style type="text/css"> div{ height: 1000px; margin-bottom: 4rem; } </style> </head> <body> <h1 id="index">目次</h1> <ul> <li><a href="#1">sample1</a></li> <li><a href="#2">sample2</a></li> <li><a href="#3">sample3</a></li> <li><a href="#4">sample4</a></li> </ul> <div id="1"> <h2>sample1</h2> <a class="button" href="#index">Topへ</a> </div> <div id="2"> <h2>sample2</h2> <a class="button" href="#index">Topへ</a> </div> <div id="3"> <h2>sample3</h2> <a class="button" href="#index">Topへ</a> </div> <div id="4"> <h2>sample4</h2> <a class="button" href="#index">Topへ</a> </div> </body> </html>
実行結果を確認してみましょう。
スクロールの速度を変えることでカスタマイズできるので、いろいろ試してみましょう。