Bear Carousel
如果你想要做一些客製化
import BearCarousel from 'bear-react-carousel';
<BearCarousel
// ...ignore some
height="250px"
/>
Props
參數名稱 | 類型 | Required | 預設值 | 說明 |
---|---|---|---|---|
style | CSS.Properties | |||
className | string | |||
setController | (controller: Controller) => void | 手動控制輪播 | ||
syncCarouselRef | RefObject<BearCarousel> | 自動同步控制另一個 bear-react-carousel | ||
data | BearSlideCard | BearSlideImage[] | ✓ | 輪播項目的資料 | |
slidesPerView | number | auto | 1 | 在 Container 中一次顯示幾個輪播項目 | |
slidesPerGroup | number | 1 | 一頁移動幾個輪播項目 | |
height | string | IAspectRatio | 輪播項目的高度 | ||
spaceBetween | number | 輪播項目的間距 | ||
moveTime | number | 500(ms) | 輪播項目的移動速度 | |
isCenteredSlides | boolean | false | 使否使用輪播項目置中模式 | |
isEnableLoop | boolean | false | 是否使用重複無限下一個模式 | |
isEnablePagination | boolean | false | 是否顯示分頁導航 | |
isEnableNavButton | boolean | false | 是否顯示控制上下頁導航 | |
isEnableMouseMove | boolean | true | 是否允許滑鼠拖動 | |
isEnableAutoPlay | boolean | false | 是否自動輪播 | |
isEnableGPURender | boolean | false | 是否使用 GPURender, 如果卡片階層較複雜,可開啟讓滑動較順暢,但較佔用記憶體 | |
isLazy | boolean | 背景是否使用懶加載 | ||
renderPreloader | () => JSX.Element | 背景使用懶加載,而在被載入前的過渡 Element | ||
autoPlayTime | number | 5000(ms) | 自動播放輪播的間隔秒數 | |
initStartPlayTime | number | 5000(ms) | 自動播放輪播的間隔秒數 | |
renderNavButton | TRenderNavButton | 自定義輪播上下頁導航按鈕 | ||
renderPagination | TRenderPagination | 自定義輪播分頁 | ||
breakpoints | IPropsBreakpoints | 響應式設定(RWD)s | ||
onSlideChange | TOnSlideChange | 當輪播項目更改Index時的事件 | ||
onAnimationEnd | TOnAnimationEnd | 當輪播滑動結束後的事件 | ||
moveEffect | IMoveEffect | 輪播項目移動時的效果 | ||
movePercentage | number | 0.1 | 移動距離比例(切換上下頁的判斷) | |
onMount | () => void | 當輪播項目被 componentDidMount 時的事件 | ||
isDebug | boolean | 是否顯示 Debug 資訊 |
Controller
控制器
Method Name | Type | Default | Description |
---|---|---|---|
slideToPrevPage | () => void | 移動到上一頁 | |
slideToNextPage | () => void | 移動到下一頁 | |
slideToPage | (page: number, isUseAnimation = true) => void | 移動到目標頁面 | |
slideToSourceIndex | (slideIndex: number, options?: {isUseAnimation?: boolean, isEmitEvent?: boolean}) => void | 移動到輪播項目Index |
IAspectRatio
這裡我們利用CSS的比例屬性 aspect-ratio (不是使用 padding-bottom: ?%
的方法)
參數名稱 | 類型 | Required | 預設值 | 說明 |
---|---|---|---|---|
widthRatio | number | ✓ | 比例: 寬 | |
heightRatio | number | ✓ | 比例: 高 |
TRenderNavButton
type TRenderNavButton = (toPrev: () => void, toNext: () => void) => void
TRenderPagination
type TRenderPagination = (pageTotal: number) => JSX.Element[]
IPropsBreakpoints
interface IPropsBreakpoints {
[key: number]: Partial<IBreakpointSetting>
}
interface IBreakpointSetting {
slidesPerView: TSlidesPerView
slidesPerGroup: number
height?: string|IAspectRatio
spaceBetween: number
isCenteredSlides: boolean
isEnableLoop: boolean
isEnablePageContent: boolean
isEnablePagination: boolean
isEnableNavButton: boolean
isEnableMouseMove: boolean
isEnableAutoPlay: boolean
}
TOnSlideChange
當項目移動時事件回傳資訊
type TOnSlideChange = (carouselState: ICarouselState) => void
interface ICarouselState {
source: {
activeIndex: number
lastIndex: number
total: number
}
virtual: {
activeIndex: number
lastIndex: number
total: number
}
page: {
activePage: number
total: number
}
}
TOnAnimationEnd
當項目移動時動 畫結束事件回傳資訊
type TOnAnimationEnd = (carouselState: ICarouselState, elementor: Elementor) => void
class Elementor {
_rootRef: RefObject<HTMLDivElement> = createRef();
_containerRef: RefObject<HTMLDivElement> = createRef();
_pageGroupRef: RefObject<HTMLDivElement> = createRef();
_navGroupRef: RefObject<HTMLDivElement> = createRef();
_slideItemRefs: IMultiRefObject<Array<HTMLDivElement>> = createRef();
_pageRefs: IMultiRefObject<Array<HTMLDivElement>> = createRef();
// ...ignore
}
IMoveEffect
在移動中應用不同的動態效果,目前僅支持 transformY
,如有其他需求請發 Issue
查看範例效果 MoveEffect Example
參數名稱 | 類型 | Required | 預設值 | 說明 |
---|---|---|---|---|
transformY | string | transformY px | ||
moveTime | number | .5s | transform time |