mirror of
https://gitee.com/vant-contrib/vant.git
synced 2025-04-06 03:57:59 +08:00
[improvement] Slider: min/max can set any value (#3566)
This commit is contained in:
parent
70efdc22cf
commit
010fcd68b7
@ -10,8 +10,8 @@
|
|||||||
<demo-block :title="$t('title2')">
|
<demo-block :title="$t('title2')">
|
||||||
<van-slider
|
<van-slider
|
||||||
v-model="value2"
|
v-model="value2"
|
||||||
:min="10"
|
:min="-50"
|
||||||
:max="90"
|
:max="50"
|
||||||
@change="onChange"
|
@change="onChange"
|
||||||
/>
|
/>
|
||||||
</demo-block>
|
</demo-block>
|
||||||
@ -97,7 +97,7 @@ export default {
|
|||||||
data() {
|
data() {
|
||||||
return {
|
return {
|
||||||
value1: 50,
|
value1: 50,
|
||||||
value2: 50,
|
value2: 0,
|
||||||
value3: 50,
|
value3: 50,
|
||||||
value4: 50,
|
value4: 50,
|
||||||
value5: 50,
|
value5: 50,
|
||||||
|
@ -35,7 +35,7 @@ export default {
|
|||||||
### Range
|
### Range
|
||||||
|
|
||||||
```html
|
```html
|
||||||
<van-slider v-model="value" :min="10" :max="90" />
|
<van-slider v-model="value" :min="-50" :max="50" />
|
||||||
```
|
```
|
||||||
|
|
||||||
### Disabled
|
### Disabled
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
import { use, isDef } from '../utils';
|
import { use } from '../utils';
|
||||||
import { TouchMixin } from '../mixins/touch';
|
import { TouchMixin } from '../mixins/touch';
|
||||||
import { preventDefault } from '../utils/dom/event';
|
import { preventDefault } from '../utils/dom/event';
|
||||||
|
|
||||||
@ -28,6 +28,12 @@ export default sfc({
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
|
computed: {
|
||||||
|
range() {
|
||||||
|
return this.max - this.min;
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
methods: {
|
methods: {
|
||||||
onTouchStart(event) {
|
onTouchStart(event) {
|
||||||
if (this.disabled) {
|
if (this.disabled) {
|
||||||
@ -45,17 +51,17 @@ export default sfc({
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (this.dragStatus === 'start') {
|
if (this.dragStatus === 'start') {
|
||||||
this.dragStatus = 'draging';
|
|
||||||
this.$emit('drag-start');
|
this.$emit('drag-start');
|
||||||
}
|
}
|
||||||
|
|
||||||
preventDefault(event, true);
|
preventDefault(event, true);
|
||||||
this.touchMove(event);
|
this.touchMove(event);
|
||||||
|
this.dragStatus = 'draging';
|
||||||
|
|
||||||
const rect = this.$el.getBoundingClientRect();
|
const rect = this.$el.getBoundingClientRect();
|
||||||
const delta = this.vertical ? this.deltaY : this.deltaX;
|
const delta = this.vertical ? this.deltaY : this.deltaX;
|
||||||
const total = this.vertical ? rect.height : rect.width;
|
const total = this.vertical ? rect.height : rect.width;
|
||||||
const diff = (delta / total) * 100;
|
const diff = (delta / total) * this.range;
|
||||||
|
|
||||||
this.newValue = this.startValue + diff;
|
this.newValue = this.startValue + diff;
|
||||||
this.updateValue(this.newValue);
|
this.updateValue(this.newValue);
|
||||||
@ -66,14 +72,12 @@ export default sfc({
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (isDef(this.newValue)) {
|
if (this.dragStatus === 'draging') {
|
||||||
this.updateValue(this.newValue, true);
|
this.updateValue(this.newValue, true);
|
||||||
|
this.$emit('drag-end');
|
||||||
}
|
}
|
||||||
|
|
||||||
if (this.dragStatus === 'draging') {
|
|
||||||
this.$emit('drag-end');
|
|
||||||
this.dragStatus = '';
|
this.dragStatus = '';
|
||||||
}
|
|
||||||
},
|
},
|
||||||
|
|
||||||
onClick(event) {
|
onClick(event) {
|
||||||
@ -84,7 +88,7 @@ export default sfc({
|
|||||||
const rect = this.$el.getBoundingClientRect();
|
const rect = this.$el.getBoundingClientRect();
|
||||||
const delta = this.vertical ? event.clientY - rect.top : event.clientX - rect.left;
|
const delta = this.vertical ? event.clientY - rect.top : event.clientX - rect.left;
|
||||||
const total = this.vertical ? rect.height : rect.width;
|
const total = this.vertical ? rect.height : rect.width;
|
||||||
const value = (delta / total) * 100;
|
const value = (delta / total) * this.range + this.min;
|
||||||
|
|
||||||
this.updateValue(value, true);
|
this.updateValue(value, true);
|
||||||
},
|
},
|
||||||
@ -115,7 +119,7 @@ export default sfc({
|
|||||||
const crossAxis = vertical ? 'width' : 'height';
|
const crossAxis = vertical ? 'width' : 'height';
|
||||||
|
|
||||||
const barStyle = {
|
const barStyle = {
|
||||||
[mainAxis]: `${this.format(this.value)}%`,
|
[mainAxis]: `${((this.value - this.min) * 100) / this.range}%`,
|
||||||
[crossAxis]: this.barHeight,
|
[crossAxis]: this.barHeight,
|
||||||
background: this.activeColor
|
background: this.activeColor
|
||||||
};
|
};
|
||||||
|
@ -14,7 +14,7 @@ exports[`renders demo correctly 1`] = `
|
|||||||
<div>
|
<div>
|
||||||
<div class="van-slider">
|
<div class="van-slider">
|
||||||
<div class="van-slider__bar" style="width: 50%; height: 2px;">
|
<div class="van-slider__bar" style="width: 50%; height: 2px;">
|
||||||
<div role="slider" tabindex="0" aria-valuemin="10" aria-valuenow="50" aria-valuemax="90" aria-orientation="horizontal" class="van-slider__button-wrapper">
|
<div role="slider" tabindex="0" aria-valuemin="-50" aria-valuenow="0" aria-valuemax="50" aria-orientation="horizontal" class="van-slider__button-wrapper">
|
||||||
<div class="van-slider__button"></div>
|
<div class="van-slider__button"></div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
@ -35,7 +35,7 @@ export default {
|
|||||||
### 指定选择范围
|
### 指定选择范围
|
||||||
|
|
||||||
```html
|
```html
|
||||||
<van-slider v-model="value" :min="10" :max="90" />
|
<van-slider v-model="value" :min="-50" :max="50" />
|
||||||
```
|
```
|
||||||
|
|
||||||
### 禁用
|
### 禁用
|
||||||
|
Loading…
x
Reference in New Issue
Block a user