フロントの人の雑多メモ

【jQuery】スムーススクロールの位置が最初だけおかしいときの原因と対処法

【jQuery】スムーススクロールの位置が最初だけおかしいときの原因と対処法

ページ内リンクをアニメーションさせるjQueryのスムーススクロール、ページを開いた1回目だけ、位置がおかしいことがありました。

これ、LazyLoadが原因でした。

目次

方法① JSを書き換える

JSのスムーススクロールの記述を、LazyLoad対応版に置き換えましょう。

$('a[href^=#]').click(function(e) {
	var href = $(this).attr("href");
	var target = $(href == "#" || href == "" ? 'html' : href);
	var position = target.offset().top - headerHight;

	$.when(
		$("html, body").animate({
			scrollTop: position
		}, 400, "swing"),
		e.preventDefault(),
	).done(function() {
		var diff = target.offset().top - headerHight;
		if (diff === position) {
		} else {
			$("html, body").animate({
				scrollTop: diff
			}, 10, "swing");
		}
	});
});

参考 : https://teratail.com/questions/274473

これができない場合は、次を。

方法② imgにwidthとheight属性を書く

方法①ができない場合は、LazyLoadを設定しているimgタグにwidthとheight属性を書きましょう。

このように

<img data-src="img.jpg" width="100" height="100" class="lazyload">

すると、画像が読み込まれる前でも高さが計算されるため、位置のズレも生まれないはずです。

コメント

内容を確認の上、個人情報などは省いて掲載させていただきます。

お名前・メールアドレスも入力する

メールで返信がほしい場合に入力してください。

頂いた個人情報は開示しません。返信のためだけに利用いたします。

直接送信されます。確認の上、「送信」してください。

お役に立てましたら応援をお待ちしております!
頂いた応援は子育てに活用させていただきます。

OFUSEで応援を送る


または以下のボタンからなにか買って応援 (PR)

Amazon

楽天市場

Yahoo!ショッピング

Amazonのアソシエイトとして「けん」は適格販売により収入を得ています。

シェア

Twitterでシェア Facebookでシェア LINEでシェア はてなブックマークでシェア

お役に立てましたら応援をお待ちしております!
頂いた応援は子育てに活用させていただきます。

OFUSEで応援を送る