{"id":2494,"date":"2024-10-04T17:03:14","date_gmt":"2024-10-04T16:03:14","guid":{"rendered":"https:\/\/codeflarelimited.com\/blog\/?p=2494"},"modified":"2024-10-04T17:40:18","modified_gmt":"2024-10-04T16:40:18","slug":"infinite-scroll-with-javascript-and-an-api","status":"publish","type":"post","link":"https:\/\/codeflarelimited.com\/blog\/infinite-scroll-with-javascript-and-an-api\/","title":{"rendered":"How to Implement Infinite Scroll with JavaScript and APIs"},"content":{"rendered":"\n<p>Infinite scroll is a popular design pattern that allows users to continuously load more content as they reach the end of a page, rather than having to click to go to another page. This smooth and seamless experience can be particularly useful for blogs, social media feeds, or image galleries. In this article, we\u2019ll walk through building a basic infinite scroll with JavaScript and an API.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity is-style-wide\" \/>\n\n\n\n<h3 class=\"wp-block-heading\">Why Use Infinite Scroll?<\/h3>\n\n\n\n<p>Infinite scroll enhances user engagement by loading content in a continuous stream. When implemented properly, infinite scroll can improve both the user experience and retention by keeping visitors engaged with fresh content.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity is-style-wide\" \/>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>Setting Up Infinite Scroll<\/strong><\/h3>\n\n\n\n<p>We\u2019ll use JavaScript to monitor when the user scrolls to the bottom of the page and then trigger a function that fetches additional content from an API. Here\u2019s what you\u2019ll need:<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>HTML Structure<\/strong> to hold the content.<\/li>\n\n\n\n<li><strong>CSS<\/strong> for styling the loading indicator.<\/li>\n\n\n\n<li><strong>JavaScript<\/strong> to fetch data and manage the scroll event.<\/li>\n<\/ol>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity is-style-wide\" \/>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>Step 1: HTML Structure<\/strong><\/h3>\n\n\n\n<p>Let\u2019s start by creating a simple HTML structure for displaying content and a loading indicator:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"javascript\" class=\"language-javascript\">&lt;!DOCTYPE html&gt;\n&lt;html lang=\"en\"&gt;\n&lt;head&gt;\n  &lt;meta charset=\"UTF-8\"&gt;\n  &lt;meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\"&gt;\n  &lt;title&gt;Infinite Scroll Demo&lt;\/title&gt;\n  &lt;link rel=\"stylesheet\" href=\"styles.css\"&gt;\n&lt;\/head&gt;\n&lt;body&gt;\n  &lt;div id=\"content-container\"&gt;&lt;\/div&gt;\n  &lt;div id=\"loading\"&gt;Loading...&lt;\/div&gt;\n  \n  &lt;script src=\"script.js\"&gt;&lt;\/script&gt;\n&lt;\/body&gt;\n&lt;\/html&gt;\n<\/code><\/pre>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>#content-container<\/strong>: This div will hold all the content fetched from the API.<\/li>\n\n\n\n<li><strong>#loading<\/strong>: This div appears at the bottom of the page while new data is being fetched.<\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity is-style-wide\" \/>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>Step 2: CSS for Styling<\/strong><\/h3>\n\n\n\n<p>Here\u2019s some basic styling for the container and loading indicator:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"css\" class=\"language-css\">\/* styles.css *\/\n\nbody {\n  font-family: Arial, sans-serif;\n  margin: 0;\n  padding: 0;\n}\n\n#content-container {\n  max-width: 600px;\n  margin: 20px auto;\n  padding: 10px;\n}\n\n#loading {\n  text-align: center;\n  padding: 20px;\n  font-size: 1.2em;\n  display: none; \/* Initially hidden *\/\n}\n<\/code><\/pre>\n\n\n\n<p>The <code>#loading<\/code> div will display when we\u2019re fetching new data.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity is-style-wide\" \/>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>Step 3: Fetch Data with JavaScript<\/strong><\/h3>\n\n\n\n<p>Let\u2019s set up JavaScript to fetch data from a placeholder API like JSONPlaceholder. We\u2019ll create a function called <code>fetchData()<\/code> that retrieves data and appends it to the content container.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"javascript\" class=\"language-javascript\">\/\/ script.js\n\nlet page = 1; \/\/ Start on page 1\n\nasync function fetchData() {\n  document.getElementById('loading').style.display = 'block';\n  \n  try {\n    const response = await fetch(`https:\/\/jsonplaceholder.typicode.com\/posts?_page=${page}&amp;_limit=5`);\n    const data = await response.json();\n    \n    data.forEach(item =&gt; {\n      const post = document.createElement('div');\n      post.classList.add('post');\n      post.innerHTML = `\n        &lt;h2&gt;${item.title}&lt;\/h2&gt;\n        &lt;p&gt;${item.body}&lt;\/p&gt;\n      `;\n      document.getElementById('content-container').appendChild(post);\n    });\n\n    page++; \/\/ Increase page count after loading data\n  } catch (error) {\n    console.error('Error fetching data:', error);\n  }\n\n  document.getElementById('loading').style.display = 'none';\n}\n<\/code><\/pre>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>fetchData()<\/strong>: Fetches a limited number of posts (5 here) from the JSONPlaceholder API for each page.<\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity is-style-wide\" \/>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>Step 4: Adding Infinite Scroll<\/strong><\/h3>\n\n\n\n<p>Now, we\u2019ll add an event listener to detect when the user scrolls near the bottom of the page. When that happens, <code>fetchData()<\/code> will be called to load additional data.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"javascript\" class=\"language-javascript\">\/\/ Infinite scroll event listener\nwindow.addEventListener('scroll', () =&gt; {\n  const { scrollTop, scrollHeight, clientHeight } = document.documentElement;\n\n  if (scrollTop + clientHeight &gt;= scrollHeight - 5) {\n    fetchData();\n  }\n});\n\n\/\/ Initial fetch for first set of data\nfetchData();\n<\/code><\/pre>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>scrollTop<\/strong>: How far the user has scrolled.<\/li>\n\n\n\n<li><strong>clientHeight<\/strong>: Visible height of the viewport.<\/li>\n\n\n\n<li><strong>scrollHeight<\/strong>: Total height of the page.<\/li>\n<\/ul>\n\n\n\n<p>When <code>scrollTop + clientHeight<\/code> is close to <code>scrollHeight<\/code>, it\u2019s time to load more data. We then call <code>fetchData()<\/code> again, which loads new posts.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity is-style-wide\" \/>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>Step 5: Add Loading Indicator<\/strong><\/h3>\n\n\n\n<p>To improve the user experience, we\u2019ve included a loading indicator. This will show up while new data is being fetched:<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>We set <code>#loading<\/code> to <code>display: block<\/code> when data fetch begins.<\/li>\n\n\n\n<li>After the data is appended, we hide <code>#loading<\/code> again.<\/li>\n<\/ol>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity is-style-wide\" \/>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>Complete Code<\/strong><\/h3>\n\n\n\n<p><strong>HTML<\/strong>:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"markup\" class=\"language-markup\">&lt;!DOCTYPE html&gt;\n&lt;html lang=\"en\"&gt;\n&lt;head&gt;\n  &lt;meta charset=\"UTF-8\"&gt;\n  &lt;meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\"&gt;\n  &lt;title&gt;Infinite Scroll Demo&lt;\/title&gt;\n  &lt;link rel=\"stylesheet\" href=\"styles.css\"&gt;\n&lt;\/head&gt;\n&lt;body&gt;\n  &lt;div id=\"content-container\"&gt;&lt;\/div&gt;\n  &lt;div id=\"loading\"&gt;Loading...&lt;\/div&gt;\n  \n  &lt;script src=\"script.js\"&gt;&lt;\/script&gt;\n&lt;\/body&gt;\n&lt;\/html&gt;\n<\/code><\/pre>\n\n\n\n<p><strong>CSS<\/strong>:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"css\" class=\"language-css\">\/* styles.css *\/\n\nbody {\n  font-family: Arial, sans-serif;\n  margin: 0;\n  padding: 0;\n}\n\n#content-container {\n  max-width: 600px;\n  margin: 20px auto;\n  padding: 10px;\n}\n\n#loading {\n  text-align: center;\n  padding: 20px;\n  font-size: 1.2em;\n  display: none; \/* Initially hidden *\/\n}\n\n.post {\n  margin-bottom: 20px;\n  padding: 15px;\n  border: 1px solid #ddd;\n  border-radius: 8px;\n  box-shadow: 0px 0px 5px rgba(0, 0, 0, 0.1);\n}\n\n.post h2 {\n  margin: 0 0 10px;\n}\n\n.post p {\n  margin: 0;\n}\n<\/code><\/pre>\n\n\n\n<p><strong>JavaScript<\/strong>:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code class=\"\">\/\/ script.js\n\nlet page = 1; \/\/ Start on page 1\n\nasync function fetchData() {\n  document.getElementById('loading').style.display = 'block';\n  \n  try {\n    const response = await fetch(`https:\/\/jsonplaceholder.typicode.com\/posts?_page=${page}&amp;_limit=5`);\n    const data = await response.json();\n    \n    data.forEach(item =&gt; {\n      const post = document.createElement('div');\n      post.classList.add('post');\n      post.innerHTML = `\n        &lt;h2&gt;${item.title}&lt;\/h2&gt;\n        &lt;p&gt;${item.body}&lt;\/p&gt;\n      `;\n      document.getElementById('content-container').appendChild(post);\n    });\n\n    page++; \/\/ Increase page count after loading data\n  } catch (error) {\n    console.error('Error fetching data:', error);\n  }\n\n  document.getElementById('loading').style.display = 'none';\n}\n\n\/\/ Infinite scroll event listener\nwindow.addEventListener('scroll', () =&gt; {\n  const { scrollTop, scrollHeight, clientHeight } = document.documentElement;\n\n  if (scrollTop + clientHeight &gt;= scrollHeight - 5) {\n    fetchData();\n  }\n});\n\n\/\/ Initial fetch for first set of data\nfetchData();\n<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">Wrapping Up<\/h3>\n\n\n\n<p>You\u2019ve just implemented an infinite scroll feature using JavaScript and an API. By using this approach, you can build a seamless, engaging user experience that loads more content only when needed. Try experimenting with the number of posts loaded, the API endpoint, or even styling to make it more unique.<\/p>\n\n\n\n<p><a href=\"https:\/\/codeflarelimited.com\/blog\/javascript-console-methods\/\">Top 5 JavaScript console Methods to simplify debugging<\/a><\/p>\n\n\n\n<p><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Infinite scroll is a popular design pattern that allows users to continuously load more content as they reach<\/p>\n","protected":false},"author":3,"featured_media":2497,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_jetpack_memberships_contains_paid_content":false,"footnotes":""},"categories":[11],"tags":[99],"class_list":["post-2494","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-javascript","tag-software-development"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.4 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>infinite scroll with JavaScript and an API<\/title>\n<meta name=\"description\" content=\"Learn to implement infinite scroll with JavaScript and an API in this guide, creating a seamless user experience by dynamically loading ...\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/codeflarelimited.com\/blog\/infinite-scroll-with-javascript-and-an-api\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"infinite scroll with JavaScript and an API\" \/>\n<meta property=\"og:description\" content=\"Learn to implement infinite scroll with JavaScript and an API in this guide, creating a seamless user experience by dynamically loading ...\" \/>\n<meta property=\"og:url\" content=\"https:\/\/codeflarelimited.com\/blog\/infinite-scroll-with-javascript-and-an-api\/\" \/>\n<meta property=\"article:published_time\" content=\"2024-10-04T16:03:14+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2024-10-04T16:40:18+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/codeflarelimited.com\/blog\/wp-content\/uploads\/2024\/10\/IMG-20241004-WA0035.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"1080\" \/>\n\t<meta property=\"og:image:height\" content=\"607\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"Kene Samuel\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"TechArticle\",\"@id\":\"https:\\\/\\\/codeflarelimited.com\\\/blog\\\/infinite-scroll-with-javascript-and-an-api\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/codeflarelimited.com\\\/blog\\\/infinite-scroll-with-javascript-and-an-api\\\/\"},\"author\":{\"name\":\"Kene Samuel\",\"@id\":\"https:\\\/\\\/codeflarelimited.com\\\/blog\\\/#\\\/schema\\\/person\\\/c501609bab46c16807eb32106074f206\"},\"headline\":\"How to Implement Infinite Scroll with JavaScript and APIs\",\"datePublished\":\"2024-10-04T16:03:14+00:00\",\"dateModified\":\"2024-10-04T16:40:18+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/codeflarelimited.com\\\/blog\\\/infinite-scroll-with-javascript-and-an-api\\\/\"},\"wordCount\":469,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\\\/\\\/codeflarelimited.com\\\/blog\\\/#organization\"},\"image\":{\"@id\":\"https:\\\/\\\/codeflarelimited.com\\\/blog\\\/infinite-scroll-with-javascript-and-an-api\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/codeflarelimited.com\\\/blog\\\/wp-content\\\/uploads\\\/2024\\\/10\\\/IMG-20241004-WA0035.jpg\",\"keywords\":[\"software development\"],\"articleSection\":[\"javascript\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/codeflarelimited.com\\\/blog\\\/infinite-scroll-with-javascript-and-an-api\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/codeflarelimited.com\\\/blog\\\/infinite-scroll-with-javascript-and-an-api\\\/\",\"url\":\"https:\\\/\\\/codeflarelimited.com\\\/blog\\\/infinite-scroll-with-javascript-and-an-api\\\/\",\"name\":\"infinite scroll with JavaScript and an API\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/codeflarelimited.com\\\/blog\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/codeflarelimited.com\\\/blog\\\/infinite-scroll-with-javascript-and-an-api\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/codeflarelimited.com\\\/blog\\\/infinite-scroll-with-javascript-and-an-api\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/codeflarelimited.com\\\/blog\\\/wp-content\\\/uploads\\\/2024\\\/10\\\/IMG-20241004-WA0035.jpg\",\"datePublished\":\"2024-10-04T16:03:14+00:00\",\"dateModified\":\"2024-10-04T16:40:18+00:00\",\"description\":\"Learn to implement infinite scroll with JavaScript and an API in this guide, creating a seamless user experience by dynamically loading ...\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/codeflarelimited.com\\\/blog\\\/infinite-scroll-with-javascript-and-an-api\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/codeflarelimited.com\\\/blog\\\/infinite-scroll-with-javascript-and-an-api\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/codeflarelimited.com\\\/blog\\\/infinite-scroll-with-javascript-and-an-api\\\/#primaryimage\",\"url\":\"https:\\\/\\\/codeflarelimited.com\\\/blog\\\/wp-content\\\/uploads\\\/2024\\\/10\\\/IMG-20241004-WA0035.jpg\",\"contentUrl\":\"https:\\\/\\\/codeflarelimited.com\\\/blog\\\/wp-content\\\/uploads\\\/2024\\\/10\\\/IMG-20241004-WA0035.jpg\",\"width\":1080,\"height\":607},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/codeflarelimited.com\\\/blog\\\/infinite-scroll-with-javascript-and-an-api\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/codeflarelimited.com\\\/blog\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"javascript\",\"item\":\"https:\\\/\\\/codeflarelimited.com\\\/blog\\\/javascript\\\/\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"How to Implement Infinite Scroll with JavaScript and APIs\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/codeflarelimited.com\\\/blog\\\/#website\",\"url\":\"https:\\\/\\\/codeflarelimited.com\\\/blog\\\/\",\"name\":\"\",\"description\":\"Sustainable solutions\",\"publisher\":{\"@id\":\"https:\\\/\\\/codeflarelimited.com\\\/blog\\\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/codeflarelimited.com\\\/blog\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/codeflarelimited.com\\\/blog\\\/#organization\",\"name\":\"Codeflare Limited\",\"url\":\"https:\\\/\\\/codeflarelimited.com\\\/blog\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/codeflarelimited.com\\\/blog\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"https:\\\/\\\/codeflarelimited.com\\\/blog\\\/wp-content\\\/uploads\\\/2020\\\/11\\\/codeflare.png\",\"contentUrl\":\"https:\\\/\\\/codeflarelimited.com\\\/blog\\\/wp-content\\\/uploads\\\/2020\\\/11\\\/codeflare.png\",\"width\":1040,\"height\":263,\"caption\":\"Codeflare Limited\"},\"image\":{\"@id\":\"https:\\\/\\\/codeflarelimited.com\\\/blog\\\/#\\\/schema\\\/logo\\\/image\\\/\"}},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/codeflarelimited.com\\\/blog\\\/#\\\/schema\\\/person\\\/c501609bab46c16807eb32106074f206\",\"name\":\"Kene Samuel\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/3e1716cd715a5b5491e1f2da373b52f2f73aeb37d268baff34719116e386d848?s=96&d=mm&r=g\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/3e1716cd715a5b5491e1f2da373b52f2f73aeb37d268baff34719116e386d848?s=96&d=mm&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/3e1716cd715a5b5491e1f2da373b52f2f73aeb37d268baff34719116e386d848?s=96&d=mm&r=g\",\"caption\":\"Kene Samuel\"},\"url\":\"https:\\\/\\\/codeflarelimited.com\\\/blog\\\/author\\\/kene\\\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"infinite scroll with JavaScript and an API","description":"Learn to implement infinite scroll with JavaScript and an API in this guide, creating a seamless user experience by dynamically loading ...","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/codeflarelimited.com\/blog\/infinite-scroll-with-javascript-and-an-api\/","og_locale":"en_US","og_type":"article","og_title":"infinite scroll with JavaScript and an API","og_description":"Learn to implement infinite scroll with JavaScript and an API in this guide, creating a seamless user experience by dynamically loading ...","og_url":"https:\/\/codeflarelimited.com\/blog\/infinite-scroll-with-javascript-and-an-api\/","article_published_time":"2024-10-04T16:03:14+00:00","article_modified_time":"2024-10-04T16:40:18+00:00","og_image":[{"width":1080,"height":607,"url":"https:\/\/codeflarelimited.com\/blog\/wp-content\/uploads\/2024\/10\/IMG-20241004-WA0035.jpg","type":"image\/jpeg"}],"author":"Kene Samuel","twitter_card":"summary_large_image","schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"TechArticle","@id":"https:\/\/codeflarelimited.com\/blog\/infinite-scroll-with-javascript-and-an-api\/#article","isPartOf":{"@id":"https:\/\/codeflarelimited.com\/blog\/infinite-scroll-with-javascript-and-an-api\/"},"author":{"name":"Kene Samuel","@id":"https:\/\/codeflarelimited.com\/blog\/#\/schema\/person\/c501609bab46c16807eb32106074f206"},"headline":"How to Implement Infinite Scroll with JavaScript and APIs","datePublished":"2024-10-04T16:03:14+00:00","dateModified":"2024-10-04T16:40:18+00:00","mainEntityOfPage":{"@id":"https:\/\/codeflarelimited.com\/blog\/infinite-scroll-with-javascript-and-an-api\/"},"wordCount":469,"commentCount":0,"publisher":{"@id":"https:\/\/codeflarelimited.com\/blog\/#organization"},"image":{"@id":"https:\/\/codeflarelimited.com\/blog\/infinite-scroll-with-javascript-and-an-api\/#primaryimage"},"thumbnailUrl":"https:\/\/codeflarelimited.com\/blog\/wp-content\/uploads\/2024\/10\/IMG-20241004-WA0035.jpg","keywords":["software development"],"articleSection":["javascript"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/codeflarelimited.com\/blog\/infinite-scroll-with-javascript-and-an-api\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/codeflarelimited.com\/blog\/infinite-scroll-with-javascript-and-an-api\/","url":"https:\/\/codeflarelimited.com\/blog\/infinite-scroll-with-javascript-and-an-api\/","name":"infinite scroll with JavaScript and an API","isPartOf":{"@id":"https:\/\/codeflarelimited.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/codeflarelimited.com\/blog\/infinite-scroll-with-javascript-and-an-api\/#primaryimage"},"image":{"@id":"https:\/\/codeflarelimited.com\/blog\/infinite-scroll-with-javascript-and-an-api\/#primaryimage"},"thumbnailUrl":"https:\/\/codeflarelimited.com\/blog\/wp-content\/uploads\/2024\/10\/IMG-20241004-WA0035.jpg","datePublished":"2024-10-04T16:03:14+00:00","dateModified":"2024-10-04T16:40:18+00:00","description":"Learn to implement infinite scroll with JavaScript and an API in this guide, creating a seamless user experience by dynamically loading ...","breadcrumb":{"@id":"https:\/\/codeflarelimited.com\/blog\/infinite-scroll-with-javascript-and-an-api\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/codeflarelimited.com\/blog\/infinite-scroll-with-javascript-and-an-api\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/codeflarelimited.com\/blog\/infinite-scroll-with-javascript-and-an-api\/#primaryimage","url":"https:\/\/codeflarelimited.com\/blog\/wp-content\/uploads\/2024\/10\/IMG-20241004-WA0035.jpg","contentUrl":"https:\/\/codeflarelimited.com\/blog\/wp-content\/uploads\/2024\/10\/IMG-20241004-WA0035.jpg","width":1080,"height":607},{"@type":"BreadcrumbList","@id":"https:\/\/codeflarelimited.com\/blog\/infinite-scroll-with-javascript-and-an-api\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/codeflarelimited.com\/blog\/"},{"@type":"ListItem","position":2,"name":"javascript","item":"https:\/\/codeflarelimited.com\/blog\/javascript\/"},{"@type":"ListItem","position":3,"name":"How to Implement Infinite Scroll with JavaScript and APIs"}]},{"@type":"WebSite","@id":"https:\/\/codeflarelimited.com\/blog\/#website","url":"https:\/\/codeflarelimited.com\/blog\/","name":"","description":"Sustainable solutions","publisher":{"@id":"https:\/\/codeflarelimited.com\/blog\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/codeflarelimited.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/codeflarelimited.com\/blog\/#organization","name":"Codeflare Limited","url":"https:\/\/codeflarelimited.com\/blog\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/codeflarelimited.com\/blog\/#\/schema\/logo\/image\/","url":"https:\/\/codeflarelimited.com\/blog\/wp-content\/uploads\/2020\/11\/codeflare.png","contentUrl":"https:\/\/codeflarelimited.com\/blog\/wp-content\/uploads\/2020\/11\/codeflare.png","width":1040,"height":263,"caption":"Codeflare Limited"},"image":{"@id":"https:\/\/codeflarelimited.com\/blog\/#\/schema\/logo\/image\/"}},{"@type":"Person","@id":"https:\/\/codeflarelimited.com\/blog\/#\/schema\/person\/c501609bab46c16807eb32106074f206","name":"Kene Samuel","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/secure.gravatar.com\/avatar\/3e1716cd715a5b5491e1f2da373b52f2f73aeb37d268baff34719116e386d848?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/3e1716cd715a5b5491e1f2da373b52f2f73aeb37d268baff34719116e386d848?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/3e1716cd715a5b5491e1f2da373b52f2f73aeb37d268baff34719116e386d848?s=96&d=mm&r=g","caption":"Kene Samuel"},"url":"https:\/\/codeflarelimited.com\/blog\/author\/kene\/"}]}},"jetpack_featured_media_url":"https:\/\/codeflarelimited.com\/blog\/wp-content\/uploads\/2024\/10\/IMG-20241004-WA0035.jpg","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/codeflarelimited.com\/blog\/wp-json\/wp\/v2\/posts\/2494","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/codeflarelimited.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/codeflarelimited.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/codeflarelimited.com\/blog\/wp-json\/wp\/v2\/users\/3"}],"replies":[{"embeddable":true,"href":"https:\/\/codeflarelimited.com\/blog\/wp-json\/wp\/v2\/comments?post=2494"}],"version-history":[{"count":1,"href":"https:\/\/codeflarelimited.com\/blog\/wp-json\/wp\/v2\/posts\/2494\/revisions"}],"predecessor-version":[{"id":2495,"href":"https:\/\/codeflarelimited.com\/blog\/wp-json\/wp\/v2\/posts\/2494\/revisions\/2495"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/codeflarelimited.com\/blog\/wp-json\/wp\/v2\/media\/2497"}],"wp:attachment":[{"href":"https:\/\/codeflarelimited.com\/blog\/wp-json\/wp\/v2\/media?parent=2494"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/codeflarelimited.com\/blog\/wp-json\/wp\/v2\/categories?post=2494"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/codeflarelimited.com\/blog\/wp-json\/wp\/v2\/tags?post=2494"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}