victorzadorozhnyy
@victorzadorozhnyy

Почему на SVG элементе могут быть мертвые зоны для события мыши?

Есть график на d3.js и на нем для элементов заданы события:
var tooltip = d3.select('body').append('div')
            .style('position', 'absolute')
            .style('background', '#fff')
            .style('padding', '8 21px')
            .style('border', '2px rgba(0, 0, 0, 0.74) solid')
            .style('border-radius', '5px')
            .style('opacity', '0')
            .style('font-size', 'x-large');

//Курсор становится рукой
.attr("class", function(d){
                if(d.name=='Other')return 'hand';

.on('mouseover', function(d){
                tooltip.transition().duration(500)
                    .style('opacity', 0.9);

                tooltip.html(d)
                    .style('left', (d3.event.pageX +'px'))
                    .style('top', (d3.event.pageY+'px'))
                    .html(function() {
                        return "<strong>" +d.name + "</strong> <span style='color:red'>" + d.number + "</span>"
                    });

                d3.select(this)
                    .style('opacity', 0.5)
            })
            .on('mouseout', function(){
                tooltip.transition().duration(200)
                    .style('opacity', 0);

                d3.select(this)
                    .style('opacity', 1)
            });

Все работает, но в некоторые моменты мышка не реагирует на событие должным образом, курсор становится как для работы с текстом или просто обычным остается. Такие слепые зоны.
Кто сталкивался и как победить?
  • Вопрос задан
  • 243 просмотра
Решения вопроса 1
victorzadorozhnyy
@victorzadorozhnyy Автор вопроса
Загадка расскрыта, курсор попадал на невидимый tooltip и не раегировал на сам блок. Добавил здвиг в позицыю и все ок
tooltip.html(d)
                    .style('left', ((d3.event.pageX+40) +'px'))
                    .style('top', ((d3.event.pageY-40)+'px'))
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
archakov06
@archakov06
Frontend-разработчик (ReactJS)
Помести SVG в какой-нибудь блок, и отлавливай события этого блока. Тогда не будет "мертвых зон"
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы
summer Ярославль
от 100 000 до 140 000 ₽
КРАФТТЕК Санкт-Петербург
от 60 000 до 80 000 ₽