Попови
Документация и примери за добавяне на изскачащи елементи на Bootstrap, като тези в iOS, към всеки елемент на вашия сайт.
Преглед
Неща, които трябва да знаете, когато използвате плъгина popover:
- Popovers разчитат на библиотеката на трета страна Popper за позициониране. Трябва да включите popper.min.js преди bootstrap.js или да използвате
bootstrap.bundle.min.js
/bootstrap.bundle.js
, който съдържа Popper, за да работят popovers! - Popovers изискват приставката за подсказки като зависимост.
- Popovers са включени поради причини, свързани с производителността, така че трябва да ги инициализирате сами .
- Нулевата дължина
title
иcontent
стойностите никога няма да показват изскачане. - Посочете
container: 'body'
, за да избегнете проблеми с рендирането в по-сложни компоненти (като нашите входни групи, групи бутони и т.н.). - Задействането на изскачащи съобщения върху скрити елементи няма да работи.
- Изскачащи съобщения за
.disabled
илиdisabled
елементи трябва да се задействат върху обвиващ елемент. - Когато се задействат от анкери, които преминават през множество линии, изскачащите екрани ще бъдат центрирани между общата ширина на котвите. Използвайте
.text-nowrap
на вашия<a>
s, за да избегнете това поведение. - Popovers трябва да бъдат скрити, преди съответните им елементи да бъдат премахнати от DOM.
- Popovers могат да бъдат задействани благодарение на елемент в DOM в сянка.
prefers-reduced-motion
медийната заявка. Вижте раздела за
намалено движение в нашата документация за достъпност .
Продължете да четете, за да видите как работят изскачащите екрани с някои примери.
Пример: Активиране на изскачащи прозорци навсякъде
Един от начините за инициализиране на всички изскачащи съобщения на страница е да ги изберете по техния data-bs-toggle
атрибут:
var popoverTriggerList = [].slice.call(document.querySelectorAll('[data-bs-toggle="popover"]'))
var popoverList = popoverTriggerList.map(function (popoverTriggerEl) {
return new bootstrap.Popover(popoverTriggerEl)
})
Пример: Използване на container
опцията
Когато имате някои стилове на родителски елемент, които пречат на изскачащ прозорец, ще искате да посочите персонализиран container
, така че HTML на изскачащия елемент да се показва вместо това в този елемент.
var popover = new bootstrap.Popover(document.querySelector('.example-popover'), {
container: 'body'
})
Пример
<button type="button" class="btn btn-lg btn-danger" data-bs-toggle="popover" title="Popover title" data-bs-content="And here's some amazing content. It's very engaging. Right?">Click to toggle popover</button>
Четири посоки
Налични са четири опции: подравнени отгоре, отдясно, отдолу и отляво. Упътванията се отразяват, когато използвате Bootstrap в RTL.
<button type="button" class="btn btn-secondary" data-bs-container="body" data-bs-toggle="popover" data-bs-placement="top" data-bs-content="Top popover">
Popover on top
</button>
<button type="button" class="btn btn-secondary" data-bs-container="body" data-bs-toggle="popover" data-bs-placement="right" data-bs-content="Right popover">
Popover on right
</button>
<button type="button" class="btn btn-secondary" data-bs-container="body" data-bs-toggle="popover" data-bs-placement="bottom" data-bs-content="Bottom popover">
Popover on bottom
</button>
<button type="button" class="btn btn-secondary" data-bs-container="body" data-bs-toggle="popover" data-bs-placement="left" data-bs-content="Left popover">
Popover on left
</button>
Отхвърляне при следващо щракване
Използвайте focus
спусъка, за да отхвърлите изскачащи съобщения при следващото щракване на потребителя върху елемент, различен от превключващия елемент.
Изисква се специфично маркиране за отхвърляне при следващо щракване
За правилното поведение между различни браузъри и различни платформи трябва да използвате <a>
маркера, а не маркера <button>
, и също трябва да включите tabindex
атрибут.
<a tabindex="0" class="btn btn-lg btn-danger" role="button" data-bs-toggle="popover" data-bs-trigger="focus" title="Dismissible popover" data-bs-content="And here's some amazing content. It's very engaging. Right?">Dismissible popover</a>
var popover = new bootstrap.Popover(document.querySelector('.popover-dismiss'), {
trigger: 'focus'
})
Деактивирани елементи
Елементите с disabled
атрибута не са интерактивни, което означава, че потребителите не могат да задържат курсора или да щракнат върху тях, за да задействат изскачащ прозорец (или подсказка). Като заобиколно решение ще искате да задействате изскачащия прозорец от обвивка <div>
или <span>
, в идеалния случай направена с възможност за фокусиране от клавиатурата, като използвате tabindex="0"
.
За забранени изскачащи тригери може също да предпочетете data-bs-trigger="hover focus"
изскачащия прозорец да се показва като незабавна визуална обратна връзка за вашите потребители, тъй като те може да не очакват да щракнат върху деактивиран елемент.
<span class="d-inline-block" tabindex="0" data-bs-toggle="popover" data-bs-trigger="hover focus" data-bs-content="Disabled popover">
<button class="btn btn-primary" type="button" disabled>Disabled button</button>
</span>
дързък
Променливи
$popover-font-size: $font-size-sm;
$popover-bg: $white;
$popover-max-width: 276px;
$popover-border-width: $border-width;
$popover-border-color: rgba($black, .2);
$popover-border-radius: $border-radius-lg;
$popover-inner-border-radius: subtract($popover-border-radius, $popover-border-width);
$popover-box-shadow: $box-shadow;
$popover-header-bg: shade-color($popover-bg, 6%);
$popover-header-color: $headings-color;
$popover-header-padding-y: .5rem;
$popover-header-padding-x: $spacer;
$popover-body-color: $body-color;
$popover-body-padding-y: $spacer;
$popover-body-padding-x: $spacer;
$popover-arrow-width: 1rem;
$popover-arrow-height: .5rem;
$popover-arrow-color: $popover-bg;
$popover-arrow-outer-color: fade-in($popover-border-color, .05);
Използване
Активиране на изскачащи прозорци чрез JavaScript:
var exampleEl = document.getElementById('example')
var popover = new bootstrap.Popover(exampleEl, options)
Направете изскачащите екрани да работят за потребители на клавиатури и помощни технологии
За да позволите на потребителите на клавиатурата да активират вашите изскачащи съобщения, трябва да ги добавяте само към HTML елементи, които традиционно са фокусирани от клавиатурата и са интерактивни (като връзки или контроли на формуляр). Въпреки че произволни HTML елементи (като <span>
s) могат да бъдат фокусирани чрез добавяне на tabindex="0"
атрибута, това ще добави потенциално досадни и объркващи табулатори на неинтерактивни елементи за потребителите на клавиатурата и повечето помощни технологии в момента не обявяват съдържанието на изскачащия прозорец в тази ситуация . Освен това, не разчитайте само на hover
това като на задействане на вашите изскачащи съобщения, тъй като това ще ги направи невъзможни за задействане от потребители на клавиатура.
Въпреки че можете да вмъкнете богат, структуриран HTML в изскачащи съобщения с html
опцията, силно препоръчваме да избягвате добавянето на прекомерно количество съдържание. Начинът, по който изскачащите елементи работят в момента, е, че след като се покажат, тяхното съдържание е свързано с тригерния елемент с aria-describedby
атрибута. В резултат на това цялото съдържание на popover ще бъде обявено на потребителите на помощни технологии като един дълъг, непрекъснат поток.
Освен това, въпреки че е възможно да включите и интерактивни контроли (като елементи на формуляр или връзки) във вашия изскачащ прозорец (чрез добавяне на тези елементи към allowList
разрешените атрибути и тагове), имайте предвид, че в момента изскачащият прозорец не управлява реда на фокусиране на клавиатурата. Когато потребител на клавиатура отвори изскачащ прозорец, фокусът остава върху задействащия елемент и тъй като изскачащият елемент обикновено не следва незабавно задействането в структурата на документа, няма гаранция, че придвижването напред/натисканетоTABще премести потребител на клавиатура в самия изскачащ прозорец. Накратко, простото добавяне на интерактивни контроли към изскачащ прозорец вероятно ще направи тези контроли недостъпни/неизползваеми за потребители на клавиатури и потребители на помощни технологии или най-малкото ще направи нелогичен цялостен ред на фокусиране. В тези случаи обмислете използването на модален диалог вместо това.
Настроики
Опциите могат да се предават чрез атрибути на данни или JavaScript. За атрибути на данни добавете името на опцията към data-bs-
, както в data-bs-animation=""
. Уверете се, че сте променили типа case на името на опцията от camelCase на kebab-case, когато предавате опциите чрез атрибути на данни. Например, вместо да използвате data-bs-customClass="beautifier"
, използвайте data-bs-custom-class="beautifier"
.
sanitize
,
sanitizeFn
, и
allowList
не могат да бъдат предоставени с помощта на атрибути на данни.
Име | Тип | По подразбиране | Описание |
---|---|---|---|
animation |
булево | true |
Приложете CSS избледняващ преход към изскачащия прозорец |
container |
низ | елемент | невярно | false |
Добавя изскачащия прозорец към конкретен елемент. Пример: |
content |
низ | елемент | функция | '' |
Стойност на съдържанието по подразбиране, ако Ако е дадена функция, тя ще бъде извикана с нейната |
delay |
номер | обект | 0 |
Забавяне на показването и скриването на изскачащия прозорец (ms) - не се отнася за тип ръчно задействане Ако е предоставен номер, забавянето се прилага и за скриване/показване Структурата на обекта е: |
html |
булево | false |
Вмъкнете HTML в изскачащия прозорец. Ако е невярно, innerText свойството ще се използва за вмъкване на съдържание в DOM. Използвайте текст, ако се притеснявате от XSS атаки. |
placement |
низ | функция | 'right' |
Как да позиционирате изскачащия прозорец - автоматично | отгоре | дъно | наляво | точно. Когато функция се използва за определяне на разположението, тя се извиква с изскачащия DOM възел като първи аргумент и задействащия елемент DOM възел като втори. Контекстът |
selector |
низ | невярно | false |
Ако е предоставен селектор, изскачащите обекти ще бъдат делегирани на посочените цели. На практика това се използва, за да се даде възможност за добавяне на изскачащи съобщения към динамично HTML съдържание. Вижте това и един информативен пример . |
template |
низ | '<div class="popover" role="tooltip"><div class="popover-arrow"></div><h3 class="popover-header"></h3><div class="popover-body"></div></div>' |
Основен HTML за използване при създаване на изскачащ прозорец. Popover's Popover's
Най-външният обвиващ елемент трябва да има |
title |
низ | елемент | функция | '' |
Стойност на заглавието по подразбиране, ако Ако е дадена функция, тя ще бъде извикана с нейната |
trigger |
низ | 'click' |
Как се задейства popover - щракнете върху | кръжи | фокус | ръководство. Можете да подадете няколко тригера; отделете ги с интервал. manual не може да се комбинира с друг тригер. |
fallbackPlacements |
масив | ['top', 'right', 'bottom', 'left'] |
Дефинирайте резервни разположения, като предоставите списък с разположения в масив (по ред на предпочитанията). За повече информация вижте документите за поведение на Popper |
boundary |
низ | елемент | 'clippingParents' |
Граница на ограничение за препълване на изскачащия прозорец (отнася се само за модификатора на PrevenOverflow на Popper). По подразбиране той е 'clippingParents' и може да приеме препратка към HTMLElement (само чрез JavaScript). За повече информация вижте документите на Popper's detectOverflow . |
customClass |
низ | функция | '' |
Добавете класове към изскачащия прозорец, когато се покаже. Имайте предвид, че тези класове ще бъдат добавени в допълнение към всички класове, посочени в шаблона. За да добавите няколко класа, разделете ги с интервали: Можете също така да подадете функция, която трябва да върне единичен низ, съдържащ допълнителни имена на класове. |
sanitize |
булево | true |
Активирайте или деактивирайте санирането. Ако е активирано 'template' , 'content' и 'title' опциите ще бъдат дезинфекцирани. Вижте раздела за дезинфектанти в нашата JavaScript документация . |
allowList |
обект | Стойност по подразбиране | Обект, който съдържа разрешени атрибути и тагове |
sanitizeFn |
нула | функция | null |
Тук можете да предоставите своя собствена функция за дезинфекция. Това може да бъде полезно, ако предпочитате да използвате специална библиотека за извършване на дезинфекция. |
offset |
масив | низ | функция | [0, 8] |
Отместване на изскачащия прозорец спрямо неговата цел. Можете да подадете низ в атрибути на данни със стойности, разделени със запетая, като: Когато функция се използва за определяне на отместването, тя се извиква с обект, съдържащ разположението на popper, препратката и popper rects като първи аргумент. Задействащият елемент DOM възел се предава като втори аргумент. Функцията трябва да върне масив с две числа: . За повече информация вижте офсетните документи на Popper . |
popperConfig |
нула | обект | функция | null |
За да промените конфигурацията на Popper по подразбиране на Bootstrap, вижте конфигурацията на Popper . Когато се използва функция за създаване на конфигурацията на Popper, тя се извиква с обект, който съдържа конфигурацията на Popper по подразбиране на Bootstrap. Помага ви да използвате и обедините настройките по подразбиране с вашата собствена конфигурация. Функцията трябва да върне конфигурационен обект за Popper. |
Атрибути на данни за отделни изскачащи съобщения
Опциите за отделни изскачащи екрани могат алтернативно да бъдат определени чрез използването на атрибути на данни, както е обяснено по-горе.
Използване на функция сpopperConfig
var popover = new bootstrap.Popover(element, {
popperConfig: function (defaultBsPopperConfig) {
// var newPopperConfig = {...}
// use defaultBsPopperConfig if needed...
// return newPopperConfig
}
})
Методи
Асинхронни методи и преходи
Всички API методи са асинхронни и стартират преход . Те се връщат при повикващия веднага щом преходът започне, но преди да приключи . В допълнение, извикване на метод на преходен компонент ще бъде игнорирано .
шоу
Разкрива изскачане на елемент. Връща се към повикващия, преди изскачащият прозорец действително да е бил показан (т.е. преди да shown.bs.popover
настъпи събитието). Това се счита за „ръчно“ задействане на popover. Изскачащи съобщения, чието заглавие и съдържание са с нулева дължина, никога не се показват.
myPopover.show()
Крия
Скрива изскачащия прозорец на елемент. Връща се към повикващия, преди изскачащото съобщение да е действително скрито (т.е. преди да hidden.bs.popover
се случи събитието). Това се счита за „ръчно“ задействане на popover.
myPopover.hide()
превключвам
Превключва изскачащия прозорец на елемент. Връща се към повикващия, преди изскачащият прозорец действително да е бил показан или скрит (т.е. преди събитието shown.bs.popover
или да hidden.bs.popover
се появи). Това се счита за „ръчно“ задействане на popover.
myPopover.toggle()
изхвърлям
Скрива и унищожава popover на елемент (Премахва съхранените данни на DOM елемента). Popovers, които използват делегиране (които се създават с помощта на selector
опцията ), не могат да бъдат унищожени поотделно на елементи на задействане на потомък.
myPopover.dispose()
активирайте
Дава възможност за показване на popover на елемент. Изскачащите екрани са активирани по подразбиране.
myPopover.enable()
деактивирайте
Премахва възможността за показване на изскачащ прозорец на елемент. Изскачащият прозорец ще може да се показва само ако бъде активиран отново.
myPopover.disable()
toggleEnabled
Превключва възможността изскачащият прозорец на елемент да бъде показан или скрит.
myPopover.toggleEnabled()
актуализация
Актуализира позицията на изскачащия прозорец на елемент.
myPopover.update()
getInstance
Статичен метод, който ви позволява да получите изскачащия екземпляр, свързан с DOM елемент
var exampleTriggerEl = document.getElementById('example')
var popover = bootstrap.Popover.getInstance(exampleTriggerEl) // Returns a Bootstrap popover instance
getOrCreateInstance
Статичен метод, който ви позволява да получите изскачащия екземпляр, свързан с DOM елемент, или да създадете нов, в случай че не е инициализиран
var exampleTriggerEl = document.getElementById('example')
var popover = bootstrap.Popover.getOrCreateInstance(exampleTriggerEl) // Returns a Bootstrap popover instance
събития
Тип събитие | Описание |
---|---|
show.bs.popover | Това събитие се задейства веднага, когато show се извика методът на екземпляра. |
показано.bs.popover | Това събитие се задейства, когато изскачащият прозорец е направен видим за потребителя (ще изчака CSS преходите да завършат). |
hide.bs.popover | Това събитие се задейства незабавно, когато hide методът на екземпляра е извикан. |
скрити.bs.popover | Това събитие се задейства, когато popover приключи да бъде скрит от потребителя (ще изчака CSS преходите да завършат). |
вмъкнато.bs.popover | Това събитие се задейства след show.bs.popover събитието, когато изскачащият шаблон е добавен към DOM. |
var myPopoverTrigger = document.getElementById('myPopover')
myPopoverTrigger.addEventListener('hidden.bs.popover', function () {
// do something...
})