Ana içeriğe geç Dokümanlar navigasyonuna atla
Check
in English

popovers

iOS'ta bulunanlar gibi Bootstrap açılır pencerelerini sitenizdeki herhangi bir öğeye eklemek için belgeler ve örnekler.

genel bakış

Popover eklentisini kullanırken bilmeniz gerekenler:

  • Popover'lar, konumlandırma için üçüncü taraf kitaplığı Popper'a güvenir . popper.min.js'yi önce eklemeli bootstrap.jsveya bootstrap.bundle.min.jsPopper içeren birini kullanmalısınız.
  • Popover'lar, bağımlılık olarak popover eklentisini gerektirir .
  • Popover'lar performans nedenleriyle etkinleştirilir, bu nedenle bunları kendiniz başlatmanız gerekir .
  • Sıfır uzunluk titleve contentdeğerler hiçbir zaman bir popover göstermez.
  • container: 'body'Daha karmaşık bileşenlerde (giriş gruplarımız, düğme gruplarımız vb.) oluşturma sorunlarını önlemek için belirtin .
  • Gizli öğelerde popover'ları tetiklemek işe yaramaz.
  • .disabledveya öğeleri için disabledaçılır öğeler, bir sarmalayıcı öğede tetiklenmelidir.
  • Birden çok çizgiyi saran bağlantılardan tetiklendiğinde, açılır öğeler bağlantıların toplam genişliği arasında ortalanır. Bu davranıştan kaçınmak .text-nowrapiçin s üzerinde kullanın .<a>
  • Popover'lar, karşılık gelen öğeleri DOM'dan kaldırılmadan önce gizlenmelidir.
  • Bir gölge DOM içindeki bir öğe sayesinde popover'lar tetiklenebilir.
Varsayılan olarak, bu bileşen, açıkça izin verilmeyen tüm HTML öğelerini çıkaran yerleşik içerik temizleyiciyi kullanır. Daha fazla ayrıntı için JavaScript belgelerimizdeki dezenfektan bölümüne bakın.
Bu bileşenin animasyon efekti prefers-reduced-motionortam sorgusuna bağlıdır. Erişilebilirlik belgelerimizin azaltılmış hareket bölümüne bakın .

Popover'ların bazı örneklerle nasıl çalıştığını görmek için okumaya devam edin.

Örnekler

Popover'ları etkinleştir

Yukarıda belirtildiği gibi, kullanılmadan önce popover'ları başlatmanız gerekir. Bir sayfadaki tüm açılır pencereleri başlatmanın bir yolu, onları şu şekilde data-bs-toggleözniteliklerine göre seçmektir:

const popoverTriggerList = document.querySelectorAll('[data-bs-toggle="popover"]')
const popoverList = [...popoverTriggerList].map(popoverTriggerEl => new bootstrap.Popover(popoverTriggerEl))

Canlı demo

Aşağıdaki canlı popover'ı oluşturmak için yukarıdaki snippet'e benzer JavaScript kullanıyoruz. Başlıklar aracılığıyla belirlenir data-bs-titleve gövde içeriği aracılığıyla ayarlanır data-bs-content.

titleYa da data-bs-titleHTML'nizde kullanmaktan çekinmeyin . Kullanıldığında , Popper , öğenin oluşturulduğu zaman titleile otomatik olarak değiştirecektir .data-bs-title
html
<button type="button" class="btn btn-lg btn-danger" data-bs-toggle="popover" data-bs-title="Popover title" data-bs-content="And here's some amazing content. It's very engaging. Right?">Click to toggle popover</button>

dört yön

Dört seçenek mevcuttur: üst, sağ, alt ve sol. RTL'de Bootstrap kullanılırken yönergeler yansıtılır. data-bs-placementYönü değiştirmek için ayarlayın .

html
<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>

Gelenekcontainer

Bir üst öğede, bir açılır öğeye müdahale eden bazı stilleriniz olduğunda, containeraçılır öğenin HTML'sinin bunun yerine o öğenin içinde görünmesi için bir özel belirtmek isteyeceksiniz. Bu, duyarlı tablolarda, girdi gruplarında ve benzerlerinde yaygındır.

