index.pug 3.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152
  1. div(class="imageslider relative overflow-hidden rounded-xl shadow-lg max-w-6xl mx-auto")
  2. div(
  3. class="slides-container relative h-96 md:h-112 flex transition-transform duration-500 ease-in-out"
  4. :style="{ transform: 'translateX(-' + currentIndex * 100 + '%)' }"
  5. @touchstart="handleTouchStart"
  6. @touchmove="handleTouchMove"
  7. @touchend="handleTouchEnd"
  8. )
  9. div(
  10. v-for="(slide, index) in slides"
  11. :key="index"
  12. class="slide flex-shrink-0 w-full h-full relative"
  13. )
  14. img(:src="slide.image" :alt="slide.title || 'Изображение слайда'" class="w-full h-full object-cover")
  15. div(class="slide-content absolute inset-0 flex items-end")
  16. div(class="content-wrapper w-full p-8 bg-gradient-to-t from-black via-black/70 to-transparent text-white")
  17. h3(class="text-2xl md:text-3xl font-bold mb-2" v-if="slide.title") {{ slide.title }}
  18. p(class="text-lg md:text-xl mb-4 opacity-90" v-if="slide.description") {{ slide.description }}
  19. button(
  20. v-if="slide.cta"
  21. @click="$emit('slide-click', slide)"
  22. class="bg-accent text-white px-6 py-2 rounded-lg hover:bg-yellow-600 transition-colors"
  23. ) {{ slide.cta }}
  24. button(
  25. @click="prevSlide"
  26. class="nav-btn absolute left-4 top-1/2 transform -translate-y-1/2 bg-white/80 dark:bg-gray-800/80 text-gray-800 dark:text-white p-3 rounded-full shadow-lg hover:bg-white dark:hover:bg-gray-700 transition-all hover:scale-110"
  27. aria-label="Предыдущий слайд"
  28. )
  29. svg(class="w-5 h-5" fill="none" stroke="currentColor" viewBox="0 0 24 24")
  30. path(stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M15 19l-7-7 7-7")
  31. button(
  32. @click="nextSlide"
  33. class="nav-btn absolute right-4 top-1/2 transform -translate-y-1/2 bg-white/80 dark:bg-gray-800/80 text-gray-800 dark:text-white p-3 rounded-full shadow-lg hover:bg-white dark:hover:bg-gray-700 transition-all hover:scale-110"
  34. aria-label="Следующий слайд"
  35. )
  36. svg(class="w-5 h-5" fill="none" stroke="currentColor" viewBox="0 0 24 24")
  37. path(stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M9 5l7 7-7 7")
  38. div(class="indicators absolute bottom-4 left-1/2 transform -translate-x-1/2 flex space-x-2")
  39. div(
  40. v-for="(slide, index) in slides"
  41. :key="index"
  42. class="indicator w-3 h-3 rounded-full border border-white cursor-pointer transition-all"
  43. :class="currentIndex === index ? 'bg-white scale-110' : 'bg-white/50'"
  44. @click="goToSlide(index)"
  45. :aria-label="'Перейти к слайду ' + (index + 1)"
  46. )
  47. div(class="progress-bar absolute top-0 left-0 w-full h-1 bg-white/30" v-if="autoplay")
  48. div(class="progress-fill h-full bg-accent transition-all duration-1000" :style="{ width: progress + '%' }")