🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

jQuery

jQueryは、JavaScriptライブラリのひとつです。 簡単な記述で、JavaScriptコードを実行できるように設計されています。 2006年1月に、ジョン・レシグが発表しました。 jQueryは独特の記述法を用いており、機能のほとんどは「$関数」や「jQueryオブジェクト」のメソッドとして定義されています。

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

Q&A

解決済

1回答

1112閲覧

ページ内スクロールに「少し上にもどる」挙動の実装方法

退会済みユーザー

退会済みユーザー

総合スコア0

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

jQuery

jQueryは、JavaScriptライブラリのひとつです。 簡単な記述で、JavaScriptコードを実行できるように設計されています。 2006年1月に、ジョン・レシグが発表しました。 jQueryは独特の記述法を用いており、機能のほとんどは「$関数」や「jQueryオブジェクト」のメソッドとして定義されています。

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

0グッド

1クリップ

投稿2020/12/19 08:04

ページ内のいわゆる「スムーススクロール」の実装はできましたが、
リンク先のサイトにある、「この記事の目次」をクリックすると、
行き過ぎた分だけ少しもどる挙動の実装が分かりません。

できれば、jqueryを読み込まず実装できれば良いのですが、
jqueryでも構いません。アドバイス等、教えて頂けないでしょうか?

よろしくお願い致します。

https://www.sejuku.net/blog/23639

javascript

1const smoothScrollTrigger = document.querySelectorAll('a[href^="#"]'); 2 for (let i = 0; i < smoothScrollTrigger.length; i++){ 3 smoothScrollTrigger[i].addEventListener('click', (e) => { 4 e.preventDefault(); 5 let href = smoothScrollTrigger[i].getAttribute('href'); 6 let targetElement = document.getElementById(href.replace('#', '')); 7 const rect = targetElement.getBoundingClientRect().top; 8 const offset = window.pageYOffset; 9 const gap = 0; 10 const target = rect + offset - gap; 11 window.scrollTo({ 12 top: target, 13 behavior: 'smooth', 14 }); 15 }); 16}

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

例えばこんなやり方があります。

html

1<!DOCTYPE html> 2<html lang="ja"> 3 4<head> 5 <meta charset="UTF-8"> 6 <meta name="viewport" content="width=device-width, initial-scale=1.0"> 7 <title>Document</title> 8 <style> 9 #div1, 10 #div2, 11 #div3 { 12 width: 100%; 13 height: 100vh; 14 } 15 16 #div2 { 17 background-color: black 18 } 19 20 #div3 { 21 background-color: red; 22 } 23 </style> 24</head> 25 26<body> 27 <div id="div1"> 28 <button>スクロール</button> 29 </div> 30 <div id="div2"></div> 31 <div id="div3"></div> 32 <script> 33 const btn = document.getElementsByTagName("button")[0]; 34 const div2 = document.getElementById("div2"); 35 36 btn.addEventListener("click", () => { 37 const scrollPoint1 = div2.getBoundingClientRect().top + 300; 38 const scrollPoint2 = div2.getBoundingClientRect().top; 39 scrollTo({ 40 top: scrollPoint1, 41 behavior: 'smooth', 42 }); 43 setTimeout(() => { 44 scrollTo({ 45 top: scrollPoint2, 46 behavior: 'smooth', 47 }); 48 }, 1000); 49 50 }); 51 </script> 52</body> 53 54</html>

投稿2020/12/19 09:23

Jon_do

総合スコア1373

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2020/12/19 23:38

ありがとうございます。 実際に挙動を確認できました。 大変、参考になります。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.36%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問