const popover = new bootstrap.Popover('.example-popover', {
  container: 'body'
})

Açık bir özel ayarlamak isteyeceğiniz başka bir durum , containerpopover'ın kendisinin kipine eklendiğinden emin olmak için kalıcı bir iletişim kutusundaki açılır pencerelerdir. Bu, özellikle etkileşimli öğeler içeren açılır pencereler için önemlidir - kalıcı iletişim kutuları odağı yakalar, bu nedenle açılır pencere modun bir alt öğesi olmadıkça, kullanıcılar bu etkileşimli öğelere odaklanamaz veya etkinleştiremez.

const popover = new bootstrap.Popover('.example-popover', {
  container: '.modal-body'
})

Özel açılır pencereler

v5.2.0'da eklendi

CSS değişkenlerini kullanarak açılır pencerelerin görünümünü özelleştirebilirsiniz . data-bs-custom-class="custom-popover"Özel görünümümüzü kapsamak ve bazı yerel CSS değişkenlerini geçersiz kılmak için kullanmak için özel bir sınıf belirledik .

.custom-popover {
  --bs-popover-max-width: 200px;
  --bs-popover-border-color: var(--bs-primary);
  --bs-popover-header-bg: var(--bs-primary);
  --bs-popover-header-color: var(--bs-white);
  --bs-popover-body-padding-x: 1rem;
  --bs-popover-body-padding-y: .5rem;
}
html
<button type="button" class="btn btn-secondary"
        data-bs-toggle="popover" data-bs-placement="right"
        data-bs-custom-class="custom-popover"
        data-bs-title="Custom popover"
        data-bs-content="This popover is themed via CSS variables.">
  Custom popover
</button>

Sonraki tıklamada kapat

focusKullanıcının geçiş öğesinden farklı bir öğeyi bir sonraki tıklamasında açılır pencereleri kapatmak için tetikleyiciyi kullanın .

Bir sonraki tıklamada kapatma için özel işaretleme gerekli

Uygun çapraz tarayıcı ve platformlar arası davranış için etiketi değil etiketi kullanmanız ve <a>ayrıca bir<button> öznitelik eklemeniz gerekir tabindex.

html
<a tabindex="0" class="btn btn-lg btn-danger" role="button" data-bs-toggle="popover" data-bs-trigger="focus" data-bs-title="Dismissible popover" data-bs-content="And here's some amazing content. It's very engaging. Right?">Dismissible popover</a>
const popover = new bootstrap.Popover('.popover-dismiss', {
  trigger: 'focus'
})

Devre dışı bırakılmış öğeler

Özniteliğe sahip öğeler disabledetkileşimli değildir, yani kullanıcılar bir açılır pencereyi (veya araç ipucunu) tetiklemek için üzerine gelemez veya tıklayamaz. Geçici bir çözüm olarak, açılır pencereyi bir sarmalayıcıdan tetiklemek isteyeceksiniz <div>veya <span>, ideal olarak tabindex="0".

Devre dışı bırakılmış popover tetikleyicileri için, popover'ın, devre dışı bırakılmış bir öğeye tıklamayıdata-bs-trigger="hover focus" beklemeyebilecekleri için kullanıcılarınıza anında görsel geri bildirim olarak görünmesini de tercih edebilirsiniz .

html
<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>

CSS

Değişkenler

v5.2.0'da eklendi

