mirror of
https://github.com/wassname/slider.git
synced 2026-09-10 12:38:09 +08:00
allow to pass custom handle components
This commit is contained in:
@@ -0,0 +1 @@
|
||||
placeholder
|
||||
@@ -0,0 +1,44 @@
|
||||
require('rc-slider/assets/index.less');
|
||||
|
||||
const React = require('react');
|
||||
const ReactDOM = require('react-dom');
|
||||
const Slider = require('rc-slider');
|
||||
|
||||
const wrapperStyle = {width: 400, margin: 50};
|
||||
|
||||
const handleStyle = {
|
||||
position: 'absolute',
|
||||
transform: 'translate(-50%, -50%)',
|
||||
cursor: 'pointer',
|
||||
padding: '2px',
|
||||
border: '2px solid #abe2fb',
|
||||
borderRadius: '3px',
|
||||
background: '#fff',
|
||||
fontSize: '14px',
|
||||
textAlign: 'center',
|
||||
zIndex: 3,
|
||||
};
|
||||
|
||||
const CustomHandle = props => {
|
||||
const style = Object.assign({left: props.offset + '%'}, handleStyle);
|
||||
return (
|
||||
<div style={style}>val: {props.value}</div>
|
||||
);
|
||||
};
|
||||
CustomHandle.propTypes = {
|
||||
value: React.PropTypes.any,
|
||||
offset: React.PropTypes.number,
|
||||
};
|
||||
|
||||
ReactDOM.render(
|
||||
<div>
|
||||
<div style={wrapperStyle}>
|
||||
<p>Default slider</p>
|
||||
<Slider min={0} max={20} defaultValue={3} />
|
||||
</div>
|
||||
<div style={wrapperStyle}>
|
||||
<p>Slider with custom handle</p>
|
||||
<Slider min={0} max={20} defaultValue={3} Handle={<CustomHandle />} />
|
||||
</div>
|
||||
</div>
|
||||
, document.getElementById('__react-content'));
|
||||
+11
-9
@@ -1,8 +1,8 @@
|
||||
import React from 'react';
|
||||
import React, { cloneElement } from 'react';
|
||||
import {Dom as DomUtils} from 'rc-util';
|
||||
import classNames from 'classnames';
|
||||
import Track from './Track';
|
||||
import Handle from './Handle';
|
||||
import DefaultHandle from './Handle';
|
||||
import Steps from './Steps';
|
||||
import Marks from './Marks';
|
||||
|
||||
@@ -328,7 +328,7 @@ class Slider extends React.Component {
|
||||
render() {
|
||||
const {handle, upperBound, lowerBound} = this.state;
|
||||
const {className, prefixCls, disabled, vertical, dots, included, range, step,
|
||||
marks, max, min, tipTransitionName, tipFormatter, children} = this.props;
|
||||
marks, max, min, Handle, tipTransitionName, tipFormatter, children} = this.props;
|
||||
|
||||
const upperOffset = this.calcOffset(upperBound);
|
||||
const lowerOffset = this.calcOffset(lowerBound);
|
||||
@@ -336,15 +336,15 @@ class Slider extends React.Component {
|
||||
const handleClassName = prefixCls + '-handle';
|
||||
const isNoTip = (step === null) || (tipFormatter === null);
|
||||
|
||||
const upper = (<Handle className={handleClassName}
|
||||
noTip={isNoTip} tipTransitionName={tipTransitionName} tipFormatter={tipFormatter}
|
||||
vertical = {vertical} offset={upperOffset} value={upperBound} dragging={handle === 'upperBound'}/>);
|
||||
const upper = cloneElement(Handle, { className: handleClassName,
|
||||
noTip: isNoTip, tipTransitionName: tipTransitionName, tipFormatter: tipFormatter,
|
||||
vertical: vertical, offset: upperOffset, value: upperBound, dragging: handle === 'upperBound' });
|
||||
|
||||
let lower = null;
|
||||
if (range) {
|
||||
lower = (<Handle className={handleClassName}
|
||||
noTip={isNoTip} tipTransitionName={tipTransitionName} tipFormatter={tipFormatter}
|
||||
vertical = {vertical} offset={lowerOffset} value={lowerBound} dragging={handle === 'lowerBound'}/>);
|
||||
lower = cloneElement(Handle, { className: handleClassName,
|
||||
noTip: isNoTip, tipTransitionName: tipTransitionName, tipFormatter: tipFormatter,
|
||||
vertical: vertical, offset: lowerOffset, value: lowerBound, dragging: handle === 'lowerBound' });
|
||||
}
|
||||
|
||||
const sliderClassName = classNames({
|
||||
@@ -395,6 +395,7 @@ Slider.propTypes = {
|
||||
onBeforeChange: React.PropTypes.func,
|
||||
onChange: React.PropTypes.func,
|
||||
onAfterChange: React.PropTypes.func,
|
||||
Handle: React.PropTypes.element,
|
||||
tipTransitionName: React.PropTypes.string,
|
||||
tipFormatter: React.PropTypes.func,
|
||||
dots: React.PropTypes.bool,
|
||||
@@ -411,6 +412,7 @@ Slider.defaultProps = {
|
||||
max: 100,
|
||||
step: 1,
|
||||
marks: {},
|
||||
Handle: <DefaultHandle />,
|
||||
onBeforeChange: noop,
|
||||
onChange: noop,
|
||||
onAfterChange: noop,
|
||||
|
||||
Reference in New Issue
Block a user