پیشنیاز ها
آشنایی با HTML , CSS
آشنایی مقدماتی با جاوااسکریپت
قابلیت های IntersectionObserver
این ابزار به ما این امکان را میدهد که تشخیص دهیم یک عنصر در صفحه :
- وارد دید کاربر شده است
- از دید کاربر خارج شده است
- یا چه میزان از آن توسط کاربر مشاهده میشود
این ابزار برای بهینه سازی عملکرد وبسایت ها و پیاده سازی ویژگی هایی مانند بارگذاری یا انیمیشن های مبتنی بر (Lazy Loading) بسیار مفید است.
تشخیص مشاهده عنصر
const observer = new IntersectionObserver((entries,observer)=>{entries.forEach((entry)=>{if (entry.isIntersecting){console.log("عنصر در دید کاربر قرار گرفت !")}else{console.log("عنصر از دید کاربر خارج شد !")}})});const target = document.querySelector(".target-element")observer.observe(target)
توضیحات observer
ابتدا یک آبجکت از کلاس IntersectionObserver ساختیم و آنرا در متغیر observer ذخیره کردیم.
تابع Callback
entries:
یک آرایه از آبجکت ها که هرکدام نمایانگر یک عنصر تحت نظر است.
observer:
به خود ردیاب (IntersectionObserver) اشاره دارد تا ویژگی ها متد های آنرا صدا بزنید
...observer.unobserver(entry.target)//متوقف کردن ردیابی پس از یکبار مشاهده
حلقهی entries
روی تمام تغییرات حلقه میزند، هر آبجکت در این آرایه اطلاعاتی درباره وضعیت یک عنصر ارائه میدهد. در این قسمت بررسی میکنیم که آیا عنصر درحال حاضر قابل رویت است یا خیر.
تغییر تنظیمات IntersectionObserver
const options = {root:null,rootMargin:"10px 20px 10px 20px",threshold: 0.5}
توضیحات تنظیمات
root : محدوده دید کاربر (null محدوده پیشفرض است).
rootMargin : حاشیه ای اطراف محدوده ردیابی تعریف میکند.
threshold : مشخص میکند چه درصدی از عنصر باید دیده شود تا کد اعمال شود.
اعمال تنظیمات روی IntersectionObserver
const options = {root:null,rootMargin:"10px 20px 10px 20px",threshold: 0.5}const observer = new IntersectionObserver((entries,observer)=>{entries.forEach((entry)=>{if (entry.isIntersecting){console.log("عنصر در دید کاربر قرار گرفت !")}else{console.log("عنصر از دید کاربر خارج شد !")}})},options);const target = document.querySelector(".target-element")observer.observe(target)
ایجاد انیمیشن با IntersectionObserver
انیمیشن چرخیدن سه بعدی کارت ها به دور خودشان پس از مشاهده
کد های HTML
<div class="offset-y"></div><div class="card-container"><div class="card"></div><div class="card"></div><div class="card"></div><div class="card"></div></div>
کد های CSS
.offset-y{height: 1200px;}.card-container{display: grid;grid-template-columns: repeat(4,1fr);gap: 16px;text-align: center;perspective: 1000px;}.card{height: 340px;width: 100%;transition: 5s;transform-style: preserve-3d;}.card:nth-child(odd){background: rgb(226, 144, 50);}.card:nth-child(even){background: rgb(51, 187, 62);}
کد های JS
const animations = (elementList)=>{elementList.forEach((element)=>{element.style.transform = "rotateY(360deg)";})}const cards = document.querySelectorAll('.card')const cardContainer = document.querySelector(".card-container");const options = {threshold:0.4}const observer = new IntersectionObserver((entries,observer)=>{entries.forEach(item=>{if (item.isIntersecting){animations(cards);}})},options)observer.observe(cardContainer);
نتیجه گیری
شما در این آموزش با مفاهیم IntersectionObserver آشنا شدید. اینک میتوانید با بهرهگیری از دانش برنامهنویسی خود، این مفاهیم را بسط داده و به طور عملی پیادهسازی کنید. با استفاده از این مهارتها، قادر خواهید بود پروژههای پیچیدهتر و کاربردیتری را توسعه داده و به دنیای برنامهنویسی قدمی محکمتر بردارید.
اگر در هر بخشی از این آموزش به نکتهای برخورد کردید که برایتان نامفهوم یا نیازمند توضیح بیشتر است، خواهشمندیم که با ارسال تیکت به ما، پیشنهاد یا سوالتان را مطرح کنید.