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

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

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

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

HTML

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

Q&A

解決済

1回答

767閲覧

無限スクロールを実装したい

One_of_Arthur

総合スコア82

JavaScript

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

HTML

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

0グッド

0クリップ

投稿2021/09/03 09:18

前提・実現したいこと

下にスクロールしていくと、次の要素が表示されるようにしたいです。
ドキュメント自身がスクロール対象です。
すると、「window.onscroll」を使えば簡単にできるらしいのですが・・・

発生している問題・エラーメッセージ

ググりながら色々と弄り回しているうちに、一度はできたのですが、後から順に表示したい要素が一度に出てきてしまうので、
ひとつずつ表示させたくて、更に弄り回しているうちに、どこをどうやったか分からなくなってしまいました。
最も中心に参照していたページは、このページで、「ドキュメント内でスクロールする場合」です。

一旦、コードを最初の方の状態に戻してみましたが、どこをどうやったか思い出せません。
アドバイスをください。

該当のソースコード

javascript

1 var targetElement; // 対象とする要素 2 3 window.onscroll = function(){ 4 var scrollTop = document.documentElement.scrollTop || document.body.scrollTop; 5 6 // ウィンドウのビューポートの下端の位置 7 var bottom = scrollTop + document.documentElement.clientHeight; 8 9 // 対象とする要素の上端の位置 10 var top = targetElement.offsetTop; 11 12 if( top < bottom ) 13 { 14 // 可視範囲に入ったときの処理 15 leftHtmlIndex += 1; 16 if(leftHtmlIndex < leftHtmlCount){ 17 displayEmbedcodeHtml(leftHtmlIndex); 18 }else{ 19 document.getElementById('scrollBottomMessage').innerHTML = '最後まで表示しました。'; 20 } 21 } 22 }

html

1<div id="scrollTopMessage"> 2</div> 3<div id='tweetBackList'> 4</div> 5<div id="scrollBottomMessage"> 6</div>

「leftHtmlIndex」は、初期状態で表示される要素で配列の「1」からスタートしてます。(コードの大半は関係ないと思いますので省略してます)
「displayEmbedcodeHtml」が要素を書き出していて配列の番号を増やすことによって次の要素を書き出しています。
要素は、「<div id='tweetBackList'>」の子要素として追加されていきます。
あとから現れる要素の高さは不揃いです。

試したこと

色々と弄り回してみたのですが、どこをどうやったら完成に近づいたのか分からなくなってしまいました。
すみません。_| ̄|○

補足情報(FW/ツールのバージョンなど)

サーバー:ロリポップ
ブラウザ:Firefox 91.0.2 (64 ビット)
クライアント:macOS Mojave 10.14.6

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

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

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

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

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

yambejp

2021/09/03 11:03

無限スクロールの仕様をきちんと説明してください 通常無限スクロールというのは次のページを非同期で受け取り続ける ことで永続的にスクロールする仕組みです
One_of_Arthur

2021/09/03 23:36

先の文章と一部重複しますけれど、以下のように考えています。 ・Twitterのタイムラインみたいなものを想定しています。 ・下にスクロールしていくと、次の要素が表示されるようにしたいです。 ・要素を一度に表示するのではなく、ひとつずつスクロールに合わせて表示したいです。 ・「無限」と言っても、要素に限りがあり全て表示されたら、それ以上スクロールは不要です。 よろしくお願いします。
guest

回答1

0

自己解決

自己解決しました。

javascript

1 window.onscroll = function(){ 2 var targetElement = document.getElementById('tweetBack-' + String(leftHtmlIndex)); // 対象とする要素 3 4 var scrollTop = document.documentElement.scrollTop || document.body.scrollTop; 5 6 7 // ウィンドウのビューポートの下端の位置 8 var bottom = scrollTop + document.documentElement.clientHeight; 9 10 11 // 対象とする要素の上端の位置 12 var top = targetElement.offsetTop; 13 14 15 if( top < bottom ) 16 { 17 // 可視範囲に入ったときの処理 18 leftHtmlIndex += 1; 19 if(leftHtmlIndex < leftHtmlCount){ 20 displayEmbedcodeHtml(leftHtmlIndex); 21 }else{ 22 document.getElementById('scrollBottomMessage').innerHTML = '最後まで表示しました。'; 23 } 24 } 25 }

対象とする要素の代入を「.onscroll」時の関数の中に入れ、その時点で表示されている最後の要素を「targetElement」に代入するようにしました。

投稿2021/09/04 00:38

One_of_Arthur

総合スコア82

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問