2017-01-26 17 views
1

Я реализую список прямоугольников с d3.js fisheye и хочу добавить фоновое изображение к каждому из прямоугольников. Пытаюсь следующую вещь:D3.js Невозможно добавить фоновое изображение в прямоугольник

svg.append("defs") 
    .append("pattern") 
    .attr("id", "bg") 
    .append("image") 
      .attr("width", 50) 
      .attr("height", h) 
    .attr("xlink:href", "http://www.clker.com/cliparts/1/4/5/a/1331068897296558865Sitting%20Racoon.svg"); 

//Create bars 
var rectEnter = svg.selectAll("rect") 
    .data(dataset) 
    .enter() 
    .append("rect") 
    .attr("x", function(d, i) { 
     return xScale(i); 
    }) 
    .attr("y", function(d) { 
     return 0; 
    }) 
    .attr("width", function(d,i){return xScale.rangeBand(i)}) 
    .attr("height", function(d) { 
     return h; 
    }) 
    .attr("fill", function(d) { 
     return "url(#bg)"; 
    }) 
    .attr("stroke",function(d){return 'black';}); 

Но до сих пор не может сделать изображение появится на прямоугольники. У кого-нибудь есть идеи, почему это происходит и как добавить изображение? Вот the fiddle с моей реализацией.

Для упрощения дела я создал еще один jsfiddle с изображением прикрепленного к Rect, но не работает: https://jsfiddle.net/nitoloz/fd7svrx6/36/

Андрей

ответ

2

Вы должны установить размер pattern:

.attr("width", 50) 
.attr("height", h) 

Ваша обновленная скрипка: http://jsfiddle.net/uzbt1cr6/

+0

О, это действительно работает, спасибо! Однако я обнаружил, что раконы похожи на «размытые», не так ли? Знаете ли вы, если есть способ, чтобы добавить отдельные изображения для каждого как: rectEnter .append ("образ") .attr ("х", 0) .attr ("у", 0) .attr ("ширина", 70) .attr ("высота", h) .attr ("xlink: href", "http://www.clker.com/cliparts/1/4/5/a /1331068897296558865Sitting%20Racoon.svg "); – nitoloz

+0

У вас есть идеи, почему этот образ не может быть виден? https://jsfiddle.net/nitoloz/fd7svrx6/36/ – nitoloz

+1

Добавить изображение в svg, а не прямо: https://jsfiddle.net/dsvbgkL1/. Что касается вашего другого вопроса, так как это * другая проблема, отправьте другой вопрос. –