Carousel
Purpose
The Carousel
component allows you to show a collection of images in a cyclic view. By displaying only a subset of images, the screen space is optimized. The navigation items, such as arrows, suggest additional content that is not currently visible, which encourages the user to continue exploring.
Properties
Property | Type | Description | Required | Default value |
---|---|---|---|---|
children | Array of Element | Show text | Yes | - |
Element
The Element
component is part of the carousel. It refers to each element of the carousel and contains a title, a subtitle, an image and a button.
Property | Type | Description | Required | Default value |
---|---|---|---|---|
children | Botonic Components (Title, Subtitle, Pic, Button) | Define button elements | Yes | - |
Element Subcomponents
Title
The Title
component is used to give a title to each carousel’s element.
Property | Type | Description | Required | Default value |
---|---|---|---|---|
children | String | Show the title | Yes | - |
style | String or number | Define the style of the title | No | font-size 14px |
Subtitle
The Subtitle
component is used to add a description of each carousel’s element.
Property | Type | Description | Required | Default value |
---|---|---|---|---|
children | String | Show the subtitle | No | - |
style | String or number | Define the style of the subtitle | No | color: gray, font-size: 12px |
Pic
The Pic
component is used in a carousel to better visualize the conversation and draw attention with the help of an image.
Property | Type | Description | Required | Default value |
---|---|---|---|---|
src | URL | Show the image | Yes | - |
Example
To get this kind of carousel:
You can render it following the structure below:
import React from 'react'
import {
Text,
Button,
Carousel,
Pic,
Element,
Title,
Subtitle,
} from '@botonic/react'
export default class extends React.Component {
render() {
let movies = [
{
name: 'Pulp Fiction',
desc: 'Le Big Mac',
url: 'https://www.imdb.com/title/tt0110912',
pic:
'https://images-na.ssl-images-amazon.com/images/I/51Z95XQDHRL._SY445_.jpg',
},
{
name: 'The Big Lebowski',
desc: 'Fuck it Dude',
url: 'https://www.imdb.com/title/tt0118715',
pic:
'https://upload.wikimedia.org/wikipedia/en/a/a7/Snatch_ver4.jpg',
},
{
name: 'Snatch',
desc: 'Five minutes, Turkish',
url: 'https://www.imdb.com/title/tt0208092',
pic: 'http://www.libertytuga.pt/wp-content/uploads/2011/11/snatch.jpg',
},
]
return (
<>
<Text>This a dynamic Carousel</Text>
<Carousel>
{movies.map((e, i) => (
<Element key={e.name}>
<Pic src={e.pic} />
<Title>{e.name}</Title>
<Subtitle>{e.desc}</Subtitle>
<Button url={e.url}>Visit website</Button>
</Element>
))}
</Carousel>
</>
)
}
}
Customize or disable arrows on both sides of the carousel
You can disable or customize arrows displayed on the left and right sides of a carousel.
To do so:
- Add the following code in
src/webchat/index.js
:
import {
CustomCarouselLeftArrow,
CustomCarouselRightArrow,
} from './custom-carousel-arrows'
export const webchat = {
theme: {
enableCarouselArrows: {true|false},
customCarouselLeftArrow: CustomCarouselLeftArrow,
customCarouselRightArrow: CustomCarouselRightArrow,
},
}
- Add the following code in
src/webchat/custom-carousel-arrows.js
:
import React from 'react'
import styled from 'styled-components'
const StyledArrowContainer = styled.div`
position: absolute;
box-sizing: border-box;
top: 10px;
height: calc(100% - 20px);
width: 22px;
background: white;
display: flex;
align-items: center;
justify-content: center;
cursor: pointer;
left: ${(props) => props.left}px;
right: ${(props) => props.right}px;
const StyledArrow = styled.img`
width: 18px;
height: 18px;
`
export const CustomCarouselLeftArrow = (props) => {
return (
<StyledArrowContainer left={0} onClick={() => props.scrollCarouselBy(-228)}>
<StyledArrow
src={'https://image.flaticon.com/icons/svg/860/860790.svg'}
/>
</StyledArrowContainer>
)
}
export const CustomCarouselRightArrow = (props) => {
return (
<StyledArrowContainer right={0} onClick={() => props.scrollCarouselBy(228)}>
<StyledArrow
src={'https://image.flaticon.com/icons/svg/860/860828.svg'}
/>
</StyledArrowContainer>
)
}
Note: scrollCarouselBy
allows you to define the carousel's movement distance in pixels when clicking on the arrow.