У меня есть событие mousemove, и я хочу отслеживать положение мыши относительно целевого элемента, но layerX и offsetX задают положение мыши относительно страницы. Вероятно, связан тот факт, что если я добавлю целевой элемент и применим getBoundingClientRect (), все возвращаемые свойства объекта будут равны 0. Это происходит только в Safari (из того, что я тестировал), событие mousemove прекрасно работает в Chrome и Firefox. .
Весь код находится в области виджета jQuery
let plot = d3.select(document.createElement("svg"))
.attr("onmousemove", "$(\"#plot\").plot_widg(\"show_value\", event)");
...
show_value: function(eve) {
let mouse_pos_x = eve.layerX,
mouse_pos_y = eve.layerY;
...
Для Chrome и Firefox это работает как положено, но в Safari выдает положение мыши относительно страницы.
В качестве альтернативы, если я попытаюсь:
let plot = d3.select(document.createElement("svg"))
.attr("onmousemove", "$(\"#plot\").plot_widg(\"show_value\", event, this)");
...
show_value: function(eve, plot) {
let {x: plot_left, y: plot_top} = plot.getBoundingClientRect(),
mouse_pos_x = eve.pageX - plot_left,
mouse_pos_y = eve.pageY - plot_top;
...
Он ведет себя одинаково, так как plot_left и plot_top равны 0 в Safari, но верны в Chrome и Firefox.