Библиотека Popper.js прошла несколько этапов развития: от версии 1.x к полностью переработанной архитектуре 2.x. Основная причина появления устаревших возможностей — изменение внутренней модели позиционирования, переход на модульную систему модификаторов и повышение производительности.
В версии 1.x значительная часть логики была жестко связана с конфигурацией через объект настроек. Это приводило к усложнению расширения и поддержки. В версии 2.x архитектура стала более декларативной и модульной, благодаря чему многие старые параметры и подходы были признаны устаревшими.
modifiers старого
форматаВ Popper.js v1 модификаторы задавались как объект:
modifiers: {
offset: { offset: '10, 20' },
preventOverflow: { boundariesElement: 'viewport' }
}
В v2 используется массив объектов:
modifiers: [
{
name: 'offset',
options: {
offset: [10, 20],
},
},
]
Причины устаревания:
positionFixedВ версии 1.x:
positionFixed: true
В версии 2.x заменено на стратегию позиционирования:
strategy: 'fixed'
Почему устарело:
eventsEnabledВ v1:
eventsEnabled: true
В v2 управление событиями вынесено в модификатор
eventListeners:
modifiers: [
{
name: 'eventListeners',
options: {
scroll: true,
resize: true,
},
},
]
Недостатки старого подхода:
removeOnDestroyВ v1:
removeOnDestroy: true
Удалён в v2.
Причина:
flip (старый формат
настроек)В v1:
flip: {
beh * avior: ['top', 'bottom', 'right'],
}
В v2:
{
name: 'flip',
options: {
fallbackPlacements: ['top', 'bottom', 'right'],
},
}
Что изменилось:
offset (строковый
формат)В v1:
offset: '10, 20'
В v2 используется массив:
offset: [10, 20]
Почему строка устарела:
preventOverflow.boundariesElementВ v1:
preventOverflow: {
boundariesElement: 'viewport'
}
В v2:
{
name: 'preventOverflow',
options: {
boundary: 'viewport',
},
}
Причина изменений:
scheduleUpdate()В v1:
popper.scheduleUpdate();
В v2 заменён на:
popper.update();
или асинхронный вариант:
await popper.update();
Причины:
update() (синхронный)В v1 метод был синхронным. В v2:
Изменение поведения:
new Popper(...)В v1:
new Popper(reference, popper, options);
В v2 используется фабричная функция:
createPopper(reference, popper, options);
Причины отказа от конструктора:
Некоторые устаревшие комбинации и поведение:
auto в v1В v2:
placement: 'auto-start'
и используется система fallback через flip.
Что изменилось:
В v1 библиотека активно управляла стилями напрямую:
style="position: absolute; top: 0; left: 0;"
В v2:
Причины:
В v1:
computeStyle: {
gpuAcceleration: true
}
В v2:
{
name: 'computeStyles',
options: {
gpuAcceleration: true,
},
}
Изменения:
В v1 существовали внутренние фазы:
onCreateonUpdateВ v2 они заменены системой фаз модификаторов:
beforeReadreadafterReadbeforeMainmainafterMainbeforeWritewriteafterWriteПреимущества новой системы:
В v1 можно было изменять модификаторы после создания:
popper.options.modifiers.flip.enabled = false;
В v2:
Причина:
Popper.js v1:
Popper.js v2:
Ранее Popper часто применялся вместе с jQuery:
$(element).popper(...)
В современных версиях:
Popper v1 активно использовался в Bootstrap 4.
С переходом на Bootstrap 5:
При миграции с v1 на v2:
Типичные ошибки:
offset)modifiersscheduleUpdate)Каждое устаревшее свойство или метод в Popper.js отражает переход от монолитной конфигурации к декларативной, расширяемой системе, где ключевую роль играют модификаторы и строгая структура выполнения.