ElemeFE / mint-ui

Mobile UI elements for Vue.js
http://mint-ui.github.io/#!/en
MIT License
16.55k stars 3.55k forks source link

[Bug Report] picker组件中计算选择index时由于计算精度丢失导致无法选中 #1560

Open Jim-Rae opened 5 years ago

Jim-Rae commented 5 years ago

Mint UI version

2.2.13

OS/Browsers version

MacOS 10.13.6 / Chrome 73.0.3683.86

Vue version

2.5.2

Reproduction Link

https://elementui.github.io/issue-generator/#/zh-CN?repo=mint

Steps to reproduce

正常使用picker

What is Expected?

可以选中任意选项

What is actually happening?

部分选项无法选中

原因: picker组件源码中的translate2Value函数中 var index = -(translate - Math.floor(this.visibleItemCount / 2) * itemHeight) / itemHeight; index的计算过程发生精度丢失导致index可能等于2.99999999996等类似数值,从而使this.mutatingValues[index]为null,无法返回正常选中的值

解决方法: this.mutatingValues[Math.round(index)]

zlu1123 commented 4 years ago

我修改了pick-slot里面和你的方式一样后,在IOS13滑动的时候还是报错

Jim-Rae commented 4 years ago

@zlu1123 是修改node_modules/mint-ui/lib/mint-ui.common.js这个文件,在3868行。

zlu1123 commented 4 years ago

@Jim-Rae 按照您所说的,也修改了,但是还是没有作用。自己在测试的时候,发现只要是ios13的手机,然后滑动速度过快的话,会出现卡死并不显示值的问题

Jim-Rae commented 4 years ago

@zlu1123 如果是这样的话那我也不知道了,其实最好还是使用其他ui库吧,毕竟mint-ui官方已经不维护了。vant这个ui库挺不错的。

zlu1123 commented 4 years ago

@Jim-Rae 依然感谢您的建议