Затемняйте цвет элемента svg каждый раз при нажатии кнопки, используя D3 V3 или JavaScript

У меня есть граф D3, состоящий из различных узлов / ссылок. В этом у меня есть функция, в которой, когда я нажимаю на узел, а затем нажимаю кнопку, он уменьшает непрозрачность каждого другого элемента, кроме промежуточных подключенных узлов и ссылок, а также меняет ссылку на синий, чтобы показать схему.

Затемняйте цвет элемента svg каждый раз при нажатии кнопки, используя D3 V3 или JavaScript

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

Я не хочу делать это с увеличением непрозрачности, я хочу изменить цвет на один оттенок темнее предыдущего.

Я сделал логику, чтобы найти общие ссылки в схеме, но используя D3 / JS, как увеличивать цветовой код до более темного тона каждый раз для любого элемента svg при нажатии кнопки.

Например: в приведенном ниже коде я хочу получать более темный оттенок синего каждый раз при нажатии кнопки, а не менять его на красный.

d3.select('#toDO').on('click', function() {
d3.select("#PathID").attr("stroke" , "red")
})
<script src = "https://cdnjs.cloudflare.com/ajax/libs/d3/3.4.11/d3.min.js"></script>
<svg height = "210" width = "400">
  <path id = "PathID" d = "M150 0 L75 200" stroke = "blue"/>
</svg>
<button id = "toDO">Click</button>
Поведение ключевого слова "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) для оценки ваших знаний,...
1
0
945
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

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

В D3 есть очень удобный метод темнее (k), который, как следует из названия:

Returns a darker copy of this color. If k is specified, it controls how much darker the returned color should be. If k is not specified, it defaults to 1. The behavior of this method is dependent on the implementing color space.

Итак, в вашем коде вам просто нужно использовать d3.color (D3 v4 или v5):

d3.color(d3.select("#PathID").attr("stroke")).darker()

Или d3.rgb (D3 v3):

d3.rgb(d3.select("#PathID").attr("stroke")).darker()

Вот демонстрация:

d3.select('#toDO').on('click', function() {
  d3.select("#PathID").attr("stroke", d3.rgb(d3.select("#PathID").attr("stroke")).darker())
})
<script src = "https://d3js.org/d3.v3.min.js"></script>
<button id = "toDO">Click</button>
<br>
<svg height = "210" width = "400">
  <path id = "PathID" d = "M150 0 L75 200" stroke = "blue" stroke-width = "10px"/>
</svg>

Если нажать кнопку несколько раз, обводка будет почти черной.

Извините, забыл упомянуть, что мой проект сделан с использованием D3 V3. Спасибо

Ash 01.06.2018 16:13

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