HarmonyOS 鸿蒙Next slider组件在动态更新value的情况下, onChange回调中的value获取不正确

发布于 1周前 作者 songsunli 来自 鸿蒙OS

HarmonyOS 鸿蒙Next slider组件在动态更新value的情况下, onChange回调中的value获取不正确

如上面代码所示, 在播放音频并且根据播放进度更新slider的value, 此时点击slider上的进度条, mode == SliderChangeMode.Click 这种情况下获取的value 并不是点击位置的value

2 回复

Slider组件中的.onChange事件状态并不是if,else的关系。因此应改为:

Slider({
  max: this.audioDuration, 
  min: 0, 
  value: this.playDuration, 
  style: SliderStyle.OutSet
})
.blockColor('#8e9ab7')
.trackColor('#d8e8f7')
.selectedColor('#8e9ab7')
.trackThickness(2)
.blockSize({
  width: 10, 
  height: 10
})
.layoutWeight(1)
.onChange((value: number, mode: SliderChangeMode) => {
  if (mode == SliderChangeMode.Begin) {
    console.log('Begin')
    if (this.isPlaying) {
      this.avplayer?.pause()
    }
  }
  if (mode == SliderChangeMode.End) {
    console.log('End')
    if (!this.isPlaying) {
      this.avplayer?.play()
    }
  }
  if (mode == SliderChangeMode.Moving || SliderChangeMode.Click) {
    console.log(`Moving------${value}`)
    console.log(`Click------- ${value}`)
    this.playDuration = value
    this.avplayer?.seek(value)
  }
})

更多关于HarmonyOS 鸿蒙Next slider组件在动态更新value的情况下, onChange回调中的value获取不正确的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


在HarmonyOS鸿蒙系统中,Next slider组件在动态更新value属性时,如果在onChange回调中获取到的value不正确,这通常是由于状态同步或事件处理顺序的问题导致的。

确保在动态更新slider的value时,更新操作是在UI线程中正确执行的。鸿蒙系统提供了相应的机制来保证UI操作的线程安全性。检查你的代码,确保value的更新是通过正确的接口和线程进行的。

此外,onChange回调是在用户操作slider时触发的,理论上应该反映用户当前的操作结果。如果在回调中获取的value与实际操作不符,可能是因为在回调触发前后,value被其他逻辑错误地修改了。检查所有可能修改slider value的地方,确保这些修改是在合适的时机和条件下进行的。

还需要注意的是,如果value的更新和onChange回调的处理逻辑存在竞态条件,也可能会导致不一致的结果。考虑使用同步机制或确保逻辑顺序来避免这种情况。

如果上述检查都没有发现问题,可能是组件本身的bug或特定环境下的表现。此时,可以尝试简化代码到最小可复现问题的例子,以便进一步定位问题。

如果问题依旧没法解决请联系官网客服,官网地址是 https://www.itying.com/category-93-b0.html

回到顶部