И еще совет
Вот кусок вашего кода. Он крайне не эффективен и может тормозить
this.style.paddingLeft = `${len}em`;
this.buddy.style.paddingRight = window.getComputedStyle(this, null).getPropertyValue("padding-left");
this.buddy.style.height = window.getComputedStyle(this, null).getPropertyValue("height");
this.buddy.style.width = window.getComputedStyle(this, null).getPropertyValue("width");
// Далее следует довольно важная строчка, которая влияет на накапливание ошибок
this.buddy.style.paddingLeft = window.getComputedStyle(this, null).getPropertyValue("padding-right");
Что тут происходит.
this.buddy.style.paddingRight = window.getComputedStyle(this, null).getPropertyValue("padding-left"); - установили какой то стиль элементу buddy.
this.buddy.style.height = window.getComputedStyle(this, null).getPropertyValue("height"); - теперь пытаемся получить стиль от this.
Браузер не всегда знает, как установка стиля одному элементу повлияла на другие. Что бы получить вычисленный стиль элемента после изменения стиля других, ему часто приходится делать перерасчет стилей всего DOM дерева, или какой то его части.
Последовательность
установка стиля
получение стиля
установка стиля
получение стиля
....
может вызывать торможение
Сначала, по возможности, надо получить все необходимые стили (ко всяким метрикам типа offsetWidth и т.п это тоже относится), а потом делать все изменения. Множественные изменения браузер накапливает, и применяет их все разом при расчете стилей перед очередным этапом визуализации.