diff --git a/assets/index.less b/assets/index.less
index 5e0c42779..55e2b4800 100644
--- a/assets/index.less
+++ b/assets/index.less
@@ -59,9 +59,12 @@
background-color: #fff;
touch-action: pan-x;
- &:focus {
+ &-dragging&-dragging&-dragging {
border-color: tint(@primary-color, 20%);
box-shadow: 0 0 0 5px tint(@primary-color, 50%);
+ }
+
+ &:focus {
outline: none;
}
diff --git a/src/Range.jsx b/src/Range.jsx
index bb212407a..6654b3e32 100644
--- a/src/Range.jsx
+++ b/src/Range.jsx
@@ -411,16 +411,18 @@ class Range extends React.Component {
if (disabled || tabIndex[i] === null) {
_tabIndex = null;
}
+ const dragging = handle === i;
return handleGenerator({
className: classNames({
[handleClassName]: true,
[`${handleClassName}-${i + 1}`]: true,
+ [`${handleClassName}-dragging`]: dragging,
}),
prefixCls,
vertical,
+ dragging,
offset: offsets[i],
value: v,
- dragging: handle === i,
index: i,
tabIndex: _tabIndex,
min,
diff --git a/tests/Range.test.js b/tests/Range.test.js
index 1618f36bf..41df6176c 100644
--- a/tests/Range.test.js
+++ b/tests/Range.test.js
@@ -183,6 +183,53 @@ describe('Range', () => {
expect(wrapper.instance().getSlider().state.bounds[1]).toBe(40);
});
+ it('should render correctly when allowCross', () => {
+ class CustomizedRange extends React.Component { // eslint-disable-line
+ constructor(props) {
+ super(props);
+ this.state = {
+ value: [20, 40],
+ };
+ }
+ onChange = (value) => {
+ this.setState({
+ value,
+ });
+ }
+ getSlider() {
+ return this.refs.slider;
+ }
+ render() {
+ return ;
+ }
+ }
+ const map = {};
+ document.addEventListener = jest.fn().mockImplementation((event, cb) => {
+ map[event] = cb;
+ });
+
+ const mockRect = (wrapper) => {
+ wrapper.instance().getSlider().sliderRef.getBoundingClientRect = () => ({
+ left: 0,
+ width: 100,
+ });
+ };
+
+ const container = document.createElement('div');
+ document.body.appendChild(container);
+
+ const wrapper = mount(, { attachTo: container });
+ mockRect(wrapper);
+
+ expect(wrapper.instance().getSlider().state.bounds).toEqual([20, 40]);
+
+ wrapper.find('.rc-slider').simulate('mouseDown', { button: 0, pageX: 0, pageY: 0 });
+ map.mousemove({ type: 'mousemove', pageX: 60, pageY: 0 });
+
+ expect(wrapper.instance().getSlider().state.bounds).toEqual([40, 60]);
+ expect(wrapper.find('.rc-slider-handle-2').at(1).getDOMNode().className).toContain('rc-slider-handle-dragging');
+ });
+
it('should keep pushable with pushable s defalutValue when not allowCross and setState', () => {
class CustomizedRange extends React.Component { // eslint-disable-line
state = {