#javascript #d3.js
#javascript #d3.js
Вопрос:
Я использую функцию d3.zoom() в версии d3 4.2.8 для перемещения по моей силовой диаграмме. Я хочу, чтобы указатель мыши изменился на курсор перемещения, пока я «перетаскиваю себя» по диаграмме. Как только я отпускаю кнопку мыши, она должна снова измениться на «перекрестие».
Я использовал два журнала консоли, чтобы увидеть, когда запускаются события. В консоли это работает: когда я нажимаю и удерживаю кнопку мыши, появляется надпись «Zoom begin», и как только я оставляю ее, появляется надпись «Zoom finish».
Единственное, что не работает, это изменение курсора на «переместить»: хотя консоль говорит «Начать масштабирование», курсор остается на «по умолчанию». Это изменится на «переместить» только после того, как я оставлю кнопку мыши (а затем сразу же изменится на «перекрестие», поскольку сработает «Завершение масштабирования»).
Почему консоль выводит сообщение в нужное время, но курсор меняется после того, как я снова оставляю кнопку мыши?
// Prepare Zoom and Panning settings
var zoom = d3.zoom()
.scaleExtent([.1, 10])
.on("start", zoomBegin)
.on("end", zoomFinish)
.on("zoom", zoomed);
// View is needed as the new D3V4 zoom cannot be applied directly on the SVG but a group element
var view = svg.append("g");
svg.call(zoom)
//prevent triggering the zoom on dblclicks
.on("dblclick.zoom", null);
function zoomed() {
view.attr("transform", d3.event.transform);
}
function zoomBegin() {
console.log("Zoom begin");
body.style("cursor", "move");
}
function zoomFinish() {
console.log("Zoom finish");
//body.style("cursor", "crosshair");
}
Комментарии:
1. Я попробовал это здесь . У меня работает в IE11 и Edge. Также работает в Chrome, если у меня не открыты инструменты разработчика . Если инструменты разработки открыты, они выполняют то, что вы описываете. Здесь есть очень старый отчет об ошибке .
2. Боже, да, вы правы, это инструменты разработки в Chrome. Это работает в Firefox и Chrome без инструментов разработки. Большое вам спасибо, пожалуйста, не могли бы вы опубликовать свой комментарий в качестве ответа, чтобы я мог пометить его как правильное решение? Спасибо!
Ответ №1:
Как я уже говорил в своих комментариях, я опробовал это здесь. У меня это работает в IE11 и Edge. Это также работает в Chrome, если у меня не открыты инструменты разработчика. Если инструменты разработки открыты, они выполняют то, что вы описываете. Здесь есть очень старый отчет об ошибке, описывающий все кровавые подробности.
Код, потому что я не могу опубликовать без него 🙂
function zoomBegin() {
console.log("Zoom begin");
svg.style("cursor", "move");
}
function zoomFinish() {
console.log("Zoom finish");
svg.style("cursor", "auto");
}
Комментарии:
1. Большое вам спасибо!