-
-
Notifications
You must be signed in to change notification settings - Fork 9.5k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
[Bug Report] scroll-into 返回的currentOption并不准确 #12457
Comments
Hello @Tamcony. Please provide an online reproduction demo by codesandbox or a minimal GitHub repository. Issues marked with 你好 @Tamcony, 我们需要你提供一个在线的重现示例,以便于我们帮你排查问题。你可以通过点击 codesandbox 创建,或者提供一个最小化的 GitHub 仓库。如果 3 天内未跟进,此 issue 将会被自动关闭。背景请参考 为什么需要最小重现。 |
一个一个滑动的话,currentOption是当前选中的值。 |
现在的实现是只在触摸时触发 scroll-into 事件,所以惯性滚动时不会触发。 |
是的,我有一个需求是滚动分页加载,我开始想用这个事件处理,然后和我预想的并不一样,那这种情况是只能用onChange吗?因为我看也没有reachBottom相关的事件,只能自行判断index了。 |
看了下原本的issue: #11754 但是根据PR: #11757 的实现方式,我们是做不到惯性滚动的时候获取每个item进入中间视窗的逻辑的。 有一个解法是:模拟惯性滚动时Item到达视窗的逻辑 以下是伪代码:假设触摸方向是从下到上 const startOffset = 0; // 初始偏移量 '0px'
const endOffset = -500; // 触摸后知道的需要到达的偏移量 '-500px'
const itemHeight = 40; // 每个Item高度为 '40px'
const transitionDuration = 1000; // 动画效果时长,假设 '1000ms'
// 算出我们需要经过的总偏移量
const totalOffset = Math.max(startOffset, endOffset) - Math.min(startOffset, endOffset);
// 根据总偏移量和每个item高度,计算出总计需要经过的item数量
const itemCount = Math.floor(totalOffset / itemHeight);
// 根据 动画时长 和 需要经过的item数量,计算出每次触发 scrollInto 的间隔时间
const time = transitionDuration / itemCount;
// 最终:当动画开始时执行
const timer = setInterval(() => {
emit('onScrollInto');
}, time)
// 这里需要移除定时器
const clearTimer = setTimeout(() => {
clearTimeout(clearTimer);
clearInterval(timer);
},transitionDuration); 关键问题是要尽可能保证每次 如果有其他idea,欢迎讨论:) |
how to resolve it |
1 similar comment
how to resolve it |
重现链接
后续补充
Vant 版本
4.6.5
描述一下你遇到的问题。
快速滑动picker的时候,从scroll-into事件获取的currentOption并不是当前选中的那个选项
重现步骤
快速滑动picker
设备/浏览器
No response
The text was updated successfully, but these errors were encountered: