uni-app slider组件在IOS nvue中中间点与手指触碰位置不一致
uni-app slider组件在IOS nvue中中间点与手指触碰位置不一致
操作步骤:
slider组件在IOS nvue中 中间的点跟手指触碰的地方不在同一个位置,手指点哪里 中间那个滑块就会在手指前面一段 而且能移出进度条。
预期结果:
slider组件在IOS nvue中 中间的点跟手指触碰的地方在同一个位置,手指点哪里 中间那个滑块就在哪里
实际结果:
slider组件在IOS nvue中 中间的点跟手指触碰的地方不在同一个位置,手指点哪里 中间那个滑块就会在手指前面一段 而且能移出进度条。
bug描述:
slider组件在IOS nvue中 中间的点跟手指触碰的地方不在同一个位置,手指点哪里 中间那个滑块就会在手指前面一段 而且能移出进度条。
开发环境 | 版本号 | 项目创建方式 |
---|---|---|
PC开发环境操作系统 | Windows 10 | HBuilderX |
HBuilderX类型 | 正式版 | |
HBuilderX版本号 | 2.8.13 | |
手机系统 | iOS | |
手机系统版本号 | iOS 13.4 | |
手机厂商 | 苹果 | |
手机机型 | 都会 | |
页面类型 | vue | |
打包方式 | 云端 |
2024年还存在
还不如人家插件市场的小插件呢。做成这样简直了。
我也是 遇见这样 直接去进度条一半的位置 服了
这还是官方插件
我也是这个问题,而且 step 不能设置小于 1 的值。
我也碰到这个问题,苹果13 ios 15,
这都2022年了,这个问题还存在,真服了
在ios nvue下,竟然没有可用的slider组件
slider必须得在宽度750rpx下,拖动时位置才正常,一旦position:absolute,就对应不上
<view class="flex flex-row" style="position:absolute;bottom: 400rpx;left:100rpx;width:500rpx;height:80rpx;background-color: #ffffff;">
<slider min="50" value="170" max="250" show-value style="height:80rpx;flex:1;"/>
</view>
希望官方尽快修复下,都2年了
回复 东方教父: 这个问题在2022年4月26日20:47:53依然存在
2023年6月3日依然存在无语, 不能跟其他元素共处一行…
哥你找到解决的办法了吗
2025啦,问题依旧存在
在处理uni-app中nvue(NativeScript Vue)环境下的slider组件时,如果在iOS平台上遇到中间点与手指触碰位置不一致的问题,这通常与原生组件的渲染和事件处理有关。以下是一个可能的解决方案,通过自定义slider组件来更精确地控制触摸事件和位置显示。
首先,我们需要创建一个自定义的slider组件。由于nvue支持直接使用Vue语法结合原生组件,我们可以利用这一点来更精细地处理触摸事件。
自定义Slider组件示例
- 创建自定义Slider组件 (
MySlider.nvue
)
<template>
<view class="container">
<view
class="slider-track"
:style="{ width: sliderWidth + 'px' }"
>
<view
class="slider-thumb"
:style="{ left: thumbPosition + 'px' }"
@touchstart="onTouchStart"
@touchmove="onTouchMove"
@touchend="onTouchEnd"
></view>
</view>
</view>
</template>
<script>
export default {
data() {
return {
thumbPosition: 0,
startX: 0,
sliderWidth: 300, // 假设slider宽度为300px
currentValue: 0
};
},
methods: {
onTouchStart(e) {
this.startX = e.touches[0].clientX - this.$refs.thumb.offsetLeft;
},
onTouchMove(e) {
let newX = e.touches[0].clientX - this.startX;
newX = Math.max(0, Math.min(newX, this.sliderWidth));
this.thumbPosition = newX;
this.currentValue = newX / this.sliderWidth; // 计算当前值
},
onTouchEnd() {
// 可以在这里处理值变化后的逻辑
console.log('Current Value:', this.currentValue);
}
}
};
</script>
<style>
.container {
width: 100%;
height: 50px;
position: relative;
}
.slider-track {
width: 100%;
height: 100%;
background-color: #ddd;
position: relative;
}
.slider-thumb {
width: 50px;
height: 100%;
background-color: #007aff;
position: absolute;
left: 0;
top: 0;
border-radius: 5px;
}
</style>
使用自定义Slider组件
在你的页面或组件中引入并使用这个自定义的slider组件:
<template>
<view>
<MySlider />
</view>
</template>
<script>
import MySlider from '@/components/MySlider.nvue';
export default {
components: {
MySlider
}
};
</script>
上述代码提供了一个基本的自定义slider组件实现,通过监听touchstart、touchmove和touchend事件来手动控制thumb的位置,并确保其位置与手指触摸位置一致。这种方法绕过了直接使用uni-app内置slider组件可能存在的平台兼容性问题。