معرفی
هنگام ایجاد یک وب سایت یا برنامه وب، به خصوص اگر دارای ویژگی های زیادی باشند قالب بندی شده محتوا (مانند یک شبکه یا فهرستی از موارد متعلق به یک دسته) – به طور کلی ایده خوبی است که آن را به صفحات تقسیم کنید برای کاهش تعداد مواردی که به طور همزمان روی صفحه ظاهر می شوند.
در این مقاله، نحوه پیاده سازی صفحه بندی در پروژه های وب خود را با استفاده از جاوا اسکریپت وانیلی از ابتدا یاد خواهیم گرفت.
برای هدف این مقاله، مطالب را از آن دریافت می کنیم این نمونه پاسخ 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
همانطور که قبلا ذکر شد، صفحه بندی تماماً در مورد تقسیم محتوا به قطعات کوچکتر است. از شما می خواهد که داده ها را واکشی کنید، تصمیم بگیرید که چه زمانی و چگونه تقسیم شوند، تعداد صفحات را محاسبه کنید و سپس بخشی از آن را به کاربر نشان دهید. خوشبختانه – عملکرد back-end معمولاً از چند کار اول مراقبت می کند و صفحه مربوطه، تعداد کل صفحات و محتوا را برمی گرداند. هر صفحه.
توجه داشته باشید: بسته به API خاصی که با آن کار میکنید – ممکن است نتوانید نتایج را بارگیری کنید یا نتوانید. در صورت امکان - به جای بارگیری همه آنها از قبل، نتایج بارگذاری تنبل را ترجیح دهید. بیشتر APIهای مدرن از شیوه هایی پیروی می کنند که به شما امکان می دهد a را تنظیم کنید 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
به طور پیش فرض)، و تعداد کل صفحات.
توجه داشته باشید: هنگام مصرف داده از یک API و پایگاه داده استارتدار، شمارش کل از صفحات یا نقاط داده معمولاً برگردانده می شود. اگر تعداد کل صفحات را دریافت نکنیم، می توان آن را از طریق تعداد کل شی و اندازه صفحه محاسبه کرد.
برای این راهنما ما را ارائه می دهیم تعداد کل صفحات تعداد ثابتی از 30
:
const numberPerPage = 6;
var pageNumber = 1;
var numberOfPages = 30;
در بخش قبل، همه پستها را در یک صفحه نمایش دادهایم، اما میخواهیم فقط شش پست را در یک زمان نشان دهیم. بنابراین، ما را تنظیم کرده ایم numberPerPage
به 6
که اکنون از آن برای تنظیم عملیات واکشی استفاده می کنیم تا فقط نمایش داده شود 6
پست.
این به پیاده سازی خاص بستگی دارد، اما استفاده از پارامترهای پرس و جو در هنگام واکشی نتایج از APIها، که به شما امکان می دهد مقدار مشخصی را واکشی کنید، یک عمل گسترده است. با ما از نتایج. به عنوان مثال، REST API ساختگی که ما استفاده می کنیم، اجازه می دهد 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 را با بهترین روش ها، استانداردهای پذیرفته شده در صنعت و برگه تقلب شامل بررسی کنید. دستورات Google Git را متوقف کنید و در واقع یاد گرفتن آی تی!
const prev = document.querySelector('.prev');
prev.addEventListener('click', (e) => { e.preventDefault(); if (pageNumber > 1) { pageNumber--; fetchPosts(pageNumber); }
});
پس از افزودن a 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); }
});
نتیجه
هر زمان که بخواهید یک پایگاه داده یا هر منبع داده دیگری را در برنامه وب خود نمایش دهید، تقسیم محتوا به قطعات کوچکتر و قابل مدیریت تر که به صورت جداگانه نمایش داده می شوند بسیار مهم است.
در این مقاله نگاهی به نحوه پیاده سازی صفحه بندی با جاوا اسکریپت از ابتدا، بدون کتابخانه و ابزار خارجی انداختیم.
- محتوای مبتنی بر SEO و توزیع روابط عمومی. امروز تقویت شوید.
- پلاتوبلاک چین. Web3 Metaverse Intelligence. دانش تقویت شده دسترسی به اینجا.
- منبع: https://stackabuse.com/pagination-in-vanilla-javascript/
- 1
- 100
- 11
- 7
- 9
- a
- قادر
- درباره ما
- بالاتر
- دست
- واقعا
- اضافه
- هوشیار
- معرفی
- همه پست ها
- اجازه می دهد تا
- و
- API
- رابط های برنامه کاربردی
- ظاهر شدن
- کاربرد
- مناسب
- استدلال
- مقاله
- اختصاص داده
- به عقب
- بازگشت پایان
- مستقر
- اساسی
- قبل از
- آغاز شد
- مرز
- پایین
- مرورگرهای
- ساخته شده در
- دکمه
- محاسبه
- صدا
- اهميت دادن
- دسته بندی
- معین
- تبادل
- بررسی
- کلاس
- رمز
- به طور کامل
- نتیجه
- ظرف
- شامل
- محتوا
- دوره
- ایجاد
- ایجاد
- بحرانی
- بسیار سخت
- جاری
- داده ها
- نقاط داده
- پایگاه داده
- به طور پیش فرض
- بستگی دارد
- بستگی دارد
- مختلف
- نمایش دادن
- صفحه نمایش
- هر
- پیش از آن
- هر دو
- نقطه پایانی
- به خصوص
- واقعه
- حوادث
- مثال
- خارجی
- سریعتر
- ویژگی
- وصله
- کمی از
- پر شده
- سرانجام
- نام خانوادگی
- ثابت
- تمرکز
- به دنبال
- از جانب
- تابع
- قابلیت
- عموما
- دریافت کنید
- GIF
- رفتن
- دادن
- داده
- رفتن
- خوب
- بیشتر
- توری
- زمین
- راهنمایی
- دسته
- دست
- کمک
- اینجا کلیک نمایید
- در تردید بودن
- چگونه
- چگونه
- HTML
- HTTPS
- ICON
- اندیشه
- انجام
- پیاده سازی
- اجرای
- in
- مشمول
- به طور جداگانه
- در عوض
- معرفی
- IT
- اقلام
- جاوا اسکریپت
- json
- نگاه داشتن
- یاد گرفتن
- یادگیری
- LG
- کتابخانه ها
- فهرست
- بار
- بارگیری
- نگاه کنيد
- خیلی
- ساخت
- ساخت
- دستی
- ذکر شده
- روش
- خردسال
- مدرن
- بیش
- اکثر
- نام
- جهت یابی
- نیاز
- جدید
- بعد
- عدد
- هدف
- بدست آوردن
- ONE
- عمل
- دیگر
- صفحه گذاری
- پارامترهای
- گذشت
- قطعه
- حفره یا سوراخ
- افلاطون
- هوش داده افلاطون
- PlatoData
- نقطه
- نقطه
- ممکن
- پست ها
- عملی
- تمرین
- شیوه های
- ترجیح می دهند
- زیبا
- قبلی
- پروژه ها
- ویژگی
- هدف
- به سرعت
- RE
- گرفتن
- كاهش دادن
- مربوط
- نمایندگی
- درخواست
- ضروری
- نیاز
- پاسخ
- REST
- نتایج
- برگشت
- حلقه
- همان
- پرده
- بخش
- تنظیم
- چند
- سایه
- نشان
- نشان داده شده
- ساده
- تنها
- شش
- اندازه
- کوچکتر
- So
- منبع
- خاص
- انشعاب
- Stackabuse
- استانداردهای
- آغاز شده
- توقف
- opbevare
- موفقیت
- چنین
- SVG
- طول می کشد
- وظایف
- La
- از این رو
- سه
- از طریق
- زمان
- عنوان
- به
- ابزار
- جمع
- انتقال
- درست
- us
- استفاده کنید
- کاربر
- معمولا
- ارزش
- Ve
- از طريق
- وب
- برنامه تحت وب
- سایت اینترنتی
- چه
- که
- اراده
- در داخل
- بدون
- کارگر
- خواهد بود
- شما
- شما
- زفیرنت