UNPKG

7.41 kBJavaScriptView Raw
1import _extends from 'babel-runtime/helpers/extends';
2import _classCallCheck from 'babel-runtime/helpers/classCallCheck';
3import _possibleConstructorReturn from 'babel-runtime/helpers/possibleConstructorReturn';
4import _inherits from 'babel-runtime/helpers/inherits';
5
6var _class, _temp2;
7
8import React, { Component } from 'react';
9import classNames from 'classnames';
10import PropTypes from 'prop-types';
11import { obj } from '../util';
12import InnerSlider from './slick/inner-slider';
13import ConfigProvider from '../config-provider';
14
15/**
16 * Slider
17 */
18var Slider = (_temp2 = _class = function (_Component) {
19 _inherits(Slider, _Component);
20
21 function Slider() {
22 var _temp, _this, _ret;
23
24 _classCallCheck(this, Slider);
25
26 for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {
27 args[_key] = arguments[_key];
28 }
29
30 return _ret = (_temp = (_this = _possibleConstructorReturn(this, _Component.call.apply(_Component, [this].concat(args))), _this), _this.resize = function () {
31 // export api
32 _this.innerSlider.onWindowResized();
33 }, _temp), _possibleConstructorReturn(_this, _ret);
34 }
35
36 Slider.prototype.render = function render() {
37 var _this2 = this;
38
39 var _props = this.props,
40 prefix = _props.prefix,
41 arrowPosition = _props.arrowPosition,
42 slideDirection = _props.slideDirection,
43 style = _props.style,
44 className = _props.className,
45 children = _props.children;
46
47
48 var globalProps = {};
49 Object.keys(ConfigProvider.propTypes).forEach(function (key) {
50 globalProps[key] = _this2.props[key];
51 });
52
53 var sliderProps = obj.pickOthers(['className', 'style', 'slideDirection'], this.props);
54 var slideCount = React.Children.count(children);
55
56 if (slideCount === 0) {
57 // 没有 item 时不显示 slider
58 return null;
59 } else if (slideCount === 1) {
60 // 单个 item 时不显示箭头和控制器
61 sliderProps.arrows = false;
62 sliderProps.autoplay = false;
63 sliderProps.draggable = false;
64 }
65
66 var clazz = classNames([prefix + 'slick', prefix + 'slick-' + arrowPosition, prefix + 'slick-' + slideDirection], className);
67
68 if (slideDirection === 'ver') {
69 // 向下传递时使用 vertical 属性
70 sliderProps.vertical = true;
71 sliderProps.verticalSwiping = true;
72 }
73
74 return React.createElement(
75 ConfigProvider,
76 _extends({}, globalProps, { rtl: false }),
77 React.createElement(
78 'div',
79 _extends({
80 dir: 'ltr',
81 className: clazz,
82 style: style
83 }, obj.pickOthers(_extends({}, Slider.propTypes, InnerSlider.propTypes), sliderProps)),
84 React.createElement(InnerSlider, _extends({
85 ref: function ref(InnerSlider) {
86 return _this2.innerSlider = InnerSlider;
87 }
88 }, sliderProps))
89 )
90 );
91 };
92
93 return Slider;
94}(Component), _class.propTypes = {
95 prefix: PropTypes.string,
96 rtl: PropTypes.bool,
97 /**
98 * 自定义传入的样式
99 */
100 className: PropTypes.any,
101 /**
102 * 是否使用自适应高度
103 */
104 adaptiveHeight: PropTypes.bool,
105 /**
106 * 动效类型,默认是'slide'
107 */
108 animation: PropTypes.oneOfType([PropTypes.string, PropTypes.bool]),
109 /**
110 * 是否显示箭头
111 */
112 arrows: PropTypes.bool,
113 /**
114 * 导航箭头大小 可选值: 'medium', 'large'
115 */
116 arrowSize: PropTypes.oneOf(['medium', 'large']),
117 /**
118 * 导航箭头位置 可选值: 'inner', 'outer'
119 */
120 arrowPosition: PropTypes.oneOf(['inner', 'outer']),
121 /**
122 * 导航箭头的方向 可选值: 'hoz', 'ver'
123 */
124 arrowDirection: PropTypes.oneOf(['hoz', 'ver']),
125 /**
126 * 是否自动播放
127 */
128 autoplay: PropTypes.bool,
129 /**
130 * 自动播放的速度
131 */
132 autoplaySpeed: PropTypes.number,
133 /**
134 * 向后箭头
135 */
136 nextArrow: PropTypes.element,
137 /**
138 * 向前箭头
139 */
140 prevArrow: PropTypes.element,
141 /**
142 * 是否启用居中模式
143 */
144 centerMode: PropTypes.bool,
145 /**
146 * 是否显示导航锚点
147 */
148 dots: PropTypes.bool,
149 /**
150 * 导航锚点位置
151 */
152 dotsDirection: PropTypes.oneOf(['hoz', 'ver']),
153 dotsClass: PropTypes.string,
154 /**
155 * 自定义导航锚点
156 */
157 dotsRender: PropTypes.func,
158 /**
159 * 是否可拖拽
160 */
161 draggable: PropTypes.bool,
162 /**
163 * 是否使用无穷循环模式
164 */
165 infinite: PropTypes.bool,
166 /**
167 * 初始被激活的轮播图
168 */
169 defaultActiveIndex: PropTypes.number,
170 /**
171 * 是否启用懒加载
172 */
173 lazyLoad: PropTypes.bool,
174 slide: PropTypes.string,
175 /**
176 * 轮播方向
177 */
178 slideDirection: PropTypes.oneOf(['hoz', 'ver']),
179 /**
180 * 同时展示的图片数量
181 */
182 slidesToShow: PropTypes.number,
183 /**
184 * 同时滑动的图片数量
185 */
186 slidesToScroll: PropTypes.number,
187 /**
188 * 轮播速度
189 */
190 speed: PropTypes.number,
191 /**
192 * 跳转到指定的轮播图(受控)
193 */
194 activeIndex: PropTypes.number,
195 /**
196 * 锚点导航触发方式
197 */
198 triggerType: PropTypes.oneOf(['click', 'hover']),
199 /**
200 * 轮播切换的回调函数
201 * @param {Number} index 幻灯片的索引
202 */
203 onChange: PropTypes.func,
204 onBeforeChange: PropTypes.func, // 兼容 0.x onBeforeChange
205 children: PropTypes.any,
206 /**
207 * 自定义传入的class
208 */
209 style: PropTypes.object,
210 /**
211 * Side padding when in center mode (px or %); 展示部分为center,pading会产生前后预览
212 */
213 centerPadding: PropTypes.string,
214 /**
215 * CSS3 Animation Easing,默认‘ease’
216 */
217 cssEase: PropTypes.string, // used
218 edgeFriction: PropTypes.number, // 非无限轮播滑动到边缘时的阻力
219 /**
220 * 多图轮播时,点击选中后自动居中
221 */
222 focusOnSelect: PropTypes.bool,
223 pauseOnHover: PropTypes.bool, // 鼠标经过时停止播放
224 swipe: PropTypes.bool,
225 swipeToSlide: PropTypes.bool,
226 touchMove: PropTypes.bool,
227 touchThreshold: PropTypes.number,
228 useCSS: PropTypes.bool,
229 variableWidth: PropTypes.bool, // used
230 waitForAnimate: PropTypes.bool,
231 edgeEvent: PropTypes.any,
232 swipeEvent: PropTypes.any
233}, _class.defaultProps = {
234 prefix: 'next-',
235 animation: 'slide',
236 arrowSize: 'medium',
237 arrowPosition: 'inner',
238 vertical: false,
239 verticalSwiping: false,
240 dots: true,
241 dotsDirection: 'hoz',
242 arrows: true,
243 arrowDirection: 'hoz',
244 infinite: true,
245 autoplay: false,
246 autoplaySpeed: 3000,
247 speed: 600,
248 adaptiveHeight: false,
249 centerMode: false,
250 centerPadding: '50px', // Side padding when in center mode (px or %); 展示部分为center,pading会产生前后预览
251 cssEase: 'ease',
252 draggable: true,
253 edgeFriction: 0.35,
254 focusOnSelect: false,
255 defaultActiveIndex: 0,
256 lazyLoad: false,
257 pauseOnHover: false,
258 rtl: false,
259 slide: 'div',
260 slideDirection: 'hoz',
261 slidesToShow: 1,
262 slidesToScroll: 1,
263 swipe: true,
264 swipeToSlide: false, // Allow users to drag or swipe directly to a slide irrespective of slidesToScroll
265 touchMove: true, // 移动端touch
266 touchThreshold: 5,
267 useCSS: true,
268 variableWidth: false,
269 waitForAnimate: true,
270 onChange: function onChange() {},
271 onBeforeChange: function onBeforeChange() {},
272 edgeEvent: null,
273 swipeEvent: null,
274 nextArrow: null, // nextArrow, prevArrow are react components
275 prevArrow: null,
276 style: null,
277 dotsRender: null,
278 triggerType: 'click'
279}, _temp2);
280Slider.displayName = 'Slider';
281export { Slider as default };
\No newline at end of file