В процессе игры с SVG впервые (используя библиотеку Raphael ) я столкнулся с проблемой позиционирования динамических элементов на холсте таким образом, что они полностью содержится внутри холста. То, что я пытаюсь сделать, - это случайное расположение n слов / коротких фраз.
Поскольку текст является переменным, его позиция также должна быть переменной, поэтому я делаю следующее:
- Первоначально создание текста в точке
0,0
без непрозрачности.
- Проверка ширины нарисованного текстового элемента с помощью
text.getBBox().width
.
- Установка новой
x
координаты как Math.random() * (canvas_width - ( text_width/2 ) - pad)
.
- Изменение координаты
x
текста на вновь установленное значение (text.attr( 'x', x )
).
- Установка атрибута непрозрачности текста на 1.
Я буду первым, кто признает, что моя математическая хватка ограничена, но это кажется довольно простым. Каким-то образом я все равно получаю текст, бегущий за правый край моего холста. Для простоты выше я удалил бит, который также устанавливает минимальное значение x
, добавив его к результату Math.random()
. Однако она есть, и я вижу ту же проблему на переднем крае холста.
Насколько я понимаю (как оно есть), биты Math.random()
будут генерировать число от 0 до 1, которое затем можно умножить на некоторое число (в моем случае, ширина холста - половина ширины текста - некоторые произвольные отступы), чтобы получить внешнюю границу. Я делю ширину текста пополам, потому что его позиция на сетке установлена в центре.
Надеюсь, я только что слишком долго на это смотрел, но моя математика , что , ржавая, или я что-то неправильно понимаю в поведении Math.random()
, SVG, текста или чего-то еще капот этого решения?