Bootstrap'in gelişen CSS değişkenleri yaklaşımının bir parçası olarak, popover'lar artık .popovergelişmiş gerçek zamanlı özelleştirme için yerel CSS değişkenlerini kullanıyor. CSS değişkenlerinin değerleri Sass aracılığıyla ayarlanır, bu nedenle Sass özelleştirmesi de desteklenmeye devam eder.

  --#{$prefix}popover-zindex: #{$zindex-popover};
  --#{$prefix}popover-max-width: #{$popover-max-width};
  @include rfs($popover-font-size, --#{$prefix}popover-font-size);
  --#{$prefix}popover-bg: #{$popover-bg};
  --#{$prefix}popover-border-width: #{$popover-border-width};
  --#{$prefix}popover-border-color: #{$popover-border-color};
  --#{$prefix}popover-border-radius: #{$popover-border-radius};
  --#{$prefix}popover-inner-border-radius: #{$popover-inner-border-radius};
  --#{$prefix}popover-box-shadow: #{$popover-box-shadow};
  --#{$prefix}popover-header-padding-x: #{$popover-header-padding-x};
  --#{$prefix}popover-header-padding-y: #{$popover-header-padding-y};
  @include rfs($popover-header-font-size, --#{$prefix}popover-header-font-size);
  --#{$prefix}popover-header-color: #{$popover-header-color};
  --#{$prefix}popover-header-bg: #{$popover-header-bg};
  --#{$prefix}popover-body-padding-x: #{$popover-body-padding-x};
  --#{$prefix}popover-body-padding-y: #{$popover-body-padding-y};
  --#{$prefix}popover-body-color: #{$popover-body-color};
  --#{$prefix}popover-arrow-width: #{$popover-arrow-width};
  --#{$prefix}popover-arrow-height: #{$popover-arrow-height};
  --#{$prefix}popover-arrow-border: var(--#{$prefix}popover-border-color);
  

Sas değişkenleri

$popover-font-size:                 $font-size-sm;
$popover-bg:                        $white;
$popover-max-width:                 276px;
$popover-border-width:              $border-width;
$popover-border-color:              var(--#{$prefix}border-color-translucent);
$popover-border-radius:             $border-radius-lg;
$popover-inner-border-radius:       subtract($popover-border-radius, $popover-border-width);
$popover-box-shadow:                $box-shadow;

$popover-header-font-size:          $font-size-base;
$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;

kullanım

JavaScript aracılığıyla açılır pencereleri etkinleştirin:

const exampleEl = document.getElementById('example')
const popover = new bootstrap.Popover(exampleEl, options)

Popover'ların klavye ve yardımcı teknoloji kullanıcıları için çalışmasını sağlama

Klavye kullanıcılarının açılır pencerelerinizi etkinleştirmesine izin vermek için, bunları yalnızca geleneksel olarak klavye odaklı ve etkileşimli (bağlantılar veya form denetimleri gibi) HTML öğelerine eklemelisiniz. <span>Nitelik eklenerek isteğe bağlı HTML öğeleri (s gibi ) odaklanabilir hale getirilebilse de tabindex="0", bu, klavye kullanıcıları için etkileşimli olmayan öğeler üzerinde potansiyel olarak can sıkıcı ve kafa karıştırıcı sekme durakları ekleyecektir ve çoğu yardımcı teknoloji şu anda bu durumda açılır pencerenin içeriğini duyurmamaktadır. . Ek olarak, popover'larınız için yalnızca tetikleyici olarak güvenmeyin hover, çünkü bu, klavye kullanıcıları için tetiklenmelerini imkansız hale getirecektir.

Seçeneği olan açılır pencerelere zengin, yapılandırılmış HTML ekleyebiliyor olsanız da, htmlaşırı miktarda içerik eklemekten kaçınmanızı şiddetle tavsiye ederiz. Popover'ların şu anda çalışma şekli, bir kez görüntülendiğinde içeriğinin aria-describedbyöznitelikle tetikleyici öğeye bağlanmasıdır. Sonuç olarak, popover'ın içeriğinin tamamı, yardımcı teknoloji kullanıcılarına uzun, kesintisiz bir akış olarak duyurulacak.

Ek olarak, açılır pencerenize etkileşimli denetimler (form öğeleri veya bağlantılar gibi) dahil etmek mümkün olsa da (bu öğeleri allowListizin verilen niteliklere ve etiketlere ekleyerek), şu anda açılır pencerenin klavye odak sırasını yönetmediğini unutmayın. Bir klavye kullanıcısı bir açılır pencereyi açtığında, odak tetikleyici öğe üzerinde kalır ve açılır pencere genellikle belgenin yapısındaki tetikleyiciyi hemen takip etmediğinden, ilerlemenin/basmanın garantisi yoktur.TABbir klavye kullanıcısını popover'ın kendisine taşır. Kısacası, bir popover'a basitçe etkileşimli kontroller eklemek, klavye kullanıcıları ve yardımcı teknolojilerin kullanıcıları için bu kontrolleri erişilemez/kullanılamaz hale getirebilir veya en azından mantıksız bir genel odak düzeni oluşturabilir. Bu durumlarda, bunun yerine kalıcı bir iletişim kutusu kullanmayı düşünün.

Seçenekler

Seçenekler veri öznitelikleri veya JavaScript aracılığıyla iletilebildiğinden data-bs-, örneğinde olduğu gibi öğesine bir seçenek adı ekleyebilirsiniz data-bs-animation="{value}". Seçenekleri veri öznitelikleri üzerinden geçirirken , seçenek adının “ camelCase ” yerine “ kebab-case ” olarak değiştirildiğinden emin olun. Örneğin, data-bs-custom-class="beautifier"yerine kullanın data-bs-customClass="beautifier".

Bootstrap 5.2.0'dan itibaren, tüm bileşenler , bir JSON dizesi olarak basit bileşen yapılandırmasını barındırabilen deneysel bir ayrılmış veri özniteliğini destekler. data-bs-configBir öğe data-bs-config='{"delay":0, "title":123}'ve data-bs-title="456"özniteliklere sahip olduğunda, nihai titledeğer olacak 456ve ayrı veri öznitelikleri üzerinde verilen değerleri geçersiz kılacaktır data-bs-config. Ek olarak, mevcut veri öznitelikleri, gibi JSON değerlerini barındırabilir data-bs-delay='{"show":0,"hide":150}'.

Güvenlik nedenleriyle sanitize, sanitizeFn, ve allowListseçeneklerinin veri öznitelikleri kullanılarak sağlanamayacağını unutmayın.
İsim Tip Varsayılan Tanım
allowList nesne Varsayılan değer İzin verilen öznitelikleri ve etiketleri içeren nesne.
animation boole true Popover'a bir CSS solma geçişi uygulayın.
boundary dizi, eleman 'clippingParents' Popover'ın taşma kısıtlaması sınırı (yalnızca Popper'ın önlemeOverflow değiştiricisi için geçerlidir). Varsayılan olarak, 'clippingParents'bir HTMLElement referansıdır ve kabul edebilir (yalnızca JavaScript aracılığıyla). Daha fazla bilgi için Popper'ınDetectOverflow belgelerine bakın .
container dize, öğe, yanlış false Popover'ı belirli bir öğeye ekler. Örnek: container: 'body'. Bu seçenek özellikle, açılır pencereyi belge akışında tetikleyici öğenin yanına yerleştirmenize izin verdiği için yararlıdır - bu, pencerenin yeniden boyutlandırılması sırasında açılır pencerenin tetikleyici öğeden uzaklaşmasını önleyecektir.
content dizi, eleman, fonksiyon '' data-bs-contentÖznitelik yoksa varsayılan içerik değeri . Bir fonksiyon verilirse, thispopover'ın eklendiği öğeye referansı ile çağrılır.
customClass dize, işlev '' Gösterildiğinde popover'a sınıflar ekleyin. Bu sınıfların, şablonda belirtilen sınıflara ek olarak ekleneceğini unutmayın. Birden çok sınıf eklemek için bunları boşluklarla ayırın: 'class-1 class-2'. Ek sınıf adları içeren tek bir dize döndürmesi gereken bir işlevi de iletebilirsiniz.
delay sayı, nesne 0 Açılır pencereyi (ms) gösterme ve gizleme gecikmesi—manuel tetik türü için geçerli değildir. Bir numara verilirse, her iki gizle/göster için gecikme uygulanır. Nesne yapısı: delay: { "show": 500, "hide": 100 }.
fallbackPlacements dizi, dizi ['top', 'right', 'bottom', 'left'] Dizideki yerleşimlerin bir listesini sağlayarak (tercih sırasına göre) yedek yerleşimleri tanımlayın. Daha fazla bilgi için Popper'ın davranış belgelerine bakın .
html boole false Popover'da HTML'ye izin ver. Doğruysa, açılır penceredeki HTML etiketleri açılır pencerede titleişlenir. Yanlışsa innerText, DOM'a içerik eklemek için özellik kullanılacaktır. XSS saldırılarından endişe ediyorsanız metin kullanın.
offset sayı, dizi, işlev [0, 0] Popover'ın hedefine göre ofseti. Aşağıdaki gibi virgülle ayrılmış değerlerle veri özniteliklerinde bir dize iletebilirsiniz: data-bs-offset="10,20". Ofseti belirlemek için bir fonksiyon kullanıldığında, ilk argümanı olarak popper yerleşimini, referansı ve popper rect'lerini içeren bir nesne ile çağrılır. Tetikleyici öğe DOM düğümü, ikinci argüman olarak iletilir. İşlev, iki sayı içeren bir dizi döndürmelidir: kayma , mesafe . Daha fazla bilgi için Popper'ın ofset belgelerine bakın .
placement dize, işlev 'top' Popover nasıl konumlandırılır: otomatik, üst, alt, sol, sağ. autoBelirtildiğinde, popover'ı dinamik olarak yeniden yönlendirir . Yerleşimi belirlemek için bir işlev kullanıldığında, ilk argüman olarak popover DOM düğümü ve ikinci argüman olarak tetikleyici öğe DOM düğümü ile çağrılır. Bağlam this, popover örneğine ayarlanır.
popperConfig boş, nesne, işlev null Bootstrap'in varsayılan Popper yapılandırmasını değiştirmek için, Popper'ın yapılandırmasına bakın . Popper konfigürasyonunu oluşturmak için bir fonksiyon kullanıldığında, Bootstrap'in varsayılan Popper konfigürasyonunu içeren bir nesne ile çağrılır. Varsayılanı kendi yapılandırmanızla kullanmanıza ve birleştirmenize yardımcı olur. İşlev, Popper için bir yapılandırma nesnesi döndürmelidir.
sanitize boole true Temizlemeyi etkinleştirin veya devre dışı bırakın. Etkinleştirilirse 'template', 'content'seçenekler 'title'sterilize edilecektir.
sanitizeFn boş, işlev null Burada kendi sterilize etme işlevinizi sağlayabilirsiniz. Sanitasyon yapmak için özel bir kitaplık kullanmayı tercih ediyorsanız bu yararlı olabilir.
selector dize, yanlış false Bir seçici sağlanırsa, popover nesneleri belirtilen hedeflere devredilecektir. Pratikte bu, dinamik olarak eklenen DOM öğelerine ( jQuery.ondestek) açılır pencereleri uygulamak için de kullanılır. Bu soruna ve bilgilendirici bir örneğe bakın .
template sicim '<div class="popover" role="popover"><div class="popover-arrow"></div><div class="popover-inner"></div></div>' Popover oluştururken kullanılacak temel HTML. Popover'lar . title_ popover'ın oku olacak. En dıştaki sarmalayıcı öğe, ve sınıfına sahip olmalıdır ..popover-inner.popover-arrow.popoverrole="popover"
title dizi, eleman, fonksiyon '' titleÖznitelik yoksa varsayılan başlık değeri . Bir fonksiyon verilirse, thispopover'ın eklendiği öğeye referansı ile çağrılır.
trigger sicim 'hover focus' Popover nasıl tetiklenir: tıklayın, üzerine gelin, odaklanın, manuel. Birden çok tetikleyici iletebilirsiniz; boşlukla ayırın. 'manual'popover'ın .popover('show'), .popover('hide')ve .popover('toggle')yöntemleri aracılığıyla programlı olarak tetikleneceğini belirtir; bu değer başka bir tetikleyici ile birleştirilemez. 'hover'kendi başına klavye aracılığıyla tetiklenemeyen popover'lara neden olur ve yalnızca klavye kullanıcıları için aynı bilgileri iletmek için alternatif yöntemler varsa kullanılmalıdır.

Bireysel popover'lar için veri öznitelikleri

Bireysel popover'lar için seçenekler alternatif olarak yukarıda açıklandığı gibi veri öznitelikleri kullanılarak belirlenebilir.

ile işlevi kullanmapopperConfig

const popover = new bootstrap.Popover(element, {
  popperConfig(defaultBsPopperConfig) {
    // const newPopperConfig = {...}
    // use defaultBsPopperConfig if needed...
    // return newPopperConfig
  }
})

yöntemler

Asenkron yöntemler ve geçişler

Tüm API yöntemleri eşzamansızdır ve bir geçiş başlatır . Geçiş başlar başlamaz ancak bitmeden arayan kişiye geri dönerler . Ek olarak, geçiş yapan bir bileşen üzerindeki bir yöntem çağrısı yoksayılacaktır .

Daha fazla bilgi için JavaScript belgelerimize bakın .

Yöntem Tanım
disable Bir öğenin popover'ının gösterilmesi yeteneğini kaldırır. Popover yalnızca yeniden etkinleştirildiğinde gösterilebilir.
dispose Bir öğenin açılır penceresini gizler ve yok eder (DOM öğesinde depolanan verileri kaldırır). Temsilci kullanan (seçenek kullanılarak oluşturulan) popover'lar, alttan gelen selectortetikleyici öğelerde tek tek yok edilemez.
enable Bir öğenin popover'ına gösterilme yeteneği verir. Popover'lar varsayılan olarak etkindir.
getInstance Bir DOM öğesiyle ilişkili popover örneğini almanızı sağlayan statik yöntem.
getOrCreateInstance Bir DOM öğesiyle ilişkili popover örneğini almanıza veya başlatılmamış olması durumunda yeni bir tane oluşturmanıza izin veren statik yöntem.
hide Bir öğenin açılır penceresini gizler. Popover fiilen gizlenmeden (yani hidden.bs.popoverolay meydana gelmeden önce) arayana geri döner. Bu, popover'ın "manuel" tetiklenmesi olarak kabul edilir.
setContent Başlatıldıktan sonra açılır pencerenin içeriğini değiştirmenin bir yolunu verir.
show Bir öğenin popover'ını ortaya çıkarır. Popover fiilen gösterilmeden önce (yani shown.bs.popoverolay meydana gelmeden önce) arayana geri döner. Bu, popover'ın "manuel" tetiklenmesi olarak kabul edilir. Başlığı ve içeriği sıfır uzunlukta olan popover'lar hiçbir zaman görüntülenmez.
toggle Bir öğenin açılır penceresini değiştirir. Popover fiilen gösterilmeden veya gizlenmeden (yani shown.bs.popoverveya hidden.bs.popoverolayı gerçekleşmeden önce) arayana geri döner. Bu, popover'ın "manuel" tetiklenmesi olarak kabul edilir.
toggleEnabled Bir öğenin açılır penceresinin gösterilme veya gizlenme özelliğini değiştirir.
update Bir öğenin açılır penceresinin konumunu günceller.
// getOrCreateInstance example
const popover = bootstrap.Popover.getOrCreateInstance('#example') // Returns a Bootstrap popover instance

// setContent example
myPopover.setContent({
  '.popover-header': 'another title',
  '.popover-body': 'another content'
})
Yöntem , her özellik anahtarının açılır şablon içinde geçerli bir seçici olduğu setContentve ilgili her bir özellik değerinin | | | objectstringstringelementfunctionnull

Olaylar

Etkinlik Tanım
hide.bs.popover hideBu olay, örnek yöntemi çağrıldığında hemen tetiklenir .
hidden.bs.popover Bu olay, açılır pencerenin kullanıcıdan gizlenmesi bittiğinde tetiklenir (CSS geçişlerinin tamamlanmasını bekler).
inserted.bs.popover Bu olay, show.bs.popoverpopover şablonu DOM'a eklendiğinde olaydan sonra tetiklenir.
show.bs.popover Bu olay, showörnek yöntemi çağrıldığında hemen tetiklenir.
shown.bs.popover Bu olay, açılır pencere kullanıcıya görünür hale getirildiğinde tetiklenir (CSS geçişlerinin tamamlanmasını bekler).
const myPopoverTrigger = document.getElementById('myPopover')
myPopoverTrigger.addEventListener('hidden.bs.popover', () => {
  // do something...
})