Bootstrap 5 Popover

-

Popover يشبه tooltips الى حد كبير، ويمكن تعريفه على انه مربع منبثق pop-up يظهر عندما ينقر المستخدم على element. الفرق بينهم هو أن popover يمكن أن يحتوي على محتوى أكثر بكثير.

ملاحظة: تمام مثل tooltips يحتاج Popover الى اكواد Javascript حتى يشتغل. 

تمام نطبق مثال حتى نفهم الموضوع: 

<!DOCTYPE html>
<html lang="en">
<head>
    <title>Bootstrap Example</title>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <link href="https://cdn.jsdelivr.net/npm/[email protected]/dist/css/bootstrap.min.css" rel="stylesheet">
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
    <script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.1.3/js/bootstrap.min.js"></script>
    <script src="https://cdn.jsdelivr.net/npm/[email protected]/dist/js/bootstrap.bundle.min.js"></script>
</head>
<body style="height:1500px">
    <div class="container mt-3">
        <h3>Popover Example</h3>
        <button type="button" class="btn btn-warning" data-bs-toggle="popover" title="Popover Header" data-bs-content="Welcome, DevKum Team, popover sample ">
            Click to toggle popover
        </button>
    </div>
    <script>
        var popoverTriggerList = [].slice.call(document.querySelectorAll([data-bs-toggle="popover"]))
        var popoverList = popoverTriggerList.map(function (popoverTriggerEl) {
            return new bootstrap.Popover(popoverTriggerEl)
        })
    </script>
</body>
</html>

النتيجة بتكون:

نفهم شو عملنا. 

لإنشاء popover ، بنحتاج اضافة أضف attribute التالية إلى element:

data-bs-toggle = "popover"

بنستخدم title attribute لتحديد header text ل popover وفي مثالنا السابق اضفنا "title="Popover Header، وتستخدم data-bs-content attribute لتحديد النص الذي يجب عرضه داخل popover@@#s.

الكود: 

 <button type="button" class="btn btn-warning" data-bs-toggle="popover" title="Popover Header" data-bs-content="Welcome, DevKum Team, popover sample ">
            Click to toggle popover
</button>

واكيد كود Javascript اجباري 

