HarmonyOS 鸿蒙Next中Slider如何判断是否是用户拖拽改变了进度条
HarmonyOS 鸿蒙Next中Slider如何判断是否是用户拖拽改变了进度条
Slider({
style: SliderStyle.OutSet,
value: this.progress,
max: this.maxSeekBarProgress,
min: 0,
})
.blockStyle({ type: SliderBlockType.DEFAULT })
.selectedColor($r('app.color.colorFF443D'))
.trackColor($r('app.color.white'))
.blockColor($r('app.color.colorFF443D'))
.trackThickness(3)
.height(18)
.blockSize({ width: 9, height: 9 })
.width(CommonConstants.match_parent)
.onChange((value: number) => {
console.log('解析-----', value);
this.isListeningVideoProgress = true;
if (value > this.lastProgress) { //代表向右滚动
} else {
}
this.lastProgress = value;
})
onChange 没有类似android进度监听FromUser 字段。
更多关于HarmonyOS 鸿蒙Next中Slider如何判断是否是用户拖拽改变了进度条的实战教程也可以访问 https://www.itying.com/category-93-b0.html
Slider组件的onChange回调提供了SliderChangeMode参数,可通过mode参数识别用户操作阶段:
.<function>(value: number, mode: SliderChangeMode) => {
if (mode === SliderChangeMode.Begin) {
console.log('用户开始拖动');
this.isUserDragging = true;
} else if (mode === SliderChangeMode.End) {
console.log('用户结束拖动');
this.isUserDragging = false;
// 在此处理用户主动操作结束后的逻辑
}
}
更多关于HarmonyOS 鸿蒙Next中Slider如何判断是否是用户拖拽改变了进度条的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html
利用 onChange
事件的 mode
进行判断
demo 如下
Slider({
value: this.playerModel.progressVal,
step: PlayConstants.PROGRESS_STEP,
style: SliderStyle.OutSet
})
.onChange((value: number, mode: SliderChangeMode) => {
if (mode === SliderChangeMode.Begin ||
mode === SliderChangeMode.Moving ||
mode === SliderChangeMode.End) {
console.log('用户拖拽触发的进度变化:', value);
} else if (mode === SliderChangeMode.Click) {
console.log('用户点击触发的进度变化:', value);
}
})
只要走了onchange回调, 就是手动触发的, 赋值的slider是不走回调的
在HarmonyOS Next中,可以通过Slider的onChange
事件判断用户拖拽。当用户拖拽滑块时会触发onChange
回调,而程序设置值不会触发。示例代码:
Slider({
onChange: (value: number, mode: SliderChangeMode) => {
if (mode === SliderChangeMode.End) {
// 用户拖拽结束
} else if (mode === SliderChangeMode.Moving) {
// 用户正在拖拽
}
}
)
SliderChangeMode
枚举包含End
(用户操作结束)、Moving
(用户拖拽中)和Click
(点击进度条)三种状态。
在HarmonyOS Next中,可以通过监听Slider的onChangeStart和onChangeEnd事件来判断是否是用户拖拽操作。具体实现方式如下:
- 添加一个标志位来记录是否是用户操作:
private isUserDragging: boolean = false;
- 修改Slider代码,添加事件监听:
Slider({
// ...原有参数
})
.onChangeStart(() => {
this.isUserDragging = true;
})
.onChange((value: number) => {
if(this.isUserDragging) {
console.log('用户拖拽改变进度', value);
// 处理用户拖拽逻辑
} else {
console.log('程序改变进度', value);
// 处理程序改变逻辑
}
})
.onChangeEnd(() => {
this.isUserDragging = false;
});
这样就能区分是用户拖拽还是程序自动改变进度了。当用户开始拖拽滑块时会触发onChangeStart,结束拖拽时触发onChangeEnd,在这两个事件之间发生的onChange就是用户拖拽导致的。