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

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

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

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

jQuery

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

Q&A

1回答

2963閲覧

可視範囲に入った時のアニメーション、リロード時の挙動について

退会済みユーザー

退会済みユーザー

総合スコア0

CSS3

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

jQuery

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

0グッド

0クリップ

投稿2019/06/24 16:15

編集2019/06/25 02:25

効率の良いコードが書けず悩んでいます。

現在の実装内容
①window.addEventListener('scroll', でスクロールを検知
②可視範囲に入ったらアニメーションさせたいオブジェクトに.activeクラスを付与、アニメーションが実行される
③リロード時は$('html,body').animate({ scrollTop: 0 }, '1');でページトップへ

この実装方法だと、例えばページの中間でリロードした場合③が実行されますがその際に意図せず①が実行されてしまい、要はページをリロードしたのにページ中間までのアニメーションはすでに実行後の状態で表示されています。

もちろん力技で③→①→②→removeClass('active')のようにすれば希望の形にはなりますが付与して削除してなんだかなぁと思います、、

そもそもの現状の実装方法が悪いのでしょうか。
お力をお貸しください。よろしくお願いします。

追記(コード例)

lang

1<div id="a" class="fade-in">〜</div>

lang

1#a{ 2 opacity: 0; 3 transition: opacity 1s ease; 4 &.active{ 5 opacity: 1; 6 } 7}

jquery

1$(function(){ 2 // リロード時ページトップへ 3 $('html,body').animate({ scrollTop: 0 }, '1'); 4}); 5 6$(window).on('load', function(){ 7 // スクロールイベント 8 window.addEventListener('scroll', function(e){ 9 // まだactiveになってない要素に対して 10 $('.fade-in').not('.active').each(function(){ 11 12 var pos = $(this).offset().top; 13 var scrollPos = $(window).scrollTop(); 14 var wh = $(window).height(); 15 16 // 任意の位置までスクロールしたらactiveクラスを付与 17 if (scrollPos > pos - wh + wh/5){ 18 $(this).addClass('active'); 19 } 20 }); 21 }); 22}

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

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

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

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

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

m.ts10806

2019/06/25 01:47

もう少し全体の流れが分かるコードを例示していただけませんか? (HTML,CSSもあるとなお良いです)
退会済みユーザー

退会済みユーザー

2019/06/25 02:10

わかりにくくて申し訳ありませんでした。 以下コードになります。 // html // アニメーションさせたい要素にfade-inクラスを付与しておく <div id="a" class="fade-in">〜</div> // scss #a{ opacity: 0; transition: opacity 1s ease; &.active{ opacity: 1; } } // js $(function(){ // リロード時ページトップへ $('html,body').animate({ scrollTop: 0 }, '1'); }); $(window).on('load', function(){ // スクロールイベント window.addEventListener('scroll', function(e){ // まだactiveになってない要素に対して $('.fade-in').not('.active').each(function(){ var pos = $(this).offset().top; var scrollPos = $(window).scrollTop(); var wh = $(window).height(); // 任意の位置までスクロールしたらactiveクラスを付与 if (scrollPos > pos - wh + wh/5){ $(this).addClass('active'); } }); }); } 自分なりに書いたものでして、あくまで参考になります。 要はやりたいこととしては、リロード時ページトップに移動して、きちんとアニメーションを動作させたいです。 よろしくお願い致します。
m.ts10806

2019/06/25 02:11 編集

質問は編集できるので質問本文に追記してください(こちらのコメント欄はデフォルト非表示です) コード部分はマークダウン利用してくださいね。 https://teratail.com/help#about-markdown
退会済みユーザー

退会済みユーザー

2019/06/25 02:27 編集

マークダウンを教えてくださりありがとうございました。 またひとつteratailが使いやすくなりました。
guest

回答1

0

リロード時スクロール処理をやめればよいのでは?

javascript

1$(window).scrollTop($('body').offset().top);

投稿2019/06/25 02:15

yambejp

総合スコア114747

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

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

退会済みユーザー

退会済みユーザー

2019/06/25 02:58

ご回答頂きありがとうございます。 まさにこういうコードを探していて早速試してみたのですが、なぜか上手く行かなかったです、、 デバッグで動かすと一度ちゃんとトップに移動するのですが、jquery-3.4.1.min.js通過中になぜか元の位置に戻ってしまいます。。 もう少し調べてみます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.49%

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

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

質問する

関連した質問