الكود: 

 <script>
        var popoverTriggerList = [].slice.call(document.querySelectorAll(@@#[data-bs-toggle="popover"]@@#))
        var popoverList = popoverTriggerList.map(function (popoverTriggerEl) {
            return new bootstrap.Popover(popoverTriggerEl)
        })
    </script>

تماما مثل tooltip يمكن التحكم بمكان popover 

تحديد المواقع PopoversPositioning Popovers

للتحكم بمكان popover بنستخدم attribute المسمى data-bs-placement. وبنطبق عليه المكان المطلوب. ويوجد 4 اماكن يمكن عرضها وهي : 

top, bottom, left or the right

تمام نطبق المثال لفهم المضوع: 

<!DOCTYPE html>
<html lang="en">
<head>
    <title>Bootstrap Example</title>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <link href="https://cdn.jsdelivr.net/npm/[email protected]/dist/css/bootstrap.min.css" rel="stylesheet">
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
    <script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.1.3/js/bootstrap.min.js"></script>
    <script src="https://cdn.jsdelivr.net/npm/[email protected]/dist/js/bootstrap.bundle.min.js"></script>
</head>
<body style="height:1500px">
    <div class="container mt-3">
        <h3>Popover Example</h3>
        <button type="button" class="btn btn-warning" data-bs-toggle="popover" title="Popover Header" data-bs-content="Welcome, DevKum Team, popover sample ">
            Click to toggle popover
        </button>
        <h3>Four directions with a tag</h3>
        <a href="#" title="Header" data-bs-toggle="popover" data-bs-placement="top" data-content="Content">Top</a>
        <a href="#" title="Header" data-bs-toggle="popover" data-bs-placement="bottom" data-content="Content">Bottom</a>
        <a href="#" title="Header" data-bs-toggle="popover" data-bs-placement="left" data-content="Content">Left</a>
        <a href="#" title="Header" data-bs-toggle="popover" data-bs-placement="right" data-content="Content">Right</a>
        <h3>Four directions with button </h3>
        <button type="button" class="btn btn-warning" 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-warning" 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-warning" 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-warning" data-bs-container="body" data-bs-toggle="popover" data-bs-placement="left" data-bs-content="Left popover">
            Popover on left
        </button>
    </div>
    <script>
        var popoverTriggerList = [].slice.call(document.querySelectorAll(@@#[data-bs-toggle="popover"]@@#))
        var popoverList = popoverTriggerList.map(function (popoverTriggerEl) {
            return new bootstrap.Popover(popoverTriggerEl)
        })
    </script>
</body>
</html>

النتيجة




ملاحظة: لا تعمل placement attributes بالشكل الذي تتوقعه إذا لم تكن هناك مساحة كافية لها. على سبيل المثال: إذا كنت تستخدم  top placement  في الجزء العلوي من الصفحة (حيث لا يوجد مكان لها) ، فسوف يعرض بدلاً من ذلك العنصر المنبثق أسفل العنصر أو على اليمين (أينما كان مكانًا مناسبًا له).

إغلاق Popovers

الوضع الافتراضي ل Popovers، يتم إغلاق Popovers عند النقر فوق العنصر مرة أخرى. ومع ذلك يمكن استخدام attribute التالية 

data-bs-trigger="focus" 

 الي بتعمل على اغلاق Popovers عند النقر في مكان ما خارج Popovers

نطبق مثال حتى نفهم الموضوع. 

<!DOCTYPE html>
<html lang="en">
<head>
    <title>Bootstrap Example</title>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <link href="https://cdn.jsdelivr.net/npm/[email protected]/dist/css/bootstrap.min.css" rel="stylesheet">
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
    <script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.1.3/js/bootstrap.min.js"></script>
    <script src="https://cdn.jsdelivr.net/npm/[email protected]/dist/js/bootstrap.bundle.min.js"></script>
</head>
<body style="height:1500px">
    <div class="container mt-3">
        <h3>Popover Example</h3>
        <button type="button" class="btn btn-warning" data-bs-trigger="focus"  data-bs-toggle="popover" title="Popover Header" data-bs-content="Welcome, DevKum Team, popover sample ">
            Click to toggle popover
        </button>
    </div>
    <script>
        var popoverTriggerList = [].slice.call(document.querySelectorAll(@@#[data-bs-toggle="popover"]@@#))
        var popoverList = popoverTriggerList.map(function (popoverTriggerEl) {
            return new bootstrap.Popover(popoverTriggerEl)
        })
    </script>
</body>
</html>

النتيجة: 

Hoverable Popover

يمكن عمل Popover بحيث تظهر عند تحريك المؤشر فوقها. ولعمل ذلك بنستخدم attribute المسمى data-bs-trigger مع تطبيق قيمة hover. 

نطبق مثال على ذلك. 

    <!DOCTYPE html>
<html lang="en">
<head>
    <title>Bootstrap Example</title>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <link href="https://cdn.jsdelivr.net/npm/[email protected]/dist/css/bootstrap.min.css" rel="stylesheet">
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
    <script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.1.3/js/bootstrap.min.js"></script>
    <script src="https://cdn.jsdelivr.net/npm/[email protected]/dist/js/bootstrap.bundle.min.js"></script>
</head>
<body style="height:1500px">
    <div class="container mt-3">
        <h3>Popover Example</h3>
        <button type="button" class="btn btn-warning" data-bs-trigger="hover" data-bs-toggle="popover" title="Popover Header" data-bs-content="Welcome, DevKum Team, popover sample ">
            Click to toggle popover
        </button>
    </div>
    <script>
        var popoverTriggerList = [].slice.call(document.querySelectorAll(@@#[data-bs-toggle="popover"]@@#))
        var popoverList = popoverTriggerList.map(function (popoverTriggerEl) {
            return new bootstrap.Popover(popoverTriggerEl)
        })
    </script>
</body>
</html>

النتيجة: