aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/module/Select.jsx
diff options
context:
space:
mode:
Diffstat (limited to 'src/module/Select.jsx')
-rw-r--r--src/module/Select.jsx12
1 files changed, 8 insertions, 4 deletions
diff --git a/src/module/Select.jsx b/src/module/Select.jsx
index be4c025..0b91ac5 100644
--- a/src/module/Select.jsx
+++ b/src/module/Select.jsx
@@ -3,6 +3,10 @@ import ReactDom from 'react-dom';
3import classnames from 'classnames'; 3import classnames from 'classnames';
4 4
5const scrollTo = (element, to, duration) => { 5const scrollTo = (element, to, duration) => {
6 const requestAnimationFrame = window.requestAnimationFrame ||
7 function requestAnimationFrameTimeout() {
8 return setTimeout(arguments[0], 10);
9 };
6 // jump to target if duration zero 10 // jump to target if duration zero
7 if (duration <= 0) { 11 if (duration <= 0) {
8 element.scrollTop = to; 12 element.scrollTop = to;
@@ -11,11 +15,11 @@ const scrollTo = (element, to, duration) => {
11 const difference = to - element.scrollTop; 15 const difference = to - element.scrollTop;
12 const perTick = difference / duration * 10; 16 const perTick = difference / duration * 10;
13 17
14 setTimeout(() => { 18 requestAnimationFrame(() => {
15 element.scrollTop = element.scrollTop + perTick; 19 element.scrollTop = element.scrollTop + perTick;
16 if (element.scrollTop === to) return; 20 if (element.scrollTop === to) return;
17 scrollTo(element, to, duration - 10); 21 scrollTo(element, to, duration - 10);
18 }, 10); 22 });
19}; 23};
20 24
21const Select = React.createClass({ 25const Select = React.createClass({
@@ -35,7 +39,7 @@ const Select = React.createClass({
35 39
36 componentDidUpdate() { 40 componentDidUpdate() {
37 // smooth scroll to selected option 41 // smooth scroll to selected option
38 this.scrollToSelected(200); 42 this.scrollToSelected(120);
39 }, 43 },
40 44
41 onSelect(value) { 45 onSelect(value) {
@@ -58,7 +62,7 @@ const Select = React.createClass({
58 // move to selected item 62 // move to selected item
59 const select = ReactDom.findDOMNode(this); 63 const select = ReactDom.findDOMNode(this);
60 const list = ReactDom.findDOMNode(this.refs.list); 64 const list = ReactDom.findDOMNode(this.refs.list);
61 let index = this.props.selectedIndex - 2; 65 let index = this.props.selectedIndex - 1;
62 if (index < 0) { 66 if (index < 0) {
63 index = 0; 67 index = 0;
64 } 68 }