我在使用100react 17.0.2next 12.0.0号图书馆

我希望当我从一个月换到另一个月时,能够像在AirBnb日历中一样配置淡入或幻灯片,而不是突然改变.

有人知道我怎么做吗?非常感谢,给您带来不便,非常抱歉.

这是我的实际行为

enter image description here

这有点像我想要的,但也可能是淡入或类似的东西.

enter image description here

推荐答案

与Airbnb完全一样,我认为这是不可能的,因为react-date-range与Airbnb的工作原理略有不同.

但您可以使用react-transition-group库中的SwitchTransitionCSSTransition获得类似的行为.你可以here次查看他们的文档.

首先,这是code sample个月和DateRangerPicker个月之间使用CSSTransition.

下面是相同的代码,并对其作用进行了 comments :

CSS file:

/*
Overflow the Calendar container 
.rdrDateRangeWrapper is a class that react-date-range creates internally
*/
.rdrDateRangeWrapper {
  overflow-x: hidden;
}

/*
.rdrMonths is the class that react-date-range creates internally for the month container calendar

.fadeRightToLeft classes is related to react-transition-group
Created for transition from right to left
*/
.fadeRightToLeft-enter .rdrMonths {
  opacity: 0;
  transform: translateX(100%);
}
.fadeRightToLeft-enter-active .rdrMonths {
  opacity: 1;
  transform: translateX(0%);
}
.fadeRightToLeft-exit .rdrMonths {
  opacity: 1;
  transform: translateX(0%);
}
.fadeRightToLeft-exit-active .rdrMonths {
  opacity: 0;
  transform: translateX(-100%);
}
.fadeRightToLeft-enter-active .rdrMonths,
.fadeRightToLeft-exit-active .rdrMonths {
  transition: opacity 100ms, transform 100ms;
}

/*
Same as fadeRightToLeft:
.fadeLeftToRight classes is related to react-transition-group
Created for transition from left to right
*/
.fadeLeftToRight-enter .rdrMonths {
  opacity: 0;
  transform: translateX(-100%);
}
.fadeLeftToRight-enter-active .rdrMonths {
  opacity: 1;
  transform: translateX(0%);
}
.fadeLeftToRight-exit .rdrMonths {
  opacity: 1;
  transform: translateX(0%);
}
.fadeLeftToRight-exit-active .rdrMonths {
  opacity: 0;
  transform: translateX(100%);
}
.fadeLeftToRight-enter-active .rdrMonths,
.fadeLeftToRight-exit-active .rdrMonths {
  transition: opacity 100ms, transform 100ms;
}

Component file:

import { useState } from "react";
import { addDays, isAfter } from "date-fns";
import { DateRangePicker } from "react-date-range";
import { SwitchTransition, CSSTransition } from "react-transition-group";

import "react-date-range/dist/styles.css";
import "react-date-range/dist/theme/default.css";
import "./styles.css";

export default function App() {
  const [state, setState] = useState([
    {
      startDate: new Date(),
      endDate: addDays(new Date(), 7),
      key: "selection"
    }
  ]);

  // state created to hold the first month that calendar is showing
  const [shownDateChangeValue, setShownDateChangeValue] = useState(new Date());

  // state created to check if use created next Month ou previous month
  const [isNextMonth, setIsNextMonth] = useState(true);

  return (
    <SwitchTransition mode="out-in">
      <CSSTransition
        /*** call the transition when month changes ***/
        key={shownDateChangeValue}
        /*** code related to SwitchTransition ***/
        addEndListener={(node, done) =>
          node.addEventListener("transitionend", done, false)
        }
        /*** Set the transition class related to the user action ***/
        classNames={isNextMonth ? "fadeRightToLeft" : "fadeLeftToRight"}
      >
        <DateRangePicker
          onChange={(item) => {
            setState([item.selection]);
          }}
          showSelectionPreview={true}
          moveRangeOnFirstSelection={false}
          months={2}
          ranges={state}
          direction="horizontal"
          /*** set the current month ***/
          shownDate={shownDateChangeValue}
          /*** Change shownDateChangeValue and isNextMonth states, dispatching the transition ***/
          onShownDateChange={(month) => {
            /* check if user click next or previous month */
            const isNext = isAfter(month, shownDateChangeValue);

            setIsNextMonth(isNext ? true : false);

            setShownDateChangeValue(month);
          }}
        />
      </CSSTransition>
    </SwitchTransition>
  );
}

Css相关问答推荐

为什么我的Angular material css文件不工作?

添加Angular 17的Stackblitz项目的Angular material 主题?

如何在WooCommerce产品页面中减少属性下拉菜单之间的空间

如何以Angular 将下拉面板的宽度与其文本框对齐

CSS Grid我不想要的东西

为什么在RadixUi上应用Tailwincss和自定义css类不起作用?

Next.js 条件样式

根据子索引计算变换 CSS 参数

在网格中整齐地对齐项目

在 React 中使用 CSS 动画 onClick()

如果中间元素的内容不适合 CSS,如何将其分隔到新行?

CSS 字符串变量的正确null值是多少?

为什么 flexbox 中的 在应用居中时不会调整大小?

CSS网格使sibling 项目拉伸

在移动设备上touch 屏幕边缘的元素(Material UI)

CSS如何防止键盘向上移动内容?

仅针对直接子代而不是其他相同后代的 CSS Select 器

弹性框中的边距折叠

将 webkit 滚动条样式应用于指定元素

对象拟合不影响图像