【发布时间】:2019-01-04 15:52:08
【问题描述】:
目前正在使用 react typescript 网站内的自定义滑块(即“范围”类型的输入),它在桌面(MacO 和 Windows + 目标浏览器)和 android 上运行良好,但在 Ipad 上缺少一些东西(我们只关注平板电脑)。 问题是我们不能通过点击滑块本身来设置值:我们可以拖动它并点击它顶部的标签,但不能点击里面。
我看到很多话题都告诉我 Apple 可触摸设备在许多事件中的工作方式不同,所以我调试了我的设备,看看出了什么问题。 我的“onClick”方法根据来自事件的值设置滑块的当前值,但结果显示,只有在 Ipad(Safari 和 Chrome)上执行时,这两个变量才相等(所以我的滑块更新它值正确但使用当前值)! 在任何其他环境中,一切正常,事件的价值正确地应该是“未来价值”。
我还测试了如下所述的不同触摸事件,但没有一个被触发,即使有一些默认阻止。
这是滑块本身(仅触发 onClick):
<input
type="range"
min={-half}
max={half}
step="1"
value={this.state.selectedRange}
onTouchStart={(e: any) => { console.log("on touch : " + e.target.value);}}
onTouchMove={(e: any) => { console.log("on touch : " + e.target.value);}}
onTouchCancel={(e: any) => { console.log("on touch : " + e.target.value);}}
onTouchEnd={(e: any) => { console.log("on touch : " + e.target.value);}}
onTouch={(e: any) => { console.log("on touch : " + e.target.value);}}
onClick={(e: any) => this.onClickSlider(e, "Inputslider + changer")}
defaultValue={this.state.selectedRange}
onChange={(e: any) => { this.onChange(e); }}
/>
还有 onClickSlider :
onClickSlider(e: any, m: string) {
let value: any = e.target.value;
console.log("New Value : " + e.target.value);
// target value is equal to the current value... (only on Ipad)
if (this.props.onChange) {
if (!this.props.slider) {
value = value - 1;
}
this.props.onChange(value);
}
}
我没想到事件的价值行为会发生如此巨大的变化......
有没有人建议我如何检索用户触摸滑块的位置值(它可能涉及特定的平台条件)?
谢谢!
【问题讨论】:
-
你试过
onInput -
onInput 也没有被触发:/
-
TouchEvents 怎么样?
-
正如我所说,我尝试了它们但没有被解雇:/