Compare commits

...
16 Commits
Author SHA1 Message Date
simaQ 19f1183634 update version 2015-08-29 10:58:26 +08:00
simaQ 200d0810ce Merge pull request #21 from danioso/master
Sending new value to _start while dragging
2015-08-29 10:57:19 +08:00
Daniel Osorio e7007fbe8e Sending new value to _start while dragging 2015-08-27 19:23:57 -05:00
yiminghe 8f490c80be up 2015-08-25 21:45:26 +08:00
simaQ a68a839515 update README.md 2015-08-24 14:07:38 +08:00
Emma e615ffb7b0 Merge pull request #20 from jljsj33/addAnimation
add slider animation
2015-08-24 13:59:45 +08:00
jljsj c643ae235e tipTransitionName is tag 2015-08-24 13:21:08 +08:00
jljsj 93c92f5f37 改名字 2015-08-24 13:12:46 +08:00
jljsj 35ba80d884 add slider animation 2015-08-24 11:56:37 +08:00
simaQ c28f14272d update version 2015-08-19 17:37:45 +08:00
simaQ b70a4e8c94 fix: fix ie8 can not support e.pageX bug. 2015-08-19 17:18:36 +08:00
simaQ 41f5ddb9bd fix: Slider 点击圆点后气泡提示会消失以及分段式滑块无法拖动问题。 2015-08-19 16:51:28 +08:00
yiminghe 38edc4db93 update travis 2015-08-10 19:27:48 +08:00
yiminghe 93ddaef0c3 update demo 2015-08-07 12:50:38 +08:00
yiminghe dbc64888bc update docs 2015-08-07 12:47:07 +08:00
yiminghe 2112385ccc remove npmignore 2015-08-07 12:44:49 +08:00
7 changed files with 122 additions and 54 deletions
-29
View File
@@ -1,29 +0,0 @@
build/
*.cfg
nohup.out
*.iml
.idea/
.ipr
.iws
*~
~*
*.diff
*.log
*.patch
*.bak
.DS_Store
Thumbs.db
.project
.*proj
.svn/
*.swp
out/
.build
node_modules
.cache
examples
tests
src
/index.js
.*
assets/**/*.less
+7
View File
@@ -1,5 +1,7 @@
language: node_js
sudo: false
notifications:
email:
- yiminghe@gmail.com
@@ -34,3 +36,8 @@ env:
global:
- secure: S1VwbaPzLnSH/IUT/wlJulxAX5VHRIDmSt53h/ycHcZsszUpWcLCJRQAe0fTVB2dAx5MdBbSZ+o+tr3tRwVB5TRAYm0oTCsYAkOZaWOB28RuUQtdGt3wf9xxTG1UiPiaLLUW3waX9zAaf3yqKBcJGf1op0RD8dksxbCFw/7xVbU=
- secure: EBEDg8k///IlEsnx0AE8X3mbFl0QE5+xGKbG4AxXlGZda12uTIPUSMKJzdZQ2hVbZXduTzf1cQl9rcu9nGoSnkL/DWnIax9cvHi+1orx5+YPlxPHNWAwWByTnHosBn2MJhfy1s5paJfHC9cUzmmEL6x4fYthWxjsPUo+irEZH6E=
matrix:
allow_failures:
- env: "TEST_TYPE=saucelabs"
+22 -4
View File
@@ -99,6 +99,12 @@ React.render(<Rcslider />, container);
<td>number</td>
<td>0</td>
<td>Determines the initial positions of the handles.</td>
</tr>
<tr>
<td>value</td>
<td>number</td>
<td></td>
<td>Determines the current positions of the handles.</td>
</tr>
<tr>
<td>marks</td>
@@ -118,12 +124,24 @@ React.render(<Rcslider />, container);
<td>0</td>
<td>For step or marks slider, determine the initial positions of the handles.</td>
</tr>
<tr>
<td>index</td>
<td>number</td>
<td></td>
<td>For step or marks slider, determine current positions of the handles.</td>
</tr>
<tr>
<td>disabled</td>
<td>boolean</td>
<td>false</td>
<td>If true the handles can't be moved.</td>
</tr>
<tr>
<td>tipTransitionName</td>
<td>string</td>
<td>''</td>
<td>Set the animation for tooltip if it shows.</td>
</tr>
</tbody>
</table>
@@ -136,17 +154,17 @@ npm start
## Example
http://localhost:8000/examples/
http://localhost:8005/examples/
online example: http://react-component.github.io/slider/examples/
online example: http://react-component.github.io/slider/
## Test Case
http://localhost:8000/tests/runner.html?coverage
http://localhost:8005/tests/runner.html?coverage
## Coverage
http://localhost:8000/node_modules/rc-server/node_modules/node-jscover/lib/front-end/jscoverage.html?w=http://localhost:8088/tests/runner.html?coverage
http://localhost:8005/node_modules/rc-server/node_modules/node-jscover/lib/front-end/jscoverage.html?w=http://localhost:8088/tests/runner.html?coverage
## License
+62
View File
@@ -8,6 +8,8 @@
@tooltip-arrow-width: 4px;
@tooltip-distance: @tooltip-arrow-width+4;
@tooltip-arrow-color: @tooltip-bg;
@ease-out-quint : cubic-bezier(0.23, 1, 0.32, 1);
@ease-in-quint : cubic-bezier(0.755, 0.05, 0.855, 0.06);
* {
box-sizing: border-box;
@@ -174,4 +176,64 @@
border-top-color: @tooltip-arrow-color;
}
}
}
.motion-common() {
animation-duration: .3s;
animation-fill-mode: both;
display: block !important;
}
.make-motion(@className, @keyframeName) {
.@{className}-enter, .@{className}-appear {
.motion-common();
animation-play-state: paused;
}
.@{className}-leave {
.motion-common();
animation-play-state: paused;
}
.@{className}-enter.@{className}-enter-active, .@{className}-appear.@{className}-appear-active {
animation-name: ~"@{keyframeName}In";
animation-play-state: running;
}
.@{className}-leave.@{className}-leave-active {
animation-name: ~"@{keyframeName}Out";
animation-play-state: running;
}
}
.zoom-motion(@className, @keyframeName) {
.make-motion(@className, @keyframeName);
.@{className}-enter, .@{className}-appear {
transform: scale(0, 0); // need this by yiminghe
animation-timing-function: @ease-out-quint;
}
.@{className}-leave {
animation-timing-function: @ease-in-quint;
}
}
.zoom-motion(zoom-down, zoomDown);
@keyframes zoomDownIn {
0% {
opacity: 0;
transform-origin: 50% 100%;
transform: scale(0, 0);
}
100% {
transform-origin: 50% 100%;
transform: scale(1, 1);
}
}
@keyframes zoomDownOut {
0% {
transform-origin: 50% 100%;
transform: scale(1, 1);
}
100% {
opacity: 0;
transform-origin: 50% 100%;
transform: scale(0, 0);
}
}
+4 -4
View File
@@ -1,6 +1,6 @@
'use strict';
require('rc-slider/assets/index.css');
require('rc-slider/assets/index.less');
var Slider = require('rc-slider');
var React = require('react');
@@ -9,6 +9,6 @@ function onChange(v){
console.log(v);
}
// React.render(<Slider marks={["一","二","三","四","五"]} index={3}/>, document.getElementById('__react-content'));
// React.render(<Slider className='rc-slider' step={20}/>, document.getElementById('__react-content'));
React.render(<div style={{width:400,margin:100}}><Slider onChange={onChange}/></div>, document.getElementById('__react-content'));
// React.render(<div style={{width:400,margin:100}}><Slider marks={["一","二","三","四","五"]} defaultIndex={2} /></div>, document.getElementById('__react-content'));
// React.render(<div style={{width:400,margin:100}}><Slider className='rc-slider' step={20}/></div>, document.getElementById('__react-content'));
React.render(<div style={{width:400,margin:100}}><Slider onChange={onChange} tipTransitionName='zoom-down'/></div>, document.getElementById('__react-content'));
+2 -2
View File
@@ -1,6 +1,6 @@
{
"name": "rc-slider",
"version": "1.4.0",
"version": "1.4.5",
"description": "slider ui component for react",
"keywords": [
"react",
@@ -24,7 +24,7 @@
"licenses": "MIT",
"main": "./lib/index.js",
"config": {
"port": 8000
"port": 8005
},
"scripts": {
"build": "rc-tools run build",
+25 -15
View File
@@ -33,7 +33,7 @@ function getValueFromIndex(props) {
}
if (marksLen > 0) {
value = ((props.max - props.min) / (marksLen - 1)) * (index);
value = value.toFixed(5);
value = value.toFixed(5) / 1;
}
return value;
}
@@ -56,6 +56,7 @@ const Slider = React.createClass({
onBeforeChange: React.PropTypes.func,
onChange: React.PropTypes.func,
onAfterChange: React.PropTypes.func,
tipTransitionName: React.PropTypes.string,
},
getDefaultProps() {
@@ -70,6 +71,7 @@ const Slider = React.createClass({
prefixCls: 'rc-slider',
disabled: false,
defaultIndex: 0,
tipTransitionName: '',
};
},
@@ -103,8 +105,14 @@ const Slider = React.createClass({
}
},
onMouseUp() {
this._end('mouse');
onMouseUp(e) {
const m = e.target;
const handleDom = React.findDOMNode(this.refs.handle);
let showToolTip = false;
if (m === handleDom) {
showToolTip = true;
}
this._end('mouse', showToolTip);
},
onTouchUp() {
@@ -112,7 +120,7 @@ const Slider = React.createClass({
},
onMouseMove(e) {
const position = e.pageX;
const position = e.pageX || (e.clientX + document.documentElement.scrollLeft); // to compat ie8
this.onMove(e, position);
},
@@ -156,16 +164,16 @@ const Slider = React.createClass({
const position = this._getTouchPosition(e);
const value = this._calValueByPos(position);
this._triggerEvents('onChange', value);
this._start(position);
this._start(position, value);
this._addDocumentEvents('touch');
pauseEvent(e);
},
onSliderMouseDown(e) {
const position = e.pageX;
const position = e.pageX || (e.clientX + document.documentElement.scrollLeft); // to compat ie8
const value = this._calValueByPos(position);
this._triggerEvents('onChange', value);
this._start(position);
this._start(position, value);
this._addDocumentEvents('mouse');
pauseEvent(e);
},
@@ -299,6 +307,7 @@ const Slider = React.createClass({
tooltipVisible = true;
} else {
events = {
onClick: this.showTooltip.bind(this, true),
onMouseEnter: this.showTooltip.bind(this, true),
onMouseLeave: this.showTooltip.bind(this, false),
};
@@ -307,8 +316,8 @@ const Slider = React.createClass({
const handle = (<div className={className}
{...events}
ref="handle"
style={onStyle}></div>);
ref="handle"
style={onStyle}></div>);
if (this.props.marks.length > 0) {
return handle;
@@ -319,6 +328,7 @@ const Slider = React.createClass({
visible={tooltipVisible}
overlay={<span>{this.state.value}</span>}
delay={0}
transitionName={this.props.tipTransitionName}
prefixCls={prefixClsFn(prefixCls, 'tooltip')}>
{handle}
</Tooltip>
@@ -357,8 +367,8 @@ const Slider = React.createClass({
return (
<div className={rcUtil.classSet(sliderClassName)} ref="slider"
onTouchStart={disabled ? noop : this.onTouchStart}
onMouseDown={disabled ? noop : this.onSliderMouseDown}>
onTouchStart={disabled ? noop : this.onTouchStart}
onMouseDown={disabled ? noop : this.onSliderMouseDown}>
{track}
{ons}
{steps}
@@ -458,21 +468,21 @@ const Slider = React.createClass({
}
},
_start(position) {
_start(position, value) {
this._triggerEvents('onBeforeChange');
this.startValue = this.state.value;
this.startValue = value;
this.startPosition = position;
this.setState({
dragging: true,
});
},
_end(type) {
_end(type, showToolTip) {
this._removeEventons(type);
this._triggerEvents('onAfterChange');
this.setState({
dragging: false,
showTooltip: false,
showTooltip: !!showToolTip,
});
},
});