🔥 چرا گالری افقی بینهایت در طراحی سایت اهمیت دارد؟
استفاده از گالری تصاویر یکی از عناصر ضروری در صفحات وب است؛ مخصوصاً زمانی که میخواهید مجموعهای از عکسها را به صورت جذاب و حرفهای نمایش دهید. گالری پیشفرض المنتور امکانات محدودی دارد و امکان اسکرول افقی روان و بیپایان را ارائه نمیدهد. همین موضوع باعث شده بسیاری از طراحان به دنبال یک راهحل سبک، سریع و قابل پیادهسازی باشند.
کدی که در این آموزش معرفی میشود، قابلیت نمایش گالری افقی بینهایت (Infinite Horizontal Scroll) را به المنتور اضافه میکند؛ آن هم بدون نیاز به هیچ افزونهای.
⭐ مزایای استفاده از گالری اسکرول افقی در المنتور
✔ کاملاً بینهایت و روان
تصاویر به صورت ممتد و بدون توقف حرکت میکنند. انیمیشن از نوع marquee مدرن بوده و هیچ پرشی در حرکت دیده نمیشود.
✔ توقف حرکت هنگام هاور
وقتی کاربر روی تصویر قرار بگیرد، اسکرول متوقف میشود. این ویژگی برای سایتهای محصولمحور یا نمونهکار بسیار کاربردی است.
✔ بدون افزونه – مناسب برای سئو
هر افزونه اضافی ممکن است سرعت سایت را کاهش دهد. اما این روش تنها با CSS و JavaScript اجرا میشود و کاملاً سبک است.
هرچه سرعت سایت بیشتر باشد، رتبه سئو بهتر خواهد شد.
✔ سازگار با تمام گالریهای المنتور
این کد به طور خودکار روی هر گالری المنتور اعمال میشود و نیازی به انتخاب ID یا تنظیم دستی ندارد.
✔ واکنشگرا و مناسب موبایل
اندازه تصاویر در موبایل بهینه شده و سرعت حرکت نیز مناسب نمایشگرهای کوچک است.
⚙ این کد چگونه کار میکند؟
مکانیزم کار به این صورت است:
-
ابتدا تمام آیتمهای گالری شناسایی میشوند.
-
سپس محتوای گالری دوبل میشود تا مسیر اسکرول همیشه پر باشد.
-
تصاویر داخل یک wrapper جدید قرار میگیرند که وظیفه اجرای انیمیشن را برعهده دارد.
-
انیمیشن با CSS اجرا میشود تا مصرف CPU پایین و سرعت صفحه بالا باقی بماند.
این مدل ساختار باعث میشود گالری شبیه یک نوار تبلیغاتی حرفهای اما با طراحی مدرن عمل کند.
توجه ! اگر از المنتور استفاده میکنید این تیکه کد رو بهتره در ویجت HTML قرار دهید !
/**
* Author: TavTheme
* Website: https://tavtheme.com/
* Instagram: @tavtheme
*/
<style>
/* ====== Infinite Gallery Marquee – by tav ====== */
.elementor-image-gallery {
overflow: hidden;
padding: 40px 0;
background: transparent;
}
/* انیمیشن */
.elementor-image-gallery .tav-gallery-wrapper {
display: flex;
width: max-content;
animation: tav-marquee 100s linear infinite;
}
.elementor-image-gallery .gallery-item {
flex-shrink: 0;
margin: 5px !important;
padding: 0 !important;
}
.elementor-image-gallery .gallery-icon img {
width: 240px !important;
height: 240px !important;
object-fit: cover;
border-radius: 24px;
box-shadow: 0 20px 40px rgba(0,0,0,0.22);
transition: 0.4s ease;
}
.elementor-image-gallery .gallery-item:hover img {
transform: scale(1.08) translateY(-8px);
box-shadow: 0 30px 70px rgba(0,0,0,0.35);
}
/* توقف انیمیشن روی هاور */
.elementor-image-gallery .tav-gallery-wrapper:hover {
animation-play-state: paused !important;
}
/* Keyframes */
@keyframes tav-marquee {
from { transform: translateX(0); }
to { transform: translateX(-100%); }
}
/* موبایل */
@media (max-width: 767px) {
.elementor-image-gallery .gallery-icon img {
width: 200px !important;
height: 200px !important;
border-radius: 18px;
}
}
</style>
<script>
document.addEventListener("DOMContentLoaded", function () {
// همه گالریهای صفحه
const galleries = document.querySelectorAll(".elementor-image-gallery");
galleries.forEach(gallery => {
// اگر قبلاً پردازش شده باشد دوباره انجام نده
if (gallery.classList.contains("tav-processed")) return;
const items = gallery.querySelectorAll(".gallery-item");
if (!items.length) return;
// ساخت wrapper
const wrapper = document.createElement("div");
wrapper.classList.add("tav-gallery-wrapper");
let originalHTML = "";
// کلون کردن و دوبل کردن
items.forEach(item => {
wrapper.appendChild(item.cloneNode(true));
originalHTML += item.outerHTML;
item.remove();
});
wrapper.innerHTML += originalHTML;
gallery.appendChild(wrapper);
// علامت پردازش شده
gallery.classList.add("tav-processed");
});
});
</script>



