Метод, который мне нравится использовать, заключается в том, чтобы обернуть код в функцию (давайте назовем его main()
) и выполнить повторно при изменении размера экрана.
В начале этой новой функции main()
удалите старую (и теперь избыточного размера) svg.
d3.select("#<id of svg>").remove();
Затем создайте новую шкалу y, используя
var new_width = document.getElementById("<Div ID>").clientWidth;
var new_height = document.getElementById("<Div ID>").clientHeight;
и примените их к новому svg при его создании.D3 должен позволить вам запустить строку .remove()
до того, как будет создан исходный svg.Обязательно добавьте идентификатор при создании svg (используя attr("id", "<id of svg>")
).
После этого вы можете вызывать функцию main () при изменении размера с помощью
d3.select(window).on( "resize", main() );
Способ, которым вы хотите на самом деле изменить размер Div
, теперь будет зависеть от вашего CSS, поэтомуВы можете использовать что-то вроде {height:50vh}
или что угодно.
Надеюсь, это поможет.
PS Кстати, а почему вы используете D3 версии 3?Мы до v5 :)