mock平台

Intro.js 2.4KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596
  1. import React from 'react';
  2. import PropTypes from 'prop-types';
  3. import { Icon } from 'antd';
  4. import './Intro.scss';
  5. import { OverPack } from 'rc-scroll-anim';
  6. import TweenOne from 'rc-tween-one';
  7. import QueueAnim from 'rc-queue-anim';
  8. const IntroPart = props => (
  9. <li className="switch-content">
  10. <div className="icon-switch">
  11. <Icon type={props.iconType} />
  12. </div>
  13. <div className="text-switch">
  14. <p>
  15. <b>{props.title}</b>
  16. </p>
  17. <p>{props.des}</p>
  18. </div>
  19. </li>
  20. );
  21. IntroPart.propTypes = {
  22. title: PropTypes.string,
  23. des: PropTypes.string,
  24. iconType: PropTypes.string
  25. };
  26. class Intro extends React.PureComponent {
  27. constructor(props) {
  28. super(props);
  29. }
  30. static propTypes = {
  31. intro: PropTypes.shape({
  32. title: PropTypes.string,
  33. des: PropTypes.string,
  34. img: PropTypes.string,
  35. detail: PropTypes.arrayOf(
  36. PropTypes.shape({
  37. title: PropTypes.string,
  38. des: PropTypes.string
  39. })
  40. )
  41. }),
  42. className: PropTypes.string
  43. };
  44. render() {
  45. const { intro } = this.props;
  46. const id = 'motion';
  47. const animType = {
  48. queue: 'right',
  49. one: { x: '-=30', opacity: 0, type: 'from' }
  50. };
  51. return (
  52. <div className="intro-container">
  53. <OverPack playScale="0.3">
  54. <TweenOne
  55. animation={animType.one}
  56. key={`${id}-img`}
  57. resetStyleBool
  58. id={`${id}-imgWrapper`}
  59. className="imgWrapper"
  60. >
  61. <div className="img-container" id={`${id}-img-container`}>
  62. <img src={intro.img} />
  63. </div>
  64. </TweenOne>
  65. <QueueAnim
  66. type={animType.queue}
  67. key={`${id}-text`}
  68. leaveReverse
  69. ease={['easeOutCubic', 'easeInCubic']}
  70. id={`${id}-textWrapper`}
  71. className={`${id}-text des-container textWrapper`}
  72. >
  73. <div key={`${id}-des-content`}>
  74. <div className="des-title">{intro.title}</div>
  75. <div className="des-detail">{intro.des}</div>
  76. </div>
  77. <ul className="des-switch" key={`${id}-des-switch`}>
  78. {intro.detail.map(function(item, i) {
  79. return (
  80. <IntroPart key={i} title={item.title} des={item.des} iconType={item.iconType} />
  81. );
  82. })}
  83. </ul>
  84. </QueueAnim>
  85. </OverPack>
  86. </div>
  87. );
  88. }
  89. }
  90. export default Intro;