質問をすることでしか得られない、回答やアドバイスがある。

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

新規登録して質問してみよう
ただいま回答率
85.48%
JavaScript

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

jQuery

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

Q&A

2回答

1426閲覧

location.hrefでスムーズスクロールは可能でしょうか。

shingosuchin

総合スコア24

JavaScript

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

jQuery

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

0グッド

0クリップ

投稿2017/09/11 10:14

表題の通り、location.hrefでスムーズスクロールは可能でしょうか。

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

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

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

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

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

kei344

2017/09/11 12:00

もう少し具体的に記述されたほうが良いです。
guest

回答2

0

scroll-behavior プロパティがあります。
まだWDですが、複数の実装があります。
https://developer.mozilla.org/ja/docs/Web/CSS/scroll-behavior
https://www.w3.org/TR/cssom-view-1/#propdef-scroll-behavior

CSS

1html { 2 overflow-y: auto; 3} 4 5body { 6 height: 100vh; 7 overflow-y: auto; 8 scroll-behavior: smooth; 9}

JavaScript

1location.href = '#hoge';

投稿2017/09/14 07:36

x_x

総合スコア13749

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

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

x_x

2017/09/14 07:44

Chromeにおいて、"Smooth Scrolling"か、"Enable experimental web platform features"フラグを立てなければいけないという情報がありますが、手元のChromeでは"Enable experimental web platform features"を無効、"Smooth Scrolling"をデフォルトで動作しました。
guest

0

location.hrefだけではスムーススクロールはできないので
素直にjQueryやその他のアニメーションライブラリを使用するか、自前で用意するしかありません。

jQueryを使用しないピュアなJavaScriptでスムーススクロールを実装するには
以下のコードを追加します(拾い物ですが…)

JavaScript

1function scrollToY(scrollTargetY = 0, speed = 2000, easing = 'easeOutSine') { 2 // scrollTargetY: 目標とする要素のページ全体におけるy座標 3 // speed: アニメーションの速さ 4 // easing: イージング 5 const scrollY = window.scrollY || document.documentElement.scrollTop; 6 let currentTime = 0; 7 const time = Math.max(.1, Math.min(Math.abs(scrollY - scrollTargetY) / speed, .8)); 8 // easing equations from https://github.com/danro/easing-js/blob/master/easing.js 9 const easingEquations = { 10 easeOutSine: function (pos) { 11 return Math.sin(pos * (Math.PI / 2)); 12 }, 13 easeInOutSine: function (pos) { 14 return (-0.5 * (Math.cos(Math.PI * pos) - 1)); 15 }, 16 easeInOutQuint: function (pos) { 17 if ((pos /= 0.5) < 1) { 18 return 0.5 * Math.pow(pos, 5); 19 } 20 return 0.5 * (Math.pow((pos - 2), 5) + 2); 21 } 22 }; 23 // アニメーション関数 24 +function tick() { 25 currentTime += 1 / 60; 26 const p = currentTime / time; 27 const t = easingEquations[easing](p); 28 if (p < 1) { 29 requestAnimationFrame(tick); 30 window.scrollTo(0, scrollY + ((scrollTargetY - scrollY) * t)); 31 } else { 32 window.scrollTo(0, scrollTargetY); 33 } 34 }(); 35}

以下のようにすれば動きます。

JavaScript

1const sample = document.getElementById('sample'); 2const sampleOffsetTop = sample.getBoundingClientRect().top + window.scrollY; 3scrollToY(sampleOffsetTop, 3000, 'easeInOutSine');

ちなみに、+function() { /* ごにょごにょ */ }();は即時関数です。

補足
Chrome, Firefoxで動作確認済み。
IE, Edgeは確認してません。

質問者さんの意図が少しばかり汲み取れませんでしたので、勢いで投稿してしまいました…
私の考えていた回答とは違う!って場合はご指摘ください。

投稿2017/09/13 04:00

編集2017/09/13 05:12
amaoto4949

総合スコア13

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問