add slider animation

This commit is contained in:
jljsj
2015-08-24 11:56:37 +08:00
parent c28f14272d
commit 35ba80d884
3 changed files with 81 additions and 10 deletions
+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);
}
}
+2 -2
View File
@@ -1,6 +1,6 @@
{
"name": "rc-slider",
"version": "1.4.3",
"version": "1.4.4",
"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",
+17 -8
View File
@@ -56,6 +56,7 @@ const Slider = React.createClass({
onBeforeChange: React.PropTypes.func,
onChange: React.PropTypes.func,
onAfterChange: React.PropTypes.func,
transitionName: React.PropTypes.string,
},
getDefaultProps() {
@@ -70,6 +71,7 @@ const Slider = React.createClass({
prefixCls: 'rc-slider',
disabled: false,
defaultIndex: 0,
transitionName: 'zoom-down',
};
},
@@ -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() {
@@ -308,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;
@@ -320,6 +328,7 @@ const Slider = React.createClass({
visible={tooltipVisible}
overlay={<span>{this.state.value}</span>}
delay={0}
transitionName={this.props.transitionName}
prefixCls={prefixClsFn(prefixCls, 'tooltip')}>
{handle}
</Tooltip>
@@ -358,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}
@@ -468,12 +477,12 @@ const Slider = React.createClass({
});
},
_end(type) {
_end(type, showToolTip) {
this._removeEventons(type);
this._triggerEvents('onAfterChange');
this.setState({
dragging: false,
showTooltip: false,
showTooltip: !!showToolTip,
});
},
});