我试图实现HTML5可拖动,但我发现了一些没有多大意义的东西。我有一个像这样的React组件:
class Draggable extends React.Component {
_onDragEnd(e) {
console.log(`end`, e.pageX)
}
_onDrag(e) {
console.log(`drag`, e.pageX)
}
_onDragStart(e) {
console.log(`start`, e.pageX)
}
return <div draggable={true}
onDrag={this._onDrag.bind(this)}
onDragEnd={this._onDragEnd.bind(this)}
onDragStart={this._onDragStart.bind(this)}
}
}
当我拖动它时,我看到以下输出:
start 276
drag 279
drag 280
drag 281
drag 282
drag 283
drag 285
drag 286
drag 287
drag 288
drag 289
end 2209
请注意,拖动结尾处的pageX
比之前发生的pageX
事件中的drag
大了近2k。由于我知道我没有在最近的drag
事件和dragEnd
事件之间移动鼠标2k,因此我感到困惑的是为什么dragEnd
{{1非常大。
有没有使用过HTML 5拖放的人之前看过这样的东西,如果有的话你知道怎么解决吗?我意识到我可以通过在pageX
处理程序中保存pageX
来解决问题,但我很想知道为什么_onDrag
事件{{{ 1}}是如此不同。
编辑:我刚尝试使用dragEnd
和pageX
代替clientX
。 screenX
在拖动结束时具有相同的奇怪跳跃,但由于某种原因,末尾的pageX
与最后一次拖动的clientX
匹配。但是,我不想想我想使用screenX
,因为据我理解,如果我使用screenX
并且用户拖动足以让页面滚动screenX
将不准确。