Slider.svelte 2.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162
  1. <script lang="ts">
  2. import { onMount } from "svelte";
  3. let currentIndex = 0;
  4. const images = ["/test/test.png", "/test/test002.jpg"];
  5. function nextSlide() {
  6. currentIndex = (currentIndex + 1) % images.length;
  7. }
  8. function prevSlide() {
  9. currentIndex = (currentIndex - 1 + images.length) % images.length;
  10. }
  11. function handleWheel(event: WheelEvent) {
  12. // Прокрутка вниз (deltaY > 0) — следующий слайд
  13. // Прокрутка вверх (deltaY < 0) — предыдущий слайд
  14. if (event.deltaY > 0) {
  15. nextSlide();
  16. } else if (event.deltaY < 0) {
  17. prevSlide();
  18. }
  19. }
  20. // Добавляем обработчик события wheel при монтировании компонента
  21. onMount(() => {
  22. const slider = document.querySelector(".slider-container");
  23. if (slider instanceof HTMLElement) {
  24. slider.addEventListener("wheel", handleWheel as EventListener);
  25. }
  26. // Очищаем обработчик при размонтировании
  27. return () => {
  28. if (slider instanceof HTMLElement) {
  29. slider.removeEventListener(
  30. "wheel",
  31. handleWheel as EventListener,
  32. );
  33. }
  34. };
  35. });
  36. </script>
  37. <div class="slider-container relative w-full max-w-2xl mx-auto">
  38. <div class="overflow-hidden rounded-lg">
  39. <img
  40. src={images[currentIndex]}
  41. alt="Slide"
  42. class="w-full h-64 object-cover"
  43. />
  44. </div>
  45. <button
  46. on:click={prevSlide}
  47. class="absolute left-0 top-1/2 transform -translate-y-1/2 bg-gray-800 text-white p-2 rounded-r"
  48. >
  49. </button>
  50. <button
  51. on:click={nextSlide}
  52. class="absolute right-0 top-1/2 transform -translate-y-1/2 bg-gray-800 text-white p-2 rounded-l"
  53. >
  54. </button>
  55. </div>