微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

修复移动设备上的响应式轮播显示

如何解决修复移动设备上的响应式轮播显示

我仍然是 ReactJS 的初学者,我需要创建一个响应式的 Carousel,我需要离开的方式是这样的:

我能够使用 react-responsive-carousel 库在桌面和响应式上创建 Carousel。

问题是在移动格式中,当我传递每个轮播的 slides 时,预期的行为没有发生。当我点击显示下一张幻灯片时,在 Carousel 中它仍然显示当前幻灯片,并且只显示下一张幻灯片的一部分。

通过展示我制作的简短 gif 更容易解释,注意当我点击显示下一张幻灯片时会发生什么。

当它是桌面格式时,Carousel 以正确的方式工作,我还创建了一个小 gif 来显示它。

你能告诉我你做错了什么,以便 Carousel 以这种方式工作吗?

import React from "react";
import PropTypes from "prop-types";
import "./carousel.scss";

import { Carousel as CarouselLib } from "react-responsive-carousel";

import { CAROUSEL_ITEMS } from "./Carousel.utils";

const Carousel = ({ subtitle,testID,title }) => {
  const items = React.useMemo(
    () =>
      CAROUSEL_ITEMS.map((item) => (
        <div key={item.id}>
          <div className="images">
            <img className="image" src={item.url} alt="" />
          </div>
          <div className="infos">
            <h3>{item.title}</h3>
            <span>{item.subtitle}</span>
          </div>
        </div>
      )),[]
  );

  return (
    <div data-testid={`${testID}_Container`} className="carousel-container">
      <div className="carousel-header">
        <h5>{subtitle}</h5>
        <h3>{title}</h3>
      </div>
      <div className="carousel-content">
        <CarouselLib
          centerMode
          showStatus={false}
          dynamicHeight={false}
          emulatetouch
          swipeScrollTolerance={50}
          centerSlidePercentage={30}
          showThumbs={false}
          infiniteLoop
          showIndicators
          renderArrowPrev={(onClickHandler,hasPrev,label) =>
            hasPrev && <div />
          }
          renderArrowNext={(onClickHandler,hasNext,label) =>
            hasNext && (
              <button
                type="button"
                onClick={onClickHandler}
                className="custom-arrow"
                data-testid={`${testID}_Button_Next`}
              />
            )
          }
        >
          {items}
        </CarouselLib>
      </div>
    </div>
  );
};

Carousel.propTypes = {
  subtitle: PropTypes.string,testID: PropTypes.string.isrequired,title: PropTypes.string
};

Carousel.defaultProps = {
  testID: "Carousel",subtitle: "READ OUR CLIENT",title: "CASES"
};

export default Carousel;
.carousel {
  &-container {
    .images {
      background-color: #fff;
      width: 100%;
      max-width: 416px;
      height: 280px;

      .image {
        width: 100%;
        height: auto;
        background-position: center center;
        background-repeat: no-repeat;
      }

      @media (max-width: 600px) {
        max-width: 270px;
        height: auto;
      }
    }

    .infos {
      display: flex;
      flex-direction: column;
      justify-content: center;
      align-items: flex-start;

      h3 {
        font-family: Alliance2;
        color: #000;
        line-height: 0.76;
        font-size: 2.5rem;
        letter-spacing: normal;
        font-style: normal;
        font-weight: normal;
        font-stretch: normal;
        margin: 24px 0 20px 0;

        @media (max-width: 600px) {
          font-size: 1.5rem;
        }
      }

      span {
        font-family: Alliance2;
        color: #000;
        line-height: 0.76;
        font-size: 1rem;
        letter-spacing: normal;
        font-style: normal;
        font-weight: 500;
        font-stretch: normal;
        text-transform: uppercase;
        margin-bottom: 30px;

        @media (max-width: 600px) {
          font-size: 0.625rem;
        }
      }
    }

    .carousel {
      .slide {
        background-color: transparent !important;

        @media (max-width: 1024px) {
          min-width: 50% !important;
        }

        @media (max-width: 600px) {
          min-width: 90% !important;
        }
      }

      .control-dots {

        .dot {
          border-radius: 0 !important;
          background-color: #000 !important;
          width: 33px !important;
          height: 3px !important;
          Box-shadow: none !important;
          opacity: 1 !important;

          &.selected {
            height: 7px !important;
          }

          &:focus {
            outline: none !important;
          }
        }
      }
    }
  }

  &-header {
    color: #000;
    font-family: 'Alliance2';
    font-weight: 300;
    margin: auto;
    max-width: 1300px;
    text-transform: uppercase;

    @media (max-width: 960px) {
      align-items: center;
      display: flex;
      flex-direction: column;
    }

    h5 {
      font-size: 1rem;
      font-weight: bold;
      margin: 0;
    }

    h3 {
      height: 80px;
      margin-top: 13px;
      margin-bottom: 44px;

      color: #000;
      font-size: 3.5rem;
      line-height: 1.04;
      letter-spacing: -1.1px;

      @media (max-width: 960px) {
        font-size: 1.87rem;
      }

      @media (max-width: 600px) {
        margin-bottom: 0;
      }
    }
  }

  &-content {
    margin: auto;
    max-width: 1440px;
    width: 100%;

    .custom-arrow {
      position: absolute;
      top: 7em;
      bottom: auto;
      right: 4.3em;
      background-color: transparent;
      border: none;
      border-left: 4px solid #000;
      border-bottom: 4px solid #000;
      width: 67px;
      height: 67px;
      transform: rotate(225deg);
      cursor: pointer;

      &:focus {
        outline: none !important;
      }
    }
  }
}

非常感谢您提供任何帮助/提示

解决方法

我不知道 react-responsive-carousel ,我在我的项目中使用 react-slick (here) 并且我从来没有遇到过响应问题。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。