UNPKG

taro-material

Version:

Mini Program components that implement Google's Material Design.

152 lines (134 loc) 3.04 kB
import Taro, { Component } from '@tarojs/taro'; import PropTypes from 'prop-types'; import { Swiper, SwiperItem, Image } from '@tarojs/components'; import theme from '../styles/theme'; import './index.scss'; class RMCarousel extends Component { componentWillMount() {} componentDidMount() {} componentWillUnmount() {} componentDidShow() {} componentDidHide() {} handleChange(e) { const { onChange } = this.props; onChange && onChange(...arguments); } handleClick(e, item, index) { const { onClick } = this.props; onClick && onClick(...arguments); } render() { const { items = [], speed, delay, autoplay, dots, vertical, multipleItems, current, customStyle, } = this.props; const style = { height: '100%', ...customStyle, }; return ( <Swiper className="carousel" indicatorColor={theme.palette.grey['300']} indicatorActiveColor={theme.palette.primary.main} vertical={vertical} skipHiddenItemLayout displayMultipleItems={multipleItems} circular indicatorDots={dots} interval={delay} duration={speed} autoplay={autoplay} current={current} onChange={this.handleChange} style={style} > {items.length > 0 && items.map((item, index) => ( <SwiperItem key={item.id || item.src} className="item" onClick={this.handleClick.bind(this, item, index)} > <Image className="image" src={item.src} mode="aspectFill" /> </SwiperItem> ))} {this.props.children} </Swiper> ); } } RMCarousel.propTypes = { /** * item list * eg. * [{ * src: '/static/images/grid-list/bike.jpg', * alt: 'images-1', * }, * { * src: '/static/images/grid-list/mushroom.jpg', * alt: 'images-2', * }, * { * src: '/static/images/grid-list/burgers.jpg', * alt: 'images-3', * }] */ items: PropTypes.array.isRequired, /** * speed of pictrue slide,unit second */ speed: PropTypes.number, /** * delay of pictrue slide,unit second */ delay: PropTypes.number, /** * autoplay */ autoplay: PropTypes.bool, /** * is dots showed */ dots: PropTypes.bool, /** * 滑动方向是否为纵向 */ vertical: PropTypes.bool, /** * 同时显示的滑块数量 */ multipleItems: PropTypes.number, /** * 当前所在滑块的 index */ current: PropTypes.number, /** * current 改变时会触发 change 事件 */ onChange: PropTypes.func, onClick: PropTypes.func, customStyle: PropTypes.object, }; RMCarousel.defaultProps = { items: [], speed: 500, delay: 5000, autoplay: false, dots: true, vertical: false, multipleItems: 1, current: 0, customStyle: {}, onChange: () => {}, onClick: () => {}, }; export default RMCarousel;