亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

在Javascript中無限滾動,其中包含來自文件的數據

在Javascript中無限滾動,其中包含來自文件的數據

至尊寶的傳說 2022-09-02 16:14:57
我想用普通的Javascript做無限滾動。我看過幾個教程,但所有教程都從一些api中獲取一些隨機數據。我從教程中理解了代碼,但我不知道如何按順序獲取數據,而不是隨機的。我想做類似的事情:https://codepen.io/FlorinPop17/pen/RwwvKYJ 但我想使用本地文件中的數據。讓我們假設它是數據.js并且具有類似的代碼:data = [{}, {}]所以它是對象數組,讓我們假設對象的內容是這樣的:https://jsonplaceholder.typicode.com/posts/您將如何更改此代碼筆中的代碼以按順序逐個顯示帖子?我猜,函數getPost應該有參數“id”,每次調用這個函數時,參數都應該加1?但是怎么做呢?或者,也許我應該迭代數據.js并在每次迭代時檢查用戶是否滾動到底部?
查看完整描述

1 回答

?
繁華開滿天機

TA貢獻1816條經驗 獲得超4個贊

您只需更改函數即可使用包含所有可用帖子的內聯。當前偏移量保存在一個全局變量中,該變量每次調用都會增加,因此訂單將保持不變,并且不會多次顯示任何帖子。getPost()blog_datapost_offsetgetPost()


// all the blog entries that are available

const blog_data = [{

  title: "Blog Entry 1",

  body: "This is the example body text for entry 1."

},{

  title: "This is number two",

  body: "Also blog entry number 2 has some content."

},{

  title: "Blog entry three",

  body: "Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua."

},{

  title: "Blog entry four",

  body: "Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua."

},{

  title: "Blog entry five",

  body: "Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua."

},{

  title: "Blog entry six",

  body: "Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua."

}];


const container = document.getElementById('container');

const loading = document.querySelector('.loading');

let post_offset = 0;


getPost();

getPost();

getPost();


window.addEventListener('scroll', () => {

  const { scrollTop, scrollHeight, clientHeight } = document.documentElement;


  if(clientHeight + scrollTop >= scrollHeight - 5) {

    // show the loading animation

    showLoading();

  }

});


function showLoading() {

  if(post_offset < blog_data.length){

    loading.classList.add('show');


    // load more data

    setTimeout(getPost, 1000)

  }

  else{

    // end has been reached, no more posts available

  }

}


async function getPost() {

  if(post_offset < blog_data.length){

    addDataToDOM(blog_data[post_offset]);

    post_offset++;

  }

}


function addDataToDOM(data) {

  const postElement = document.createElement('div');

  postElement.classList.add('blog-post');

  postElement.innerHTML = `

    <h2 class="title">${data.title}</h2>

    <p class="text">${data.body}</p>

  `;

  container.appendChild(postElement);


  loading.classList.remove('show');

}

@import url('https://fonts.googleapis.com/css?family=Open+Sans:300,600&display=swap');


* {

  box-sizing: border-box;

}


body {

  background-color: #fafafa;

  font-family: 'Open Sans', sans-serif;

  padding-bottom: 100px;

}


.container {

  margin: 0 auto;

  max-width: 600px;

}


.blog-post {

  background-color: #fff;

  box-shadow: 0px 1px 2px rgba(50, 50, 50, .1), 0px 2px 4px rgba(60, 60, 60, 0.1);

  border-radius: 4px;

  padding: 40px;

  margin: 20px 0;

}


.title {  

  margin: 0;  

}


.text {

  color: #555;

  margin: 20px 0;

}


.loading {

  opacity: 0;

  display: flex;

  position: fixed;

  bottom: 50px;

  left: 50%;

  transform: translateX(-50%);

  transition: opacity .3s ease-in;

}


.loading.show {

  opacity: 1;

}


.ball {

  background-color: #777;

  border-radius: 50%;

  margin: 5px;

  height: 10px;

  width: 10px;

  animation: jump .5s ease-in infinite;

}


.ball:nth-of-type(2) {

  animation-delay: 0.1s;

}


.ball:nth-of-type(3) {

  animation-delay: 0.2s;

}


@keyframes jump {

  0%, 100% {

    transform: translateY(0);

  }


  50% {

    transform: translateY(-10px);

  }

}

<div class="container" id="container">

  <h1>Blog Posts</h1>

</div>


<div class="loading">

  <div class="ball"></div>

  <div class="ball"></div>

  <div class="ball"></div>

</div>


查看完整回答
反對 回復 2022-09-02
  • 1 回答
  • 0 關注
  • 83 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號