#javascript #reactjs #plotly #plotly.js
#javascript #reactjs #сюжет #plotly.js
Вопрос:
в plotly.js диаграмма (с помощью react), я могу добавить значок и довольно легко сделать его переключателем. Кажется, что не так просто решить, запускается ли кнопка «вкл.» или «выкл.». В моем случае он всегда включен.
Перепробовал все возможные комбинации приведенных ниже переменных, но безрезультатно.
Можно ли это как-то сделать?
modeBarButtonsToAdd: [
{
name: 'Toggle Hover Syncronisation',
icon: mouse,
click: toggleHover,
attr: 'hover___',
val: 'hover',
toggle: true,
},
],
Ответ №1:
Вы почти сделали это, не устанавливайте attr
вообще.
const trace = {
x: [1, 2, 3, 4],
y: [10, 15, 13, 17],
type: 'scatter'
}
Plotly.plot('chart', [trace], {}, {
displaylogo: false,
displayModeBar: true,
modeBarButtonsToAdd: [{
name: 'Toggle Hover Syncronisation',
icon: Plotly.Icons.movie,
click: () => console.log('click'),
// attr: 'hover__',
val: 'hover',
toggle: true
}]
})
<script src="https://cdn.plot.ly/plotly-latest.min.js"></script>
<div id="chart"><!-- Plotly chart will be drawn inside this DIV --></div>
Примечание: я использовал значок по умолчанию, но вы можете установить любой svg
значок, и он будет работать так же. Поиграйте с .active
классом и своим переключателем.
Надеюсь, это поможет ^^
Комментарии:
1. Спасибо! Да, используя ваш пример, я могу заставить его работать так, как задумано. Это заставило меня поискать немного больше, и я обнаружил, что проблема, вероятно, связана с React. Без атрибута attr переключатель становится включенным только при наведении курсора мыши на диаграмму. Если для параметра ‘attr’ установлено любое значение, я получаю желаемую функциональность переключения, но начальное состояние всегда включено. Я попробовал свою удачу в codepen, но способ написания приложений с реактивным сюжетом там (с добавлением React.createElement и т. Д.) Мне незнаком, Поэтому на данный момент я не могу привести пример моей проблемы там.
Ответ №2:
Если я понял, что вы хотели бы, это переключаемая кнопка, но неактивная в качестве значения по умолчанию?
Мне не удалось заставить его работать с параметром toggle
. Состояние всегда начинается как активное.
Вот обходной путь, который я сделал (код реакции):
В конфигурации Plotly
modeBarButtonsToAdd: [
{
name: 'Toggle Hover Syncronisation',
icon: mouse,
click: () => setToggle(isToggled => !isToggled),
attr: 'toggle-hover-syncronisation',
},
],
attr будет добавлен к кнопке в dom: data-attr="toggle-hover-syncronisation"
В компоненте
function Component() {
const [isToggled, setToggle] = useState(false);
return (
<div id="plot" className={isToggled ? 'toggle-hover-syncronisation-active' : ''} />
)
}
Класс toggle-hover-syncronisation-active
доступен, когда кнопка активна
CSS
.toggle-hover-syncronisation-active a[data-attr=toggle-hover-syncronisation] { // target the a element with the corresponding data-attr
path {
fill: rgba(255, 255, 255, 0.7) !important; // override the color with the famous !important (to be careful)
}
}
Это может быть обходным путем, пока этот ответ на форуме не изменится.
Я пробовал только с Plotly 1.57.1, надеюсь, это поможет 🙂