uni-app slider组件拖动事件完成change事件被页面点击事件阻止
uni-app slider组件拖动事件完成change事件被页面点击事件阻止
示例代码:
// 拖动进度条
sliderChange(data) {
// console.log('拖动完成', data.detail.value)
this.setIsDrag(false)
this.isMove = false;
this.sliderVal = data.detail.value
if(data.detail.value >= 100){ //拖动到最后3秒
this.sliderVal = ((this.duration - 3) / (this.duration / 100)).toFixed(2);
}
let a = this.duration / 100;
this.sliderVal = this.sliderVal;
this.videoContext.seek(Math.floor((this.sliderVal * a)));
if(!this.firstPlay) return
}
操作步骤:
- 在slider触发change事件时,点击页面,change事件不触发
预期结果:
- change事件正常运行
实际结果:
- 阻止了change事件的运行
bug描述:
- slider组件,拖动事件完成:change事件,被页面点击事件阻止
更多关于uni-app slider组件拖动事件完成change事件被页面点击事件阻止的实战教程也可以访问 https://www.itying.com/category-93-b0.html
2 回复
不仅仅是H5,小程序、APP都会有这个问题
更多关于uni-app slider组件拖动事件完成change事件被页面点击事件阻止的实战教程也可以访问 https://www.itying.com/category-93-b0.html
这是一个典型的事件冒泡和事件处理优先级问题。在uni-app中,当slider的change事件与页面点击事件同时触发时,由于事件冒泡机制,页面点击事件可能会阻止slider的change事件的正常执行。
解决方案:
- 使用事件修饰符:在页面点击事件上添加
.stop修饰符阻止事件冒泡
<view @tap.stop="handlePageClick">
- 延迟处理:在slider的change事件中使用setTimeout延迟执行
sliderChange(data) {
setTimeout(() => {
this.setIsDrag(false)
this.isMove = false;
this.sliderVal = data.detail.value
if(data.detail.value >= 100){
this.sliderVal = ((this.duration - 3) / (this.duration / 100)).toFixed(2);
}
let a = this.duration / 100;
this.videoContext.seek(Math.floor((this.sliderVal * a)));
if(!this.firstPlay) return
}, 50)
}
<slider [@change](/user/change)="sliderChange" [@changing](/user/changing)="sliderChanging" />

