我有一个mousemove函数,在我的d3图表上看起来像这样。props.metrics
是一个指标列表(不超过10),每个指标包含一个指标值数组。
function mousemove(e: MouseEvent) {
const x0 = x.invert(d3.pointer(e, svg.node())[0]);
const i = bisect(dates, x0, 1);
if (dates[i]) {
props.setLiveMoves({
ticker: tickerSymbol,
metricId: 'price',
value: props.data.dataY[i],
});
props.setLiveMoves({
ticker: tickerSymbol,
metricId: 'date',
value: props.data.dataX[i],
});
if (props.metrics) {
props.metrics.map((entry: TickerMetricStoreFormat) => {
props.setLiveMoves({
ticker: tickerSymbol,
metricId: entry.metricId,
value: entry.value[i],
});
});
}
focus
.selectAll(`.${lineClassname}_y`)
.attr('transform', `translate(${x(dates[i])}, 0)`);
focus
.selectAll(`.${lineClassname}_x`)
.attr('transform', `translate(0, ${y(props.data.dataY[i])})`);
}
}
这被附加到覆盖图表区域的矩形上。
svg.append('rect')
.attr('class', mousetrackerClassname)
.style('fill', 'transparent')
.style('pointer-events', 'all')
.attr('width', width)
.attr('height', height)
.on('mouseover', mouseover)
.on('mousemove', mousemove)
.on('mouseout', mouseout);
我的问题是:这个mousmove功能成本有多高,在这个工具提示悬停中添加去抖动是否是一个常见的设计模式?如果是这样,我如何实现去抖动?
1条答案
按热度按时间4nkexdtk1#
一般来说,对事件进行去抖动的简单方法是:
是的,像mousemove,scroll等事件确实会生成很多事件,所以我建议对这些事件进行去抖动,以及触发API调用的input/search-field中的keyup-event(大约150- 200 ms,所以用户在发送api查询之前就停止了输入)。