2014-02-27 2 views
0

Небольшая проблема на одном из них. У меня есть гистограмма, и я хочу, чтобы она отображала текст в строке «mouseenter». Это прекрасно работает, но я хочу удалить этот текст в «mouseout», и я не могу понять его.Удаление текста при событии mouseout

Большое вам спасибо за помощь! Attached: заинтересованная часть d3.js сценария

d3.selectAll("div.line") 
     .append("div") 
     .attr("class","bar") 
     .style("width", function(d){return d.occurrence /10 + "px"}) 
     .on("mouseenter", function(d) { 
      d3.select(this) 
      .append("text") 
      .text(function(d){return d.occurrence + " occurences"}); 
     }) 
     .on("mouseout", function(d) { 
      d3.select(this) 
      .select(".text").remove(); 
     }); 
+0

Может быть проще использовать непрозрачность.' Стиль («opacity», 1) «показать текст, стиль (« непрозрачность », 0)», чтобы скрыть его. – FernOfTheAndes

ответ

1

В вашей кода, вы пытаетесь выбрать .text для мыши. Вы выбираете узлы, у которых есть класс: «текст», а не текстовые узлы. Удалите точку.

Я бы, вероятно, также изменил mouseout «select» на «selectall» на всякий случай, если вы пропустите событие mouseout и случайно добавите два текстовых узла.

Edit:

http://jsfiddle.net/QbGRE/

d3.select("div.line").selectAll("div.bar") 
    .data(data, function(d) { return d.id;  }) 
    .enter() 
    .append("div").attr("class","bar") 
    .style("width", function(d){return d.occurrence /10 + "px";}) 
    .on("mouseover", function(d) { 
     d3.select(this) 
     .append("text").style("pointer-events", "none") 
     .text(function(d){return d.occurrence + " occurences";}); 
    }) 
    .on("mouseout", function(d) { 
     d3.select(this) 
     .select("text").remove(); 
    }); 

Подчищен код.

  1. "Mouseover/MouseOut" вместо "MouseEnter/MouseOut"
  2. .Select ("текст") вместо ".text".
  3. стиль («указатель-события», «нет) по тексту, чтобы остановить это вызывает дополнительные события мыши, когда он добавил.
  4. Добавлены поддельные данные.
+0

Спасибо за ваш ответ. Но нет, это не решает проблему. Текстовая строка добавляет себя к предыдущей, которая не исчезла ... – basbabybel

+0

Это была только часть проблемы. См. Мое редактирование. – Glenn

+0

Это прекрасно работает. И я нахожу решение очень элегантным. Большое спасибо, Гленн. – basbabybel

0

Самый простой способ сделать это, чтобы присвоить уникальный идентификатор для нового элемента текста и выберите, что:

.on("mouseenter", function(d) { 
     d3.select(this) 
     .append("text") 
     .attr("id", "myText") 
     .text(function(d){return d.occurrence + " occurences"}); 
    }) 
    .on("mouseout", function(d) { 
     d3.select("#myText").remove(); 
    }); 
+0

Это кажется сработавшим. Хотя у меня есть странное мигание, и текст не отображается в какой-то момент, по каким-то причинам: как с Chrome, так и с Firefox. Знаете ли вы, что может вызвать это странное поведение? – basbabybel

+0

Трудно сказать без полного примера. Возможно, вы накладываете текст на 'div', а мышь ненадолго перебирает Таким образом, 'div' получит событие mouseout. Кроме того, HTML не имеет Элементы 'text' - вы хотели добавить это в SVG? –

+0

http://stackoverflow.com/questions/2802687/is-there-a-way-to-create-your-own-html-tag-in-html5. Это была одна из тех вещей, которые я пропустил на примере jsfiddle, но она все равно работала. – Glenn

Смежные вопросы