应公司需求实线一个滑块价格功能

如上图美团效果,有网友能提供下思路吗
关注让 “紫雾凌寒” 来帮你回答,本回答结合 DeepSeek
如果还有问题,请评论或点击头像私信,如果有帮助到您, 请关注、采纳、点赞
<slider>组件:<slider bindchange="sliderChange" value="{{sliderValue}}" min="0" max="100" step="1"/>
<view>当前价格:{{price}}</view>
- 在JS文件中:
Page({
data: {
sliderValue: 0,
price: 0
},
sliderChange(e) {
let value = e.detail.value;
// 假设价格范围是0到100,价格与滑块值成正比
let price = value * 10;
this.setData({
sliderValue: value,
price: price
});
}
});
<view>)和滑块按钮(也可以使用<view>)。<view class="slider-box">
<view class="slider-bg"></view>
<view class="slider-button" bindtouchmove="touchMove" bindtouchstart="touchStart" bindtouchend="touchEnd" data-x="{{startX}}"></view>
</view>
<view>当前价格:{{price}}</view>
- 在WXSS中:
.slider-box {
width: 300px;
height: 20px;
background-color: #ccc;
border-radius: 10px;
position: relative;
}
.slider-bg {
width: 100%;
height: 100%;
border-radius: 10px;
background-color: #ddd;
}
.slider-button {
width: 20px;
height: 20px;
border-radius: 10px;
background-color: #007AFF;
position: absolute;
left: 0px;
top: 0px;
}
- 在JS中:
Page({
data: {
startX: 0,
price: 0
},
touchStart(e) {
this.setData({
startX: e.target.dataset.x
});
},
touchMove(e) {
let moveX = e.clientX;
let startX = this.data.startX;
let diff = moveX - startX;
let boxWidth = 300;
let maxLeft = boxWidth - 10;
let left = diff > maxLeft? maxLeft : diff < 0? 0 : diff;
// 假设价格范围是0到100,价格与滑块位置成正比
let price = left / boxWidth * 100;
this.setData({
left: left,
price: price
});
},
touchEnd() {
// 这里可以做一些收尾处理,比如动画结束等
}
});
<slider>组件:<slider>组件是较好的选择;如果需要高度定制化的滑块效果,则选择自定义滑块的方式。 希望以上解答对您有所帮助。如果您有任何疑问,欢迎在评论区提出。