Фоновое изображение не заполняет круг - D3 / JavaScript

См. Изображение ниже - Я не могу заставить мое изображение занимать весь круг, если я увеличиваю высоту, тогда изображение просто опускается, я изо всех сил пытался воспроизвести проблему в коде для минимальной версии, но мне жаль, что я просто не смог это сделать, я надеюсь, что если я покажу код, то этого будет достаточно, и, возможно, кто-нибудь заметит что-то, чего мне не хватает.

Изображение правильно заполняет большую часть круга, как вы можете видеть, и круг просто заполняется правильно, если я просто заливаю -> цвет.

Фоновое изображение не заполняет круг - D3 / JavaScript

Код:

Сначала я добавляю шаблон, как я видел в Интернете, а затем вызываю его идентификатор, чтобы изображение загружалось как заливка (URL-адрес).

Я что-то упускаю? Спасибо за любую возможную помощь.

insightAddCircleNodes(onClick: (node: EngagementGraphNode) => void): void {

const imgUrl = "https://ewsqa-images.weforum.org/topics/a1Gb0000001k6I5EAI/standard";
const circle = this.group
  .selectAll('circle.node')
  .data(this.nodes)
  .enter();


circle
  .append("pattern")
  .attr("id", "venus")
  .attr("patternContentUnits", "objectBoundingBox")
  .attr("width", "100%")
  .attr("height", "100%")
  .attr("x", 0)
  .attr("y", 0)
  .append("image")
  .attr("xlink:href", imgUrl)
  .attr("x", 0)
  .attr("y", 0)
  .attr("width", 1)
  .attr("height", 1);


circle
  // Centre - main node
  .filter(node => !node.parent)
  .append('circle')
  .classed('Engagement-GraphNode', true)
  .classed('Engagement-GraphNodeBackground', true)
  .classed('Engagement-GraphLeaf', node => node && (node.depth === 4 && !node.isExtraNode))
  .style('fill', node => `url(#venus)`)  <------- HERE IS WHERE I USE THE IMAGE
  // .style('fill', node => `url("engagement/${this.nodes[0].id}#pattern-${node.indicator.icon}")`)

  .style('opacity', node => (node.visible) ? 1 : 0)
  .style('visibility', node => (node.visible) ? 'visible' : 'hidden')
  .on('click', node => onClick(node));

Я ожидал, что изображение на заднем плане займет весь центральный круг. На самом деле я не совсем уверен, как задается размер кругов, но я предполагал, что, поскольку я использую `` 100% '', он должен заполнить его, также как я уже упоминал, если я скажу, попробуйте увеличить высоту шаблона и изображение, он просто перемещает изображение ниже.

вы не используете квадратное изображение

rioV8 30.10.2018 17:18

Разве нельзя сказать, увеличить изображение, чтобы оно заполнило круг?

Sparlarva 31.10.2018 07:19
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
2
281
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Попробуй это:

...
.append("image")
.attr("xlink:href", imgUrl)
.attr("x", 0)
.attr("y", 0)
.attr("width", 1)
.attr("height", 1)
.attr('preserveAspectRatio', 'xMidYMid slice');

Вы можете позиционировать и масштабировать изображение в шаблоне, используя координаты окна просмотра объекта [0..1].

Примечание. xlink: href не рекомендуется, используйте вместо него href.

Размер изображения 768x512, то есть 1,5: 1. Затем вам нужно переместить координату x начала рисования на 0,25 влево, поэтому x = -0,25.

Используя этот метод, вы можете выбрать любую часть изображения, которую хотите заполнить узором.

...
.append("image")
.attr("href", imgUrl)
.attr("x", -0.25)
.attr("y", 0)
.attr("width", 1.5)
.attr("height", 1);

Другие вопросы по теме