Вы можете продемонстрировать сайт здесь
Видеоурок
Об этом я уже снял видео на своем ютуб-канале. Проверьте это для более подробной информации.
Примечание:
Приложение построено с помощью Material-UI V4. Текущая версия — 5. Но не волнуйтесь. Вы все еще можете использовать код. Вам нужно только изменить пути импорта компонентов. Все остальное будет таким же. Проверьте их документы для более подробной информации.
Настройка с нуля
Создать приложение «создать-реагировать»
npx create-react-app <app>
cd <app>
Установить пакеты
yarn add @material-ui/core @material-ui/icons swiper
Начните с минимальной настройки
git clone [email protected]:thatanjan/insta-carousel-yt.git
cd insta-carousel-yt
git fetch
git checkout scratch
Создайте контейнер и заголовок приложения
// App.js import Grid from '@material-ui/core/Grid' import Typography from '@material-ui/core/Typography'
import PostCard from './PostCard'
function App() { return ( <div className='App'> <Grid container> <Grid iem xs={12} style={{ height: '25vh', display: 'grid', placeItems: 'center' }} > <Typography variant='h3'>Insta Carousel</Typography> </Grid>
<Grid item container xs={12} justifyContent='center'> <Grid item xs={3}> <PostCard />{' '} </Grid> </Grid> </Grid> </div> ) }
export default App
Объяснение:
- Создан заголовок, который будет центрирован.
- Сделал контейнер с открыткой, который займет 3 сетки из 12. Если вы не знаете о сетке Material UI, вы можете посмотреть следующее видео.
import React from 'react' import { Swiper, SwiperSlide } from 'swiper/react' import { makeStyles } from '@material-ui/core/styles' import Card from '@material-ui/core/Card' import CardHeader from '@material-ui/core/CardHeader' import CardMedia from '@material-ui/core/CardMedia' import CardContent from '@material-ui/core/CardContent' import CardActions from '@material-ui/core/CardActions' import Avatar from '@material-ui/core/Avatar' import IconButton from '@material-ui/core/IconButton' import Typography from '@material-ui/core/Typography' import FavoriteIcon from '@material-ui/icons/Favorite' import ShareIcon from '@material-ui/icons/Share' import MoreVertIcon from '@material-ui/icons/MoreVert' import CommentIcon from '@material-ui/icons/Comment'
import SwiperCore, { Keyboard, Scrollbar, Pagination, Navigation, } from 'swiper/core'
import 'swiper/swiper.min.css' import 'swiper/components/pagination/pagination.min.css' import 'swiper/components/navigation/navigation.min.css' import 'swiper/components/scrollbar/scrollbar.min.css'
import avatarImage from './media/postAvatar.jpg' import ts_1 from './media/carousels/ts_1.jpg' import ts_2 from './media/carousels/ts_2.jpg' import ts_3 from './media/carousels/ts_3.jpg' import ts_4 from './media/carousels/ts_4.jpg' import ts_5 from './media/carousels/ts_5.jpg'
const useStyles = akeStyles({ media: { height: 0, paddingTop: '100%', }, swiperContainer: { paddingBottom: '3rem', '& .swiper-pagination-bullet': { background: 'blue', }, '& .swiper-button-next:after': { fontSize: '2rem !important', }, '& .swiper-button-prev:after': { fontSize: '2rem !important', }, }, })
SwiperCore.use([Keyboard, Scrollbar, Pagination, Navigation])
const images = [ts_1, ts_2, ts_3, ts_4, ts_5]
const PostCard = () => { const { media, swiperContainer } = useStyles() return ( <Card> <CardHeader avatar={<Avatar src={avatarImage} />} title='Just a Carousel' subheader={new Date().toDateString()} action={ <IconButton> <MoreVertIcon /> </IconButton> } />
<Swiper grabCursor keyboard={{ enabled: true }} pagination={{ clickable: true }} navigation loop className={swiperContainer} > {images.map((image, index) => ( <SwiperSlide key={index}> <CardMedia className={media} image={image} /> </SwiperSlide> ))} </Swiper>
<CardActions disableSpacing> <IconButton> <FavoriteIcon /> </IconButton> <IconButton> <CommentIcon /> </IconButton> <IconButton> <ShareIcon /> </IconButton> </CardActions>
<CardContent> <Typography variant='body2' color='textSecondary' component='p'> Adipisicing eaque temporibus elit incidunt obcaecati. Aut eum excepturi id aut consequatur ex? Incidunt debitis at consequuntur accusamus rerum Tempora veritatis maiores quam molestias aut placeat qui. Iure neque libero voluptas aliquid! </Typography> </CardContent> </Card> ) }
export default PostCard
Объяснение:
- Мы использовали card, cardHeader и другие компоненты из Material UI.
- В компоненте CardMedia будет наш образ. Он имеет немного индивидуального стиля, поэтому он остается отзывчивым на любом размере экрана и всегда поддерживает соотношение сторон.
- Мы импортировали
Keyboard, Scrollbar, Pagination, Navigation
модулей из Swiperjs. Чтобы была навигация, навигация с клавиатуры и тд. - Мы добавили пользовательские стили в компонент
Swiper
, чтобы изменить значки компонентаSwiper
.
И проект готов. Пожалуйста, посмотрите видео для более подробной информации.