【问题标题】:React Swiper.js slider only works on page resizeReact Swiper.js 滑块仅适用于页面调整大小
【发布时间】:2021-08-05 20:14:19
【问题描述】:

使用 Slider.js React 时,滑块仅在我调整页面大小后才有效。当我单击下一个按钮时,它不会移动到下一张幻灯片,我有一个 onSlideChange,当幻灯片更改时控制台会记录它,当我单击下一个按钮时它会进行控制台日志,但它不会移动幻灯片。任何帮助将不胜感激。

import React, { useEffect, useState } from "react";
import axios from "../axios";
import { Swiper, SwiperSlide } from "swiper/react";
import SwiperCore, { Navigation, Pagination, Scrollbar, A11y } from "swiper";

// Import Swiper styles
import "swiper/swiper.scss";
import "swiper/components/navigation/navigation.scss";
import "swiper/components/pagination/pagination.scss";
import "swiper/components/scrollbar/scrollbar.scss";

import "../css/Row.css";

// install Swiper modules
SwiperCore.use([Navigation, Pagination, Scrollbar, A11y]);

function Row({ title, fetchUrl, isLargeRow = false }) {
  const [movies, setMovies] = useState([]);

  const base_url = "https://image.tmdb.org/t/p/original/";

  return (
    <>
      {movies && (
        <div className="row">
          <h2>{title}</h2>
          <Swiper
            navigation
            slidesPerView="auto"
            slidesPerGroup={isLargeRow ? 6 : 10}
            loop={true}
            loopedSlides={movies.length || 20}
            observer={true}
            observeParents={true}
            onSwiper={(swiper) => console.log(swiper)}
            onSlideChange={() => console.log("slide change")}
            style={{ width: "100%", height: "100%" }}
          >
            <div className="row__posters">
              {movies?.map(
                (movie) =>
                  movie.poster_path && (
                    <SwiperSlide
                      key={movie.id}
                      className={`${
                        isLargeRow ? "swiper-slide-large" : "swiper-slide"
                      }`}
                    >
                      <img
                        className={`row__poster ${
                          isLargeRow && "row__posterLarge"
                        }`}
                        src={`${base_url}${movie.poster_path}`}
                        alt={
                          movie?.title || movie?.name || movie?.original_name
                        }
                      />
                    </SwiperSlide>
                  )
              )}
            </div>
          </Swiper>
        </div>
      )}
    </>
  );
}

export default Row;

CSS

.row {
  color: white;
  margin-left: 20px;
}

.row__posters {
  display: flex;
  overflow-y: hidden;
  /* overflow-x: scroll; */
  padding: 20px;
}

.row__posters::-webkit-scrollbar {
  display: none;
}

.row__poster {
  max-height: 250px;
  max-width: 150px;
  object-fit: contain;
  margin-right: 10px;
  width: 100%;
  transition: transform 450ms;
}

.row__poster:hover {
  transform: scale(1.08);
  opacity: 1;
}

.row__posterLarge {
  height: 350px;
  width: 350px;
  object-fit: fill;
  max-width: 250px;
  max-height: 350px;
}

.row__posterLarge:hover {
  transform: scale(1.09);
  opacity: 1;
}

.swiper-slide {
  max-width: 150px;
  margin-right: 10px;
}

.swiper-slide-large {
  width: 250px;
  margin-right: 110px;
}

【问题讨论】:

    标签: javascript reactjs swiperjs


    【解决方案1】:

    尝试在 Swiper 组件的 props 上添加 observerobserveParents

    <Swiper observer observeParents>
    ...
    </Swiper>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-04-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-02-10
      • 1970-01-01
      相关资源
      最近更新 更多