@BogdanMetelsky

Код .js выдаёт ошибку переменной. Что не так с кодом?

Код выдаёт ошибку, не могу понять ,что не так с ним(

SyntaxError: Identifier 'width' has already been declared
at dn (:16:5449)


<!DOCTYPE html>
<html lang="ru">
<head>
    <title>Конструктор дерева с использованием d3.js</title>
    <meta charset="utf-8">
</head>
<body>
      <script src = "d3.min.js"></script>
	    <script>
	// Первым делом необходимо определить некоторые константы, которые будут использоваться для создания дерева
	const width = 500; // Ширина окна дерева
const height = 500; // Высота окна дерева
const svg = d3.select("body") // Выбираем блок body в HTML-документе
	.append("svg") // Добавляем новый элемент svg
	.attr("width", width) // Задаем ширину окна
	.attr("height", height); // Задаем высоту окна
// Затем создадим дерево с помощью метода tree()
const tree = d3.tree(); // Задаем размеры окна для дерева

// Теперь мы можем загрузить наши данные и обработать их
d3.json("data.json", function(error, data) {
	if (error) {
		// В случае ошибки можно выбросить исключение, вывести сообщение в консоль или сделать что-то еще
		throw error;
	}
	// Здесь может быть код, который будет выполнен, если данные успешно загружены

	// После загрузки данных мы можем начать создавать дерево
	// Сначала преобразуем данные в формат, который может быть использован методом tree()
	const treeData = tree(d3.hierarchy(data));

	// Теперь мы можем добавить узлы и связи между ними на нашу канву SVG
	// Добавим узлы в виде кружков
	const nodes = svg.selectAll(".node")
		.data(treeData.descendants())
		.enter()
		.append("g")
		.attr("class", "node")
		.attr("transform", function(d) {
			return "translate(" + d.x + "," + d.y + ")";
		});

	nodes.append("circle")
		.attr("r", 10)
		.style("fill", "#fff")
		.style("stroke", "#000");

	// Добавим текстовые метки для каждого узла
	nodes.append("text")
		.attr("dy", ".35em")
		.attr("y", function(d) {
			return d.children ? -20 : 20;
		})
		.style("text-anchor", "middle")
		.text(function(d) {
			return d.data.name;
		});

	// Добавим связи между узлами
	svg.selectAll(".link")
		.data(treeData.links())
		.enter()
		.append("path")
		.attr("class", "link")
		.attr("d", d3.linkHorizontal()
			.x(function(d) {
				return d.x;
			})
			.y(function(d) {
				return d.y;
			}));
}); </script>
</body>
</html>
  • Вопрос задан
  • 79 просмотров
Решения вопроса 2
1) Зачем мусорить в глобальной области видимости?
Оберни весь код в IIFE
https://developer.mozilla.org/en-US/docs/Glossary/...
Таким образом изолируешь свои переменные от глобальных, и точно ничего не перетрешь в глобальной области.
2) Если хочешь получить помощь, оформляй снипет так чтобы другой мог его запустить
Вот эта строка <script src = "d3.min.js"></script> не будет работать у других.
Я пробовал заменить на
<script src="https://d3js.org/d3.v7.min.js"></script>
при этом код не работает и ошибок не выдает.
Ответ написан
Комментировать
VoidVolker
@VoidVolker Куратор тега JavaScript
Dark side eye. А у нас печеньки! А у вас?
Написано же, что переменная уже существует. Просто используйте другое имя.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы