מבוא
בעת יצירת אתר אינטרנט או יישום אינטרנט, במיוחד אם הם כוללים הרבה תבנית תוכן (כגון רשת או רשימה של פריטים השייכים לקטגוריה) - זה בדרך כלל רעיון טוב מחלקים אותו לדפים כדי להפחית את מספר הפריטים המופיעים על המסך בבת אחת.
במאמר זה, נלמד כיצד ליישם עימוד בפרויקטי האינטרנט שלנו באמצעות וניל JavaScript מהיסוד.
לצורך מאמר זה, נביא את התוכן מ זֶה תגובת API לדוגמה. הוא מכיל 100 נקודות נתונים, אבל אנחנו נשתמש רק ב-30 ונציג 6 פוסטים על המסך שלנו בכל פעם.
תחילת העבודה
לפני שליפת כל הפוסטים הנדרשים מהממשק ה-API באמצעות Fetch API המובנה בדפדפנים, עלינו ליצור תחילה סימון HTML בסיסי שימולא באופן דינמי באמצעות הסקריפט שלנו מאוחר יותר:
<div class="container"> <div class="title-section"> <h1 class="title">Posts</h1> </div> <div class="posts-section"></div> <div class="pagination-section"> <ul class="pagination"> <li class="page-item prev"><a class="page-link" href="#">Previous</a></li> <li class="page-item next"><a class="page-link" href="#">Next</a></li> </ul> </div>
</div>
מביא פוסטים של REST API
כפי שהוזכר קודם, עימוד עוסק בפיצול תוכן לנתחים קטנים יותר. זה מחייב אותך להביא את הנתונים, להחליט מתי ואיך לפצל, לחשב את מספר העמודים, ואז להציג חלק מהם למשתמש. למרבה המזל - פונקציונליות עורפית בדרך כלל מטפלת בכמה המשימות הראשונות, ומחזירה את העמוד הרלוונטי, מספר הדפים הכולל והתוכן לעמוד.
הערה: בהתאם ל-API הספציפי שאיתו אתה עובד - ייתכן או לא תוכל לטעון תוצאות בעצלתיים. במידת האפשר - העדיפו תוצאות טעינה עצלות במקום לטעון את כולן מראש. רוב ממשקי ה-API המודרניים פועלים לפי שיטות המאפשרות לך להגדיר א limit
or page
לספור, ולהחזיר את המספר הכולל של הדפים שתוכל להציג למשתמש.
בואו נתחיל על ידי אחזור תחילה של כל הפוסטים שלנו, ולאחר מכן נתקן זאת כך שתשאיל רק כמה נקודות נתונים בכל עמוד:
const postsSection = document.querySelector(".posts-section"); const fetchPosts = async () => { const response = await fetch( "https://jsonplaceholder.typicode.com/posts" ); const posts = await response.json(); postsSection.innerHTML = ""; posts.forEach((post) => { postsSection.innerHTML += ` <div class="posts-card"> <div class="post-title"> <h2 class="post-title-text">${post.title}</h2> </div> <div class="post-body"> <p class="post-body-text"> ${post.body} </p> </div> </div> `; });
}; fetchPosts();
בואו נבחן במהירות את הקוד למעלה. קודם כל, התחלנו בהשגת ה div
אלמנט שבו נציג את כל התוכן שלנו דרך ה- class
שם שהקצנו ל- div
. לבסוף, כתבנו פונקציה לטיפול בפעולת האחזור.
ב fetchPosts()
הפונקציה, השתמשנו ב- תביא API כדי לאחזר הודעות מה JSON Placeholder posts API, ולאחר מכן אחסן את נתוני ה-JSON שאליהם מתייחסים posts
משתנה והשתמש ב- innerHTML
נכס כדי להוסיף כל פיסת תוכן ל- posts-section
על ידי לולאה דרכם.
בשלב זה, הבאנו בהצלחה את כל התוכן שלנו.
הערה: אתה יכול גם לאחזר את התוכן בשיטה אחרת, אך וודא שכל התוכן שלך נטען בדף זה לפני שאנו צוללים ליצירת העימוד.
נתחיל בהכרזה על שלושה משתנים שהם קריטיים ליישום עימוד בדף האינטרנט שלנו. הראשון הוא ה מספר הפוסטים שאנו רוצים להצהיר בכל עמוד, אז ה מספר העמוד הנוכחי (1
כברירת מחדל), ואת מספר הדפים הכולל.
הערה: בעת צריכת נתונים מ-startdard API ומסד נתונים, ה ספירה כוללת של הדפים או נקודות הנתונים מוחזר בדרך כלל. אם לא נקבל ספירת עמודים כוללת, ניתן לחשב אותה באמצעות ספירת האובייקטים הכוללת וגודל העמוד.
עבור מדריך זה ניתן את מספר הדפים הכולל מספר קבוע של 30
:
const numberPerPage = 6;
var pageNumber = 1;
var numberOfPages = 30;
בסעיף הקודם, הצגנו את כל הפוסטים בעמוד בודד, אבל אנחנו רוצים להציג רק שישה בכל פעם. לכן, קבענו את numberPerPage
ל 6
בו נשתמש כעת כדי להתאים את פעולת האחזור כך שהיא תוצג רק 6
הודעות.
זה תלוי ביישום הספציפי, אבל זה נוהג נפוץ לאפשר שימוש בפרמטרי שאילתה בעת שליפת תוצאות ממשקי API, המאפשרים לך לאחזר מסוים עמוד של התוצאות. לדוגמה, ה-API המדומה של REST שבו אנו משתמשים מאפשר את page
ו limit
פרמטרים המאפשרים לך לטעון רק אצווה שתציג בזמן נתון.
בדרך זו, אנו טוענים רק את הנתונים שאנו רוצים להציג למשתמש! לאחר מכן נוכל להביא מראש את העמוד הבא לזמן טעינה מהיר יותר, או להתענג על המהירות החישובית שהושגה רק על ידי טעינת הנתונים שיוצגו.
אנו נשתמש בפרמטרים אלה על ידי תיקון בקשת האחזור שלנו:
const fetchPosts = async (pageNumber) => { const response = await fetch( `https://jsonplaceholder.typicode.com/posts?_page=${pageNumber}&_limit=${numberPerPage}` ); const posts = await response.json(); postsSection.innerHTML = ""; posts.forEach((post) => { postsSection.innerHTML += ` <div class="posts-card"> <div class="post-title"> <h2 class="post-title-text">${post.title}</h2> </div> <div class="post-body"> <p class="post-body-text"> ${post.body} </p> </div> </div> `; });
}; fetchPosts();
בקוד לעיל, הוספנו את שני הפרמטרים לנקודת הקצה של ה-API שהם pageNumber
ו מספר פוסטים בעמוד מה שיעזור לנו לחלק את הפוסטים שלנו למספר עמודים ואז פוסטים אלו יכולים להיות מוצגים כעת על סמך מספר העמוד.
בנוסף, עברנו גם ב pageNumber
אל ה fetchPosts()
פונקציה כדי שנוכל לקרוא לפונקציה זו בכל פעם שהדף משתנה:
כעת נוסיף פונקציונליות לכפתורי הניווט בעמודים בתחתית העמוד שלנו ונאפשר להם להציג תוכן מתאים על סמך מספר העמוד.
נשים לב שבסימון היה לנו קטע שמציג את כפתורי העימוד:
<div class="pagination-section"> <ul class="pagination"> <li class="page-item prev"><a class="page-link" href="#">Previous</a></li> <li class="page-item next"><a class="page-link" href="#">Next</a></li> </ul>
</div>
עכשיו אנחנו הולכים להוסיף click
אירועים לכל כפתור כך שכאשר לוחצים עליהם, יופיע התוכן המיועד לאותו עמוד.
יישום ה- הקודם כפתור
ההיגיון כאן די פשוט. כל שעלינו לעשות הוא לאחזר את האלמנט המייצג את כפתור הקודם, תוסיף את ה click
מאזין אירועים אליו והצג את התוכן המתאים בעת לחיצה על הכפתור:
עיין במדריך המעשי והמעשי שלנו ללימוד Git, עם שיטות עבודה מומלצות, סטנדרטים מקובלים בתעשייה ודף רמאות כלול. תפסיק לגוגל פקודות Git ולמעשה ללמוד זה!
const prev = document.querySelector('.prev');
prev.addEventListener('click', (e) => { e.preventDefault(); if (pageNumber > 1) { pageNumber--; fetchPosts(pageNumber); }
});
לאחר הוספת א click
מאזין אירועים, בדקנו אם מספר העמוד הנוכחי גדול מ 1
בפונקציית ההתקשרות חזרה. אם המספר שווה או קטן ממנו 1
, פשוט נמשיך להציג את התוכן הנוכחי. אבל אם מספר העמוד הנוכחי גדול מ 1
אנו יכולים להפחית באופן חופשי את ערכו ולקרוא ל- fetchPosts(pageNumber)
פונקציה עם מספר העמוד החדש שהועבר בה כארגומנט, ולכן מציגה את התוכן של העמוד הקודם.
יישום ה- הַבָּא כפתור
ההיגיון כאן זהה לחלוטין לזה של קודם כפתור, עם מספר שינויים קלים בלבד. כמובן, נשחזר את רכיב הרשימה עם הכיתה next
במקום prev
. כמו כן, נבדוק אם מספר העמוד הנוכחי נמוך מ- מספר עמודים שאליו קבענו 30
ידנית מוקדם יותר. בסופו של דבר, נגדיל את מספר העמוד הנוכחי במקום להקטין אותו:
const next = document.querySelector(".next");
next.addEventListener("click", (e) => { e.preventDefault(); if (pageNumber < numberOfPages) { pageNumber++; fetchPosts(pageNumber); }
});
סיכום
פיצול תוכן לנתחים קטנים יותר וניתנים לניהול המוצגים בנפרד הוא חיוני בכל פעם שאתה מנסה להציג מסד נתונים או כל מקור נתונים אחר ביישום האינטרנט שלך.
במאמר זה, בדקנו כיצד ליישם עימוד עם JavaScript מאפס, ללא כל ספריות וכלים חיצוניים.
- הפצת תוכן ויחסי ציבור מופעל על ידי SEO. קבל הגברה היום.
- Platoblockchain. Web3 Metaverse Intelligence. ידע מוגבר. גישה כאן.
- מקור: https://stackabuse.com/pagination-in-vanilla-javascript/
- 1
- 100
- 11
- 7
- 9
- a
- יכול
- אודות
- מֵעַל
- הושג
- למעשה
- הוסיף
- ערני
- תעשיות
- כל ההודעות
- מאפשר
- ו
- API
- ממשקי API
- לְהוֹפִיעַ
- בקשה
- מתאים
- טענה
- מאמר
- שהוקצה
- בחזרה
- עורפי
- מבוסס
- בסיסי
- לפני
- החל
- גבול
- תַחתִית
- דפדפנים
- מובנה
- לַחְצָן
- מחושב
- שיחה
- אשר
- קטגוריה
- מסוים
- שינויים
- לבדוק
- בכיתה
- קוד
- לחלוטין
- מסקנה
- מכולה
- מכיל
- תוכן
- קורס
- לִיצוֹר
- יוצרים
- קריטי
- מכריע
- נוֹכְחִי
- נתונים
- נקודות מידע
- מסד נתונים
- בְּרִירַת מֶחדָל
- תלוי
- תלוי
- אחר
- לְהַצִיג
- מציג
- כל אחד
- מוקדם יותר
- או
- נקודת קצה
- במיוחד
- אירוע
- אירועים
- דוגמה
- חיצוני
- מהר יותר
- מאפיין
- הושג
- מעטים
- ממולא
- בסופו של דבר
- ראשון
- קבוע
- להתמקד
- לעקוב
- החל מ-
- פונקציה
- פונקציונלי
- בדרך כלל
- לקבל
- gif
- Git
- לתת
- נתן
- הולך
- טוב
- יותר
- רֶשֶׁת
- קרקע
- מדריך
- לטפל
- ידות על
- לעזור
- כאן
- לרחף
- איך
- איך
- HTML
- HTTPS
- ICON
- רעיון
- ליישם
- הפעלה
- יישום
- in
- כלול
- בנפרד
- במקום
- מבוא
- IT
- פריטים
- JavaScript
- ג'סון
- שמור
- לִלמוֹד
- למידה
- LG
- ספריות
- רשימה
- לִטעוֹן
- טוען
- נראה
- מגרש
- לעשות
- עשייה
- באופן ידני
- מוּזְכָּר
- שיטה
- קטין
- מודרני
- יותר
- רוב
- שם
- ניווט
- צורך
- חדש
- הבא
- מספר
- אובייקט
- להשיג
- ONE
- מבצע
- אחר
- דִפּוּף
- פרמטרים
- עבר
- לְחַבֵּר
- מציין מיקום
- אפלטון
- מודיעין אפלטון
- אפלטון נתונים
- נקודה
- נקודות
- אפשרי
- הודעות
- מעשי
- תרגול
- פרקטיקות
- לְהַעֲדִיף
- יפה
- קודם
- פרויקטים
- רכוש
- מטרה
- מהירות
- RE
- לקבל
- להפחית
- רלוונטי
- המייצג
- לבקש
- נדרש
- דורש
- תגובה
- REST
- תוצאות
- לַחֲזוֹר
- טַבַּעַת
- אותו
- מסך
- סעיף
- סט
- כמה
- Shadow
- לְהַצִיג
- הראה
- פָּשׁוּט
- יחיד
- שישה
- מידה
- קטן יותר
- So
- מָקוֹר
- ספציפי
- לפצל
- Stackabuse
- תקנים
- החל
- עצור
- חנות
- בהצלחה
- כזה
- SVG
- לוקח
- משימות
- השמיים
- לכן
- שְׁלוֹשָׁה
- דרך
- זמן
- כותרת
- ל
- כלים
- סה"כ
- מַעֲבָר
- נָכוֹן
- us
- להשתמש
- משתמש
- בְּדֶרֶך כְּלַל
- ערך
- Ve
- באמצעות
- אינטרנט
- אפליקציית רשת
- אתר
- אם
- אשר
- יצטרך
- בתוך
- לְלֹא
- עובד
- היה
- אתה
- זפירנט