スムーズスクロール『jQuery』の実装
1. はじめに
今回、実装したスムーズスクロールはページないリンクをクリックして移動するアニメーションです。
自身が理解するために作成しましたので見た目はダサイです。
2. 読み込むファイルを記述
今回はこの様な感じでファイル、フォルダ分けしてあります。
cssファイルと今回はアイコンを使用しましたので『fontawesome』のCDNも記述します。
<!-- index.html -->
<head>
<link rel="stylesheet" media="(min-width: 640px)" href="css/style.css">
<link rel="stylesheet" href="css/reset.css">
<!-- アイコン -->
<link href="https://use.fontawesome.com/releases/v5.6.1/css/all.css" rel="stylesheet">
</head>
jQuery読み込みも記述します。
<!-- index.html -->
<script src="https://code.jquery.com/jquery-2.2.0.min.js" type="text/javascript"></script>
<script src="js/script.js" ></script>
</body>
3. HTMLを記述
<!-- ヘッダーエリア -->
<div class = "header">
<!-- グループ1 -->
<a href="#group-1" class = "link-title">
<i class="far fa-user">
グループ1
</i>
</a>
<!-- グループ2 -->
<a href="#group-2" class = "link-title">
<i class="fas fa-user">
グループ2
</i>
</a>
<!-- グループ3 -->
<a href="#group-3" class = "link-title">
<i class="fas fa-user-friends">
グループ3
</i>
</a>
<!-- グループ4 -->
<a href="#group-4" class = "link-title">
<i class="fas fa-users">
グループ4
</i>
</a>
</div>
<!-- コンテンツエリア -->
<div class = "content">
<div id="group-1" class = "inline-content">
テキスト1
</div>
<div id="group-2" class = "inline-content">
テキスト2
</div>
<div id="group-3" class = "inline-content">
テキスト3
</div>
<div id="group-4" class = "inline-content">
テキスト4
</div>
</div>
4. CSSを記述
/* style.css */
.header{
height: 100px;
width: 100vw;
background-color: white;
box-shadow: 0 0 5px rgba(162, 162, 162, 0.571);
display: flex;
justify-content: space-between;
position: fixed;
top: 0;
}
.link-title{
height: 100%;
width: 200px;
line-height: 100px;
text-align: center;
color: #000;
font-size: 20px;
text-decoration: none;
}
.link-title:hover{
opacity: 0.7;
}
.content{
height: 100%;
width: 100%;
margin-top: 120px;
}
.inline-content{
height: 500px;
width: 90%;
box-shadow: 0 0 5px rgba(162, 162, 162, 0.571);
margin: 20px auto;
}
5. JSを記述
//script.js
$(function(){
// #で始まるアンカーをクリックした場合に処理
$('a[href^="#"]').click(function() {
// スクロールの速度
var just = 105; // 移動先を上にずらす
var speed = 400; // ミリ秒で記述
var href = $(this).attr("href"); // アンカーの値取得
var target = $(href == "#" || href == "" ? 'html' : href); // 移動先を取得
var position = target.offset().top - just; // 移動先を数値で取得
// スムーススクロール
$('body,html').animate({
scrollTop: position
},speed, 'swing');
return false;
});
});
・『a[href^="#"]』は、# で始まるリンクをクリックした時の意味。
・var just = 105; は、今回『top』から105pxずらすために定義する。
・var href = $(this).attr("href");は、『href』の『HTML要素の属性』を取得する。
・var target = $(href == "#" || href == "" ? 'html' : href); は、『var href』で取得した値が『#』か『空白』だったら’html’をそれ以外だったら取得した'href'属性の値を格納する。
・・var position = target.offset().top - just; はtarget.offset()は、位置の値を取得する。’html’の場合’0’を取得、、、'href'だったらページのリンク先の位置『例えば'360'など』を取得する。
・scrollTop: position は、『scrollTop:』はスクロール量「位置」を取得する。
・ 'swing' は、アニメーション→『http://semooh.jp/jquery/cont/doc/easing/ 』
・return false; //falseを返すことでURLに影響を与えない。
6. 最後に
この様になれば完成です。
今回、実践した物は『GitHub』にて自身の備忘録、復習用として載せていますので気になる方は見てみてください。
GitHub : my-github.com