import classnames from 'classnames';
const scrollTo = (element, to, duration) => {
+ const requestAnimationFrame = window.requestAnimationFrame ||
+ function requestAnimationFrameTimeout() {
+ return setTimeout(arguments[0], 10);
+ };
// jump to target if duration zero
if (duration <= 0) {
element.scrollTop = to;
const difference = to - element.scrollTop;
const perTick = difference / duration * 10;
- setTimeout(() => {
+ requestAnimationFrame(() => {
element.scrollTop = element.scrollTop + perTick;
if (element.scrollTop === to) return;
scrollTo(element, to, duration - 10);
- }, 10);
+ });
};
const Select = React.createClass({
propTypes: {
prefixCls: PropTypes.string,
options: PropTypes.array,
+ gregorianCalendarLocale: PropTypes.object,
selectedIndex: PropTypes.number,
type: PropTypes.string,
onSelect: PropTypes.func,
componentDidUpdate() {
// smooth scroll to selected option
- this.scrollToSelected(200);
+ this.scrollToSelected(120);
},
- onSelect(event) {
- // do nothing when select selected option
- if (event.target.getAttribute('class') === 'selected') {
- return;
- }
- // change combobox selection
+ onSelect(value) {
const { onSelect, type } = this.props;
- const value = parseInt(event.target.innerHTML, 10);
onSelect(type, value);
},
getOptions() {
- const { options, selectedIndex } = this.props;
+ const { options, selectedIndex, prefixCls } = this.props;
return options.map((item, index) => {
- const cls = classnames({ selected: selectedIndex === index});
- const ref = selectedIndex === index ? 'selected' : null;
- return <li ref={ref} className={cls} key={index} onClick={this.onSelect}>{item}</li>;
+ const selected = selectedIndex === index;
+ const cls = classnames({
+ [`${prefixCls}-select-option-selected`]: selected,
+ });
+ return <li className={cls} key={index} onClick={this.onSelect.bind(this, +item)}>{item}</li>;
});
},
// move to selected item
const select = ReactDom.findDOMNode(this);
const list = ReactDom.findDOMNode(this.refs.list);
- let index = this.props.selectedIndex - 2;
+ let index = this.props.selectedIndex - 1;
if (index < 0) {
index = 0;
}