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

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

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

CSS(Cascading Style Sheet)の第3版です。CSS3と略されることが多いです。色やデザインを柔軟に変更することが可能になります。

JavaScript

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

Q&A

解決済

1回答

4255閲覧

JavaScriptで「topへ戻るボタン」のアニメーションを実装したい

退会済みユーザー

退会済みユーザー

総合スコア0

CSS3

CSS(Cascading Style Sheet)の第3版です。CSS3と略されることが多いです。色やデザインを柔軟に変更することが可能になります。

JavaScript

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

0グッド

0クリップ

投稿2016/12/07 18:23

編集2016/12/07 18:26

Reactとmobxを使用しています(勉強中)
参考:スクロールするとページトップへ戻るボタンがフェードして表示
上のサイトのような「ページの一番上に移動するボタン」をjQueryを使わずにjsで実装したいです。

#やりたいこと
jQueryを使わずに

・ページの一定の高さ分下へスクロールした時に「topへ戻る」ボタンを表示
・ボタンを押すとページの一番上に移動
一番上へ移動するときに「画面がパッと切り替わって上に移動する」のではなく
「上へスクロールするアニメーションで移動」させたい(リンク先のサイト参照)

#やったこと
【全体の流れ】
下へスクロールして画面をクリック(main.js)

クリックがトリガーとなりextendObservableにtrue/falseを保存(main.js)

保存されたtrue/falseを受け取りクラス名のon/offを切り替え(scroll.js)

クラス名のon/offで、offの時にdisplay:noneを設定

//main.js // ↓ topページ <div className='unique-container-top' id='#top-scroll' onClick={this.ScrollBool}> hello world! </div> // ↓ スクロール量>500のときrextendObservableのTopButtonDisplayにtrue(またはfalse)を保存 ScrollBool () { const DomId = document.getElementById('#top-scroll') const ScrollY = window.pageYOffset if (ScrollY > 500) { scroll.TopButtonDisplay = true; // 500px分下にスクロールした → ボタン表示 } else { scroll.TopButtonDisplay = false; // スクロールしてない → ボタン非表示(display : none) } }
//scroll.js // ↓ 「topに戻る」ボタン ・ クラス名のon/offの切り替え <div className={'unique-container-scroll' + (scroll.TopButtonDisplay ? ' on' : ' off')} onClick={this.ScrollTop}> <a className='item-button'>TOP</a> </div> // ↓ ページの一番上に移動 ScrollTop(){ window.scrollTo(0,0); }
//extendObservable.js // ↓ scroll.jsのtrue/falseを保存 const scroll = new class { constructor () { extendObservable(this, { TopButtonDisplay: '', // ここにmain.jsからのtrue/falseが入る }); } }

scroll.jsの(scroll.TopButtonDisplay ? ' on' : ' off')でクラス名のon/offを切り替え
cssでoffの場合にdiplay : noneにしています。

main.jsでonClick={this.ScrollBool}としているのは、
本当は「スクロールされたことを感知してextendObservableにtrue/falseを保存」したいのですが、
jsで「スクロールを感知」する方法が分からないので、クリックで代用している状態です。

#質問
jQueryを使わずに

①jsで「スクロールされたことを感知して関数を実行」するにはどうすれば良いですか?

②ページの一番上に移動するとき、window.scrollTo(0,0);を使うと画面がパッと切り替わって移動するのを
「上へスクロールするアニメーションで移動」させるにはどうすれば良いですか?

特に②を解決したいです。CSS3を使うのはOKです。
jQueryを使わないという縛りは単に「jsで実装したい」という動機だけです。

jsは勉強中なので、できれば易しく教えてください。
文章やコードにわかりにくい部分があれば修正します。
回答よろしくお願いします。

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

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

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

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

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

guest

回答1

0

ベストアンサー

①jsで「スクロールされたことを感知して関数を実行」するにはどうすれば良いですか?

「onscroll」というものがあります。他にも「addEventListener」にて実装することもできます。
それ以外にもスクロール量を計算して行う他、色々な方法があります。
まずはご自身で適切なものを見極めて下さい。

②ページの一番上に移動するとき、window.scrollTo(0,0);を使うと画面がパッと切り替わって移動するのを

「上へスクロールするアニメーションで移動」させるにはどうすれば良いですか?

スクロール(移動処理)を「setInterval」を用いて少しづつ繰り返し処理を行えば良いかと。(イメージ的にはパラパラ漫画ですね。)
今回の処理は最終的には止めなくては行けないと思いますので、止める時は「clearInterval」を使ってください。

jQueryを使わないという縛りは単に「jsで実装したい」という動機だけです。

そのお気持ちは大変すばらしいと思います。
ですが、jqueryが使われている理由には様々なものがあります。
実装が簡素に出来るだけでなく、ブラウザ間の問題の他多くの要因があります。
それら全てを網羅したjavascriptでの実装には少々手間がかかります。
面倒かもしれませんが、頑張って下さい。

投稿2016/12/09 04:28

nobinobi

総合スコア199

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

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

退会済みユーザー

退会済みユーザー

2017/04/12 05:52

回答有難うございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問