UNPKG

3.78 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, _temp;
7
8import React from 'react';
9import PropTypes from 'prop-types';
10import classNames from 'classnames';
11import { func } from '../../util';
12
13/**
14 * slider dots
15 * 导航锚点
16 */
17
18var noop = func.noop;
19var Dots = (_temp = _class = function (_React$Component) {
20 _inherits(Dots, _React$Component);
21
22 function Dots() {
23 _classCallCheck(this, Dots);
24
25 return _possibleConstructorReturn(this, _React$Component.apply(this, arguments));
26 }
27
28 Dots.prototype.handleChangeSlide = function handleChangeSlide(options, e) {
29 e.preventDefault();
30
31 this.props.changeSlide(options);
32 };
33
34 Dots.prototype.render = function render() {
35 var _props = this.props,
36 prefix = _props.prefix,
37 slideCount = _props.slideCount,
38 slidesToScroll = _props.slidesToScroll,
39 currentSlide = _props.currentSlide,
40 dotsClass = _props.dotsClass,
41 dotsDirection = _props.dotsDirection,
42 dotsRender = _props.dotsRender,
43 triggerType = _props.triggerType,
44 rtl = _props.rtl;
45
46
47 var dotsClazz = classNames(prefix + 'slick-dots', dotsDirection, dotsClass);
48 var dotCount = Math.ceil(slideCount / slidesToScroll);
49 var children = [];
50
51 for (var i = 0; i < dotCount; i++) {
52 var _handleProp;
53
54 var leftBound = i * slidesToScroll;
55 var rightBound = leftBound + slidesToScroll - 1;
56 var itemClazz = classNames(prefix + 'slick-dots-item', {
57 active: currentSlide >= leftBound && currentSlide <= rightBound
58 });
59 var dotOptions = {
60 message: 'dots',
61 index: i,
62 slidesToScroll: slidesToScroll,
63 currentSlide: currentSlide
64 };
65 // 除非设置为hover,默认使用click触发
66 var handleProp = (_handleProp = {}, _handleProp[triggerType.toLowerCase() === 'hover' ? 'onMouseEnter' : 'onClick'] = this.handleChangeSlide.bind(this, dotOptions), _handleProp);
67
68 var docIndex = i;
69 var currentSlideIndex = currentSlide;
70 if (rtl) {
71 docIndex = dotCount - 1 - i;
72 currentSlideIndex = dotCount - 1 - currentSlide;
73 }
74
75 children.push(React.createElement(
76 'li',
77 _extends({ key: i, className: itemClazz }, handleProp),
78 dotsRender instanceof Function ? React.createElement(
79 'span',
80 null,
81 dotsRender(docIndex, currentSlideIndex)
82 ) :
83 // Slider is navigated by right and left arrow buttons so the dots are not required functionality
84 React.createElement('button', { tabIndex: '-1' })
85 ));
86 }
87
88 return React.createElement(
89 'ul',
90 { className: dotsClazz, 'aria-hidden': 'true' },
91 children
92 );
93 };
94
95 return Dots;
96}(React.Component), _class.propTypes = {
97 prefix: PropTypes.string,
98 currentSlide: PropTypes.number,
99 changeSlide: PropTypes.func,
100 dotsClass: PropTypes.string,
101 slideCount: PropTypes.number,
102 slidesToScroll: PropTypes.number,
103 dotsDirection: PropTypes.oneOf(['hoz', 'ver']),
104 dotsRender: PropTypes.func,
105 triggerType: PropTypes.string
106}, _class.defaultProps = {
107 changeSlide: noop
108}, _temp);
109Dots.displayName = 'Dots';
110export { Dots as default };
\No newline at end of file