Как отобразить многоцветие на слайдере с помощью d3-simple-slider.js

Я использую слайдер d3-simple и хочу, чтобы на слайдере отображалось многоцветие, т.е.

В диапазоне 0–9 он должен быть синим, а от 9 до 26 — оранжевым, а для диапазона 26–60 цвет должен быть красным. Если я переместил ручку, которая в настоящее время указывает на 26, затем сдвину ее влево, за ней должен последовать красный цвет, аналогично для Другая ручка тоже. Может кто-нибудь помочь в этом вопросе?

 const rangeSvg = d3.select('figure#rangeContainer')
      .append('svg')
      .attr('width', 350) 
      .attr('height', height);

    const segmentWidth = 90; 

    // Create the first slider
    const rangeSlider = rangeSvg.append('g')
      .attr('transform', 'translate(10,30)'); // Position the first slider

    // Call your slider function to draw the first slider
    rangeSlider.call(sliderHorizontal()

      .min(1)
      .max(60)
      .step(1)
      .default([6,36])
      .tickValues([1, 6, 36, 60])
      .width(segmentWidth * 3)
      .handle(d3.symbol().type(d3.symbolCircle).size(100)())
      .fill('orange') // Apply the gradient here
      .on('onchange', selectedPeriod => {
       let fileAgingPeriod = selectedPeriod.map(Math.round);
        this.activeValue = fileAgingPeriod[0];
        this.obsoleteValue = tfileAgingPeriod[1];
        this.cdr.detectChanges(); 
      })
    );

    rangeSlider.select('.track-inset')
      .attr('stroke', '#54A7FF');
    //  .attr('stroke-dasharray',230);

    rangeSlider.selectAll('.handle')
      .attr('fill', '#54A7FF');

Вы уверены, что это возможно с помощью компонента под названием «простой слайдер»? Возможно, вам придется изменить сам компонент.

AKX 03.09.2024 18:44

Я думаю, что это возможно.

Piyush Soni 03.09.2024 19:14

Можете ли вы настроить таргетинг на определенные элементы SVG с помощью CSS? Было бы полезно предоставить пример кода этого конкретного слайдера, а не просто скриншот.

jjroley 03.09.2024 19:22

@jjroley, пожалуйста, проверьте код, упомянутый выше.

Piyush Soni 03.09.2024 19:43
Поведение ключевого слова "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
4
50
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

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

Вот небольшой трюк с d3/SVG. Он клонирует «вставку» ползунка, чтобы разбить их на две части: одну до выделения, окрашенную в синий цвет, а другую после нее, окрашенную в красный цвет. Затем размер двух вставок динамически изменяется при перемещении ползунка.

<script src = "https://d3js.org/d3.v7.js"></script>
<script src = "https://unpkg.com/d3-simple-slider"></script>

<p id = "value"></p>
<div id = "slider"></div>

<script>
  const min = 1,
    max = 60;

  // function to dynamically resize
  setInsetLens = (selection) => {
    d3.select('#before-inset')
    .attr('x2', (selection[0] / (min + max)) * initialWidth);
    d3.select('#after-inset')
    .attr('x1', (selection[1] / (min + max)) * initialWidth);
  };

  var slider = d3
    .sliderHorizontal()
    .min(min)
    .max(max)
    .step(1)
    .default([6, 36])
    .tickValues([1, 6, 36, 60])
    .width(90 * 3)
    .handle(d3.symbol().type(d3.symbolCircle).size(100)())
    .fill('orange')
    .on('onchange', setInsetLens);

  d3.select('#slider')
    .append('svg')
    .attr('width', 500)
    .attr('height', 100)
    .append('g')
    .attr('transform', 'translate(30,30)')
    .call(slider);

  // clone the inset, set the colors and get its initial width
  const initialWidth = d3.select('.track-inset')
    .attr('id', 'before-inset')
    .attr('stroke', 'steelblue')
    .clone()
    .attr('id', 'after-inset')
    .attr('stroke', 'red')
    .node()
    .getBBox()
    .width;

  // set initial size
  setInsetLens([6,36]);

</script>

Большое спасибо, это сработало, я интегрировал это в свой угловой код и создал его. Большое спасибо за ваши усилия, я очень ценю это. Я многому научился из вашего решения.

Piyush Soni 05.09.2024 18:40

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