\お米食べろ!/
どうも、今更ながらSteamのセールで天穂のサクナヒメを買って米を生産しているDJよろずやです。
田んぼの様子が気になって下手に探索に行けません。
最近映画を見に行くことが度々あるのですが、先日見た「 映画大好きポンポさん 」が神作品すぎるので、是非とも皆さんにも見てほしいです。
絶対円盤買います。なんならもう1回映画館で見ようと思っています。
ストーリー、キャラデザ、音楽、演出。全てにおいて良作です。
多くは語らないので、まずは見てほしいですね。
※この記事が公開される頃には上映終わってるだろうけども。
閑話休題
今回も、前回に引き続きJavascript(jQuery)シリーズとなります。
前回の記事はこちら。
それではさっそく行ってみましょう。
はい、拍手👏。
月刊JAVASCRIPT Vol.2
今回は
メニューリンク押下時にセクションへの自動スクロール&メニューを閉じる
に関してゆるーく説明していきます。
全体の動きはこうです。
メニューリンク押下時にメニューを閉じる
$(function () {
// class[headerNav_item]の子要素の[a]をクリックしたとき
$('.headerNav_item > a').on('click',function () {
// もしclass[l-header]がclass[l-header-active]を持っているなら
if ($('.l-header').hasClass('l-header-active')) {
// class[l-header]からclass[l-header-active]を削除する
$('.l-header').removeClass('l-header-active');
// 要素[body]からclass[body-menuOpen]を削除する
$('body').removeClass('body-menuOpen');
}
});
});
いたってシンプルですね。
第1回の時は、ハンバーガーメニューの「三」をクリックしたときに、ヘッダーとbodyにclassを付与していましたが、今回は逆にメニューリンクをクリックしたら、class[l-header]と要素[body]からそれぞれclassを削除するだけです。
メニューリンク押下時にセクションへの自動スクロール
$(function () {
// 要素[a(リンク先が#(アンカーリンクの時))]をクリックしたとき
$('a[href^="#"]').click(function () {
// 変数speedに400ミリ秒を代入
var speed = 400;
// 変数hrefに$('a[href^="#"]')で取得した内容の属性の中身を取得して代入
var href = $(this).attr('href');
// 変数targetにhrefが#の時と空の時は('html')が、それ以外は変数(href)を代入
var target = $(href == '#' || href == '' ? 'html' : href);
// 変数positionに変数targetの左上の起点から、指定された要素までの距離の-64pxした距離を代入
var position = target.offset().top - 64;
//要素[body,html]は400ミリ秒のスピードで変数positionの位置まで、swingアニメーションでスクロールする
$('body,html').animate({scrollTop:position}, speed, 'swing');
// 処理を中断。リンク先に飛ばされる可能性を防ぐために記述。
return false;
});
});
これまたいたってシンプル。
スクロール系は大体同じ事書くことが多いので、覚えていて損はないですね。
簡単に言うと、メニューリンクをクリックしたら、指定されたセクションまでスクロールしてねと書いてるだけです。
おわりに
今回はほんと簡単な内容になります。
いくつか下層ページがあるサイトなら、わざわざメニューを閉じなくてもいいのですが、最近はシングルレイアウトのサイトも増えているため、メニューリンクをクリックしたときは、メニューが閉じないと困るということがあります。
そんな時はぜひともこのコードを使ってみてくださいね。
それではまた👋