在敏锐滑块轮播上添加图像放大包

问题描述 投票:0回答:1

我们正在尝试实现一个产品滑块轮播,当鼠标悬停在 Web 应用程序上时可以缩放。

想要利用

react-magnifier
keen-slider
包,以便我们可以在悬停时放大活动图像。

这是使用这两个包的模拟实现

import React from "react";
import { useKeenSlider } from "keen-slider/react";
import "keen-slider/keen-slider.min.css";
import "./styles.css";
import Magnifier from "react-magnifier";
function ThumbnailPlugin(mainRef) {
  return (slider) => {
    function removeActive() {
      slider.slides.forEach((slide) => {
        slide.classList.remove("active");
      });
    }
    function addActive(idx) {
      slider.slides[idx].classList.add("active");
    }

    function addClickEvents() {
      slider.slides.forEach((slide, idx) => {
        slide.addEventListener("click", () => {
          if (mainRef.current) mainRef.current.moveToIdx(idx);
        });
      });
    }

    slider.on("created", () => {
      if (!mainRef.current) return;
      addActive(slider.track.details.rel);
      addClickEvents();
      mainRef.current.on("animationStarted", (main) => {
        removeActive();
        const next = main.animator.targetIdx || 0;
        addActive(main.track.absToRel(next));
        slider.moveToIdx(Math.min(slider.track.details.maxIdx, next));
      });
    });
  };
}
function ExampleComponent({ activeImage }) {
  return <Magnifier src={activeImage} width={500} />;
}

export default function App() {
  const [sliderRef, instanceRef] = useKeenSlider({
    initial: 0
  });
  const [thumbnailRef] = useKeenSlider(
    {
      initial: 0,
      slides: {
        perView: 4,
        spacing: 10
      }
    },
    [ThumbnailPlugin(instanceRef)]
  );

  return (
    <>
      <ExampleComponent activeImage={sliderRef.initial} />
      <div ref={sliderRef} className="keen-slider">
        <div className="keen-slider__slide number-slide1">1</div>
        <div className="keen-slider__slide number-slide2">2</div>
        <div className="keen-slider__slide number-slide3">3</div>
        <div className="keen-slider__slide number-slide4">4</div>
        <div className="keen-slider__slide number-slide5">5</div>
        <div className="keen-slider__slide number-slide6">6</div>
      </div>

      <div ref={thumbnailRef} className="keen-slider thumbnail">
        <div className="keen-slider__slide number-slide1">1</div>
        <div className="keen-slider__slide number-slide2">2</div>
        <div className="keen-slider__slide number-slide3">3</div>
        <div className="keen-slider__slide number-slide4">4</div>
        <div className="keen-slider__slide number-slide5">5</div>
        <div className="keen-slider__slide number-slide6">6</div>
      </div>
    </>
  );
}

很想知道如何调试它以使其工作。

此外,是否有任何替代包允许我们使用这样的整个组件,而不必担心实现(zoomcarousel

代码沙箱链接:https://codesandbox.io/s/keen-slider-react-magnifier-5sdrkl?file=/src/App.js

javascript reactjs carousel
1个回答
0
投票

这会对你有帮助

import React from "react";
import ImageZoom from "react-medium-image-zoom";
import "react-medium-image-zoom/dist/styles.css";
import Slider from "react-slick";
import "slick-carousel/slick/slick.css";
import "slick-carousel/slick/slick-theme.css";

const settings = {
  dots: false,
  infinite: true,
  speed: 500,
  slidesToShow: 1,
  slidesToScroll: 1
};

interface ProductImage {
  src: string;
  alt: string;
}

interface ProductSliderProps {
  images: ProductImage[];
}

function ProductSlider({ images }: ProductSliderProps) {
  return (
    <Slider {...settings}>
      {images.map((image, index) => (
        <div key={index}>
          <ImageZoom src={image.src} alt={image.alt} />
        </div>
      ))}
    </Slider>
  );
}

export default ProductSlider;
© www.soinside.com 2019 - 2024. All rights reserved.