Compare commits

...
17 Commits
Author SHA1 Message Date
yiminghe 2c41239d90 fix style. fixes #19 2015-10-14 23:03:46 +08:00
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
8 changed files with 136 additions and 65 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 language: node_js
sudo: false
notifications: notifications:
email: email:
- yiminghe@gmail.com - yiminghe@gmail.com
@@ -34,3 +36,8 @@ env:
global: global:
- secure: S1VwbaPzLnSH/IUT/wlJulxAX5VHRIDmSt53h/ycHcZsszUpWcLCJRQAe0fTVB2dAx5MdBbSZ+o+tr3tRwVB5TRAYm0oTCsYAkOZaWOB28RuUQtdGt3wf9xxTG1UiPiaLLUW3waX9zAaf3yqKBcJGf1op0RD8dksxbCFw/7xVbU= - secure: S1VwbaPzLnSH/IUT/wlJulxAX5VHRIDmSt53h/ycHcZsszUpWcLCJRQAe0fTVB2dAx5MdBbSZ+o+tr3tRwVB5TRAYm0oTCsYAkOZaWOB28RuUQtdGt3wf9xxTG1UiPiaLLUW3waX9zAaf3yqKBcJGf1op0RD8dksxbCFw/7xVbU=
- secure: EBEDg8k///IlEsnx0AE8X3mbFl0QE5+xGKbG4AxXlGZda12uTIPUSMKJzdZQ2hVbZXduTzf1cQl9rcu9nGoSnkL/DWnIax9cvHi+1orx5+YPlxPHNWAwWByTnHosBn2MJhfy1s5paJfHC9cUzmmEL6x4fYthWxjsPUo+irEZH6E= - 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>number</td>
<td>0</td> <td>0</td>
<td>Determines the initial positions of the handles.</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>
<tr> <tr>
<td>marks</td> <td>marks</td>
@@ -118,12 +124,24 @@ React.render(<Rcslider />, container);
<td>0</td> <td>0</td>
<td>For step or marks slider, determine the initial positions of the handles.</td> <td>For step or marks slider, determine the initial positions of the handles.</td>
</tr> </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> <tr>
<td>disabled</td> <td>disabled</td>
<td>boolean</td> <td>boolean</td>
<td>false</td> <td>false</td>
<td>If true the handles can't be moved.</td> <td>If true the handles can't be moved.</td>
</tr> </tr>
<tr>
<td>tipTransitionName</td>
<td>string</td>
<td>''</td>
<td>Set the animation for tooltip if it shows.</td>
</tr>
</tbody> </tbody>
</table> </table>
@@ -136,17 +154,17 @@ npm start
## Example ## 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 ## Test Case
http://localhost:8000/tests/runner.html?coverage http://localhost:8005/tests/runner.html?coverage
## 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 ## License
+71 -5
View File
@@ -8,15 +8,17 @@
@tooltip-arrow-width: 4px; @tooltip-arrow-width: 4px;
@tooltip-distance: @tooltip-arrow-width+4; @tooltip-distance: @tooltip-arrow-width+4;
@tooltip-arrow-color: @tooltip-bg; @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);
* { .borderBox() {
box-sizing: border-box; box-sizing: border-box;
-webkit-tap-highlight-color: rgba(0, 0, 0, 0); // remove tap highlight color for mobile safari -webkit-tap-highlight-color: rgba(0, 0, 0, 0); // remove tap highlight color for mobile safari
}
*:before, * {
*:after { box-sizing: border-box;
box-sizing: border-box; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); // remove tap highlight color for mobile safari
}
} }
.@{prefixClass} { .@{prefixClass} {
@@ -26,6 +28,8 @@
border-radius: @border-radius-base; border-radius: @border-radius-base;
background-color: #e9e9e9; background-color: #e9e9e9;
.borderBox();
&-track { &-track {
position: absolute; position: absolute;
left: 0; left: 0;
@@ -136,6 +140,8 @@
z-index: 4; z-index: 4;
visibility: visible; visibility: visible;
.borderBox();
&-hidden { &-hidden {
display: none; display: none;
} }
@@ -174,4 +180,64 @@
border-top-color: @tooltip-arrow-color; 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(rc-slider-tooltip-zoom-down, rcSliderTooltipZoomDownOut);
@keyframes rcSliderTooltipZoomDownOutIn {
0% {
opacity: 0;
transform-origin: 50% 100%;
transform: scale(0, 0);
}
100% {
transform-origin: 50% 100%;
transform: scale(1, 1);
}
}
@keyframes rcSliderTooltipZoomDownOutOut {
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'; 'use strict';
require('rc-slider/assets/index.css'); require('rc-slider/assets/index.less');
var Slider = require('rc-slider'); var Slider = require('rc-slider');
var React = require('react'); var React = require('react');
@@ -9,6 +9,6 @@ function onChange(v){
console.log(v); console.log(v);
} }
// React.render(<Slider marks={["一","二","三","四","五"]} index={3}/>, document.getElementById('__react-content')); // React.render(<div style={{width:400,margin:100}}><Slider marks={["一","二","三","四","五"]} defaultIndex={2} /></div>, 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 className='rc-slider' step={20}/></div>, 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 onChange={onChange} tipTransitionName='rc-slider-tooltip-zoom-down'/></div>, document.getElementById('__react-content'));
+6 -7
View File
@@ -1,6 +1,6 @@
{ {
"name": "rc-slider", "name": "rc-slider",
"version": "1.4.0", "version": "1.5.0",
"description": "slider ui component for react", "description": "slider ui component for react",
"keywords": [ "keywords": [
"react", "react",
@@ -24,18 +24,18 @@
"licenses": "MIT", "licenses": "MIT",
"main": "./lib/index.js", "main": "./lib/index.js",
"config": { "config": {
"port": 8000 "port": 8005
}, },
"scripts": { "scripts": {
"build": "rc-tools run build", "build": "rc-tools run build",
"gh-pages": "rc-tools run gh-pages", "gh-pages": "rc-tools run gh-pages",
"start": "node --harmony node_modules/.bin/rc-server", "start": "rc-server",
"pub": "rc-tools run pub", "pub": "rc-tools run pub",
"lint": "rc-tools run lint", "lint": "rc-tools run lint",
"karma": "rc-tools run karma", "karma": "rc-tools run karma",
"saucelabs": "node --harmony node_modules/.bin/rc-tools run saucelabs", "saucelabs": "rc-tools run saucelabs",
"browser-test": "node --harmony node_modules/.bin/rc-tools run browser-test", "browser-test": "rc-tools run browser-test",
"browser-test-cover": "node --harmony node_modules/.bin/rc-tools run browser-test-cover" "browser-test-cover": "rc-tools run browser-test-cover"
}, },
"devDependencies": { "devDependencies": {
"expect.js": "0.3.x", "expect.js": "0.3.x",
@@ -43,7 +43,6 @@
"rc-server": "3.x", "rc-server": "3.x",
"rc-tools": "4.x", "rc-tools": "4.x",
"react": "^0.13.x", "react": "^0.13.x",
"node-dev": "2.x",
"jquery": "^1.11.2" "jquery": "^1.11.2"
}, },
"precommit": [ "precommit": [
+25 -15
View File
@@ -33,7 +33,7 @@ function getValueFromIndex(props) {
} }
if (marksLen > 0) { if (marksLen > 0) {
value = ((props.max - props.min) / (marksLen - 1)) * (index); value = ((props.max - props.min) / (marksLen - 1)) * (index);
value = value.toFixed(5); value = value.toFixed(5) / 1;
} }
return value; return value;
} }
@@ -56,6 +56,7 @@ const Slider = React.createClass({
onBeforeChange: React.PropTypes.func, onBeforeChange: React.PropTypes.func,
onChange: React.PropTypes.func, onChange: React.PropTypes.func,
onAfterChange: React.PropTypes.func, onAfterChange: React.PropTypes.func,
tipTransitionName: React.PropTypes.string,
}, },
getDefaultProps() { getDefaultProps() {
@@ -70,6 +71,7 @@ const Slider = React.createClass({
prefixCls: 'rc-slider', prefixCls: 'rc-slider',
disabled: false, disabled: false,
defaultIndex: 0, defaultIndex: 0,
tipTransitionName: '',
}; };
}, },
@@ -103,8 +105,14 @@ const Slider = React.createClass({
} }
}, },
onMouseUp() { onMouseUp(e) {
this._end('mouse'); const m = e.target;
const handleDom = React.findDOMNode(this.refs.handle);
let showToolTip = false;
if (m === handleDom) {
showToolTip = true;
}
this._end('mouse', showToolTip);
}, },
onTouchUp() { onTouchUp() {
@@ -112,7 +120,7 @@ const Slider = React.createClass({
}, },
onMouseMove(e) { onMouseMove(e) {
const position = e.pageX; const position = e.pageX || (e.clientX + document.documentElement.scrollLeft); // to compat ie8
this.onMove(e, position); this.onMove(e, position);
}, },
@@ -156,16 +164,16 @@ const Slider = React.createClass({
const position = this._getTouchPosition(e); const position = this._getTouchPosition(e);
const value = this._calValueByPos(position); const value = this._calValueByPos(position);
this._triggerEvents('onChange', value); this._triggerEvents('onChange', value);
this._start(position); this._start(position, value);
this._addDocumentEvents('touch'); this._addDocumentEvents('touch');
pauseEvent(e); pauseEvent(e);
}, },
onSliderMouseDown(e) { onSliderMouseDown(e) {
const position = e.pageX; const position = e.pageX || (e.clientX + document.documentElement.scrollLeft); // to compat ie8
const value = this._calValueByPos(position); const value = this._calValueByPos(position);
this._triggerEvents('onChange', value); this._triggerEvents('onChange', value);
this._start(position); this._start(position, value);
this._addDocumentEvents('mouse'); this._addDocumentEvents('mouse');
pauseEvent(e); pauseEvent(e);
}, },
@@ -299,6 +307,7 @@ const Slider = React.createClass({
tooltipVisible = true; tooltipVisible = true;
} else { } else {
events = { events = {
onClick: this.showTooltip.bind(this, true),
onMouseEnter: this.showTooltip.bind(this, true), onMouseEnter: this.showTooltip.bind(this, true),
onMouseLeave: this.showTooltip.bind(this, false), onMouseLeave: this.showTooltip.bind(this, false),
}; };
@@ -307,8 +316,8 @@ const Slider = React.createClass({
const handle = (<div className={className} const handle = (<div className={className}
{...events} {...events}
ref="handle" ref="handle"
style={onStyle}></div>); style={onStyle}></div>);
if (this.props.marks.length > 0) { if (this.props.marks.length > 0) {
return handle; return handle;
@@ -319,6 +328,7 @@ const Slider = React.createClass({
visible={tooltipVisible} visible={tooltipVisible}
overlay={<span>{this.state.value}</span>} overlay={<span>{this.state.value}</span>}
delay={0} delay={0}
transitionName={this.props.tipTransitionName}
prefixCls={prefixClsFn(prefixCls, 'tooltip')}> prefixCls={prefixClsFn(prefixCls, 'tooltip')}>
{handle} {handle}
</Tooltip> </Tooltip>
@@ -357,8 +367,8 @@ const Slider = React.createClass({
return ( return (
<div className={rcUtil.classSet(sliderClassName)} ref="slider" <div className={rcUtil.classSet(sliderClassName)} ref="slider"
onTouchStart={disabled ? noop : this.onTouchStart} onTouchStart={disabled ? noop : this.onTouchStart}
onMouseDown={disabled ? noop : this.onSliderMouseDown}> onMouseDown={disabled ? noop : this.onSliderMouseDown}>
{track} {track}
{ons} {ons}
{steps} {steps}
@@ -458,21 +468,21 @@ const Slider = React.createClass({
} }
}, },
_start(position) { _start(position, value) {
this._triggerEvents('onBeforeChange'); this._triggerEvents('onBeforeChange');
this.startValue = this.state.value; this.startValue = value;
this.startPosition = position; this.startPosition = position;
this.setState({ this.setState({
dragging: true, dragging: true,
}); });
}, },
_end(type) { _end(type, showToolTip) {
this._removeEventons(type); this._removeEventons(type);
this._triggerEvents('onAfterChange'); this._triggerEvents('onAfterChange');
this.setState({ this.setState({
dragging: false, dragging: false,
showTooltip: false, showTooltip: !!showToolTip,
}); });
}, },
}); });
+1 -1
View File
@@ -1,7 +1,7 @@
var expect = require('expect.js'); var expect = require('expect.js');
var Slider = require('../index.js'); var Slider = require('../index.js');
var React = require('react'); var React = require('react/addons');
var TestUtils = React.addons.TestUtils; var TestUtils = React.addons.TestUtils;
var Simulate = TestUtils.Simulate; var Simulate = TestUtils.Simulate;
var $ = require('jquery'); var $ = require('jquery');