קרוסלת תמונות היא דרך מצוינת להציג גלריית תמונות בצורה דינמית ונעימה למשתמשים. במדריך זה נלמד כיצד ליצור קרוסלה שבה לחיצה על תמונה תציג אותה בצורה מוגדלת בחלק נפרד בעמוד, תוך שימוש ב-CSS ו-JavaScript בלבד, וללא צורך בתוספים. פתרון זה מאפשר לשמור על עיצוב נקי וידידותי למשתמש, עם שליטה מלאה על התנהגות הקרוסלה והתמונות המוצגות.
אז איך נציג באלמנטור קרוסלת תמונות, כך שלחיצה על תמונה מסויימת תציג אותה מוגדלת במקום נפרד בעמוד?
שלבים:
נוסיף קרוסלת מדיה:
- נגרור את הווידג'ט "קרוסלת מדיה" (Media Carousel) לאזור שבו אנחנו רוצים להציג את הקרוסלה.
- נוסיף את התמונות הרצויות לקרוסלה.
- נגדיר את הקרוסלה כמו שאנחנו רוצים (מעבר אוטומטי, מספר תמונות בו זמנית וכו').
נוסיף אזור נפרד לתצוגת תמונה מוגדלת:
- נצור אזור חדש שבו תוצג התמונה המוגדלת.
- נגרור ווידג'ט מסוג "תמונה" (Image) לתוך האזור הזה, ונגדיר תמונה כלשהי (זו תהיה התמונה שתוחלף בלחיצה על תמונה מהקרוסלה).
נוסיף ID לאזור התמונה המוגדלת:
- בלשונית "מתקדם" (Advanced), תחת שדה "ID", נתן לאזור הזה מזהה ייחודי כמו "large-image".
נוסיף קוד JavaScript:
- נוסיף ווידג'ט HTML בעמוד שבו נמצאת הקרוסלה, ונדביק בתוכו את הקוד, שיאפשר ללחיצה על תמונה בקרוסלה להחליף את התמונה המוצגת באזור התצוגה המוגדל.
הנה דוגמה לקוד JavaScript שאפשר להוסיף:
<script>
jQuery(document).ready(function($) {
// פונקציה שמגדירה את פעולת ההחלפה
function updateCarouselImages() {
$('.elementor-carousel-image').off('click').on('click', function(){
// לקיחת ה-URL מתוך ה-CSS של background-image
var imgSrc = $(this).css('background-image');
imgSrc = imgSrc.replace('url("', ").replace('")', "); // ניקוי ה-URL
// שינוי מקור התמונה המוגדלת (src) והחלפת srcset
$('#large-image img').fadeOut(400, function(){
$(this).attr('src', imgSrc); // החלפת ה-src
$(this).attr('srcset', "); // נטרול ה-srcset כדי למנוע קונפליקטים
$(this).fadeIn(400); // אפקט fade in לאחר ההחלפה
});
});
}
// הפעלת הפונקציה בהתחלה
updateCarouselImages();
//אם הצגת תמונה מפסיקה לעבוד לאחר לחיצה על החצים קדימה או אחורה.
הבעיה נובעת מכך שהקרוסלה נטענת מחדש כאשר לוחצים על החצים, וזה גורם לאיבוד הקישוריות בין הקוד ל-Lazy Load החדש של התמונות.
כדי לפתור את זה, צריך להאזין לטעינה מחדש של הקרוסלה אחרי כל לחיצה על חץ.
נשתמש באירועי DOM של Javascript ונטען את הקוד מחדש אחרי כל שינוי בקרוסלה.
// ניטור שינויים בקרוסלה לאחר לחיצה על חצים או עדכון הקרוסלה
var observer = new MutationObserver(function(mutations) {
mutations.forEach(function(mutation) {
updateCarouselImages(); // חידוש האזנה ללחיצות אחרי כל שינוי בקרוסלה
});
});
// צפייה בשינויים בדפדפן בקרוסלה
observer.observe(document.querySelector('.elementor-widget-image-carousel'), {
childList: true, // שינויים בתוכן הקרוסלה
subtree: true // ניטור לכל התגיות שבתוך הקרוסלה
});
});
</script>
מה שקוד זה עושה הוא להאזין ללחיצה על כל תמונה בקרוסלת התמונות, לקחת את כתובת התמונה שנלחצה ולהחליף את התמונה באזור המוגדל עם ה-ID שנתתם לו.