เคล็ดลับเครื่องมือ
เอกสารประกอบและตัวอย่างสำหรับการเพิ่มคำแนะนำเครื่องมือ Bootstrap แบบกำหนดเองด้วย CSS และ JavaScript โดยใช้ CSS3 สำหรับภาพเคลื่อนไหวและ data-bs-attributes สำหรับการจัดเก็บชื่อในเครื่อง
ภาพรวม
สิ่งที่ควรทราบเมื่อใช้ปลั๊กอินคำแนะนำเครื่องมือ:
- คำแนะนำเครื่องมือขึ้นอยู่กับ Popperไลบรารีบุคคลที่สามสำหรับการวางตำแหน่ง คุณต้องรวมpopper.min.jsก่อน bootstrap.js หรือใช้
bootstrap.bundle.min.js
/bootstrap.bundle.js
ซึ่งมี Popper เพื่อให้คำแนะนำเครื่องมือทำงาน! - คำแนะนำเครื่องมือเป็นทางเลือกสำหรับเหตุผลด้านประสิทธิภาพ ดังนั้นคุณต้องเริ่มต้นด้วยตนเอง
- คำแนะนำเครื่องมือที่มีชื่อความยาวเป็นศูนย์จะไม่แสดงขึ้น
- ระบุ
container: 'body'
เพื่อหลีกเลี่ยงปัญหาการแสดงผลในองค์ประกอบที่ซับซ้อนมากขึ้น (เช่น กลุ่มอินพุต กลุ่มปุ่ม ฯลฯ) - คำแนะนำเครื่องมือทริกเกอร์ในองค์ประกอบที่ซ่อนอยู่จะไม่ทำงาน
- คำแนะนำเครื่องมือสำหรับ
.disabled
หรือdisabled
องค์ประกอบต้องถูกทริกเกอร์บนองค์ประกอบ wrapper - เมื่อถูกเรียกจากไฮเปอร์ลิงก์ที่มีหลายบรรทัด คำแนะนำเครื่องมือจะอยู่กึ่งกลาง ใช้
white-space: nowrap;
กับของคุณ<a>
เพื่อหลีกเลี่ยงพฤติกรรมนี้ - ต้องซ่อนคำแนะนำเครื่องมือก่อนที่จะลบองค์ประกอบที่เกี่ยวข้องออกจาก DOM
- คำแนะนำเครื่องมือสามารถทริกเกอร์ได้ด้วยองค์ประกอบภายใน Shadow DOM
prefers-reduced-motion
คิวรีสื่อ ดู
ส่วนการเคลื่อนไหวที่ลดลงของเอกสารการช่วยสำหรับการเข้าถึงของเรา
ได้ทั้งหมดที่? เยี่ยมมาก มาดูว่ามันทำงานอย่างไรพร้อมตัวอย่างบางส่วน
ตัวอย่าง: เปิดใช้งานคำแนะนำเครื่องมือทุกที่
วิธีหนึ่งในการเริ่มต้นคำแนะนำเครื่องมือทั้งหมดบนหน้าคือการเลือกตามdata-bs-toggle
แอตทริบิวต์:
var tooltipTriggerList = [].slice.call(document.querySelectorAll('[data-bs-toggle="tooltip"]'))
var tooltipList = tooltipTriggerList.map(function (tooltipTriggerEl) {
return new bootstrap.Tooltip(tooltipTriggerEl)
})
ตัวอย่าง
วางเมาส์เหนือลิงก์ด้านล่างเพื่อดูคำแนะนำเครื่องมือ:
ข้อความตัวยึดตำแหน่งเพื่อแสดงลิงก์แบบอินไลน์พร้อมคำแนะนำเครื่องมือ ตอนนี้เป็นแค่ฟิลเลอร์ ไม่ใช่นักฆ่า เนื้อหาที่วางอยู่ที่นี่เพียงเพื่อเลียนแบบการมีอยู่ของข้อความจริง และทั้งหมดนี้เพื่อให้คุณได้ทราบว่าคำแนะนำเครื่องมือจะมีลักษณะอย่างไรเมื่อใช้ในสถานการณ์จริง หวังว่าคุณคงได้เห็นแล้วว่าคำแนะนำเครื่องมือเหล่านี้ในลิงก์สามารถทำงานจริงได้อย่างไร เมื่อคุณใช้ คำแนะนำเหล่านี้ใน ไซต์หรือโครงการของคุณเอง
วางเมาส์เหนือปุ่มด้านล่างเพื่อดูคำแนะนำเครื่องมือสี่ทิศทาง: บน ขวา ล่าง และซ้าย ทิศทางจะถูกมิเรอร์เมื่อใช้ Bootstrap ใน RTL
<button type="button" class="btn btn-secondary" data-bs-toggle="tooltip" data-bs-placement="top" title="Tooltip on top">
Tooltip on top
</button>
<button type="button" class="btn btn-secondary" data-bs-toggle="tooltip" data-bs-placement="right" title="Tooltip on right">
Tooltip on right
</button>
<button type="button" class="btn btn-secondary" data-bs-toggle="tooltip" data-bs-placement="bottom" title="Tooltip on bottom">
Tooltip on bottom
</button>
<button type="button" class="btn btn-secondary" data-bs-toggle="tooltip" data-bs-placement="left" title="Tooltip on left">
Tooltip on left
</button>
และด้วยการเพิ่ม HTML ที่กำหนดเอง:
<button type="button" class="btn btn-secondary" data-bs-toggle="tooltip" data-bs-html="true" title="<em>Tooltip</em> <u>with</u> <b>HTML</b>">
Tooltip with HTML
</button>
ด้วย SVG:
ซาส
ตัวแปร
$tooltip-font-size: $font-size-sm;
$tooltip-max-width: 200px;
$tooltip-color: $white;
$tooltip-bg: $black;
$tooltip-border-radius: $border-radius;
$tooltip-opacity: .9;
$tooltip-padding-y: $spacer * .25;
$tooltip-padding-x: $spacer * .5;
$tooltip-margin: 0;
$tooltip-arrow-width: .8rem;
$tooltip-arrow-height: .4rem;
$tooltip-arrow-color: $tooltip-bg;
การใช้งาน
ปลั๊กอินคำแนะนำเครื่องมือสร้างเนื้อหาและมาร์กอัปตามต้องการ และโดยค่าเริ่มต้นจะวางคำแนะนำเครื่องมือหลังองค์ประกอบทริกเกอร์
ทริกเกอร์คำแนะนำเครื่องมือผ่าน JavaScript:
var exampleEl = document.getElementById('example')
var tooltip = new bootstrap.Tooltip(exampleEl, options)
ล้นauto
และscroll
ตำแหน่งคำแนะนำเครื่องมือพยายามเปลี่ยนโดยอัตโนมัติเมื่อคอนเทนเนอร์หลักมีoverflow: auto
หรือoverflow: scroll
เหมือนของเรา.table-responsive
แต่ยังคงตำแหน่งตำแหน่งเดิม ในการแก้ไขปัญหานี้ ให้ตั้งค่าboundary
ตัวเลือก (สำหรับตัวแก้ไขการพลิกโดยใช้popperConfig
ตัวเลือก) เป็น HTMLElement เพื่อแทนที่ค่าเริ่มต้น'clippingParents'
เช่นdocument.body
:
var exampleEl = document.getElementById('example')
var tooltip = new bootstrap.Tooltip(exampleEl, {
boundary: document.body // or document.querySelector('#boundary')
})
มาร์กอัป
มาร์กอัปที่จำเป็นสำหรับคำแนะนำเครื่องมือเป็นเพียงdata
แอตทริบิวต์และtitle
ในองค์ประกอบ HTML ที่คุณต้องการให้มีคำแนะนำเครื่องมือ มาร์กอัปของคำแนะนำเครื่องมือที่สร้างขึ้นนั้นค่อนข้างง่าย แม้ว่าจะต้องมีตำแหน่ง (โดยค่าเริ่มต้น กำหนดtop
โดยปลั๊กอิน)
การทำให้คำแนะนำเครื่องมือใช้งานได้สำหรับผู้ใช้คีย์บอร์ดและเทคโนโลยีช่วยเหลือ
คุณควรเพิ่มคำแนะนำเครื่องมือให้กับองค์ประกอบ HTML ที่เน้นคีย์บอร์ดและโต้ตอบได้ตามปกติ (เช่น ลิงก์หรือตัวควบคุมฟอร์ม) แม้ว่าองค์ประกอบ HTML ตามอำเภอใจ (เช่น<span>
s) สามารถทำให้โฟกัสได้โดยการเพิ่มtabindex="0"
แอตทริบิวต์ สิ่งนี้จะเพิ่มการหยุดแท็บที่อาจน่ารำคาญและทำให้เกิดความสับสนในองค์ประกอบที่ไม่โต้ตอบสำหรับผู้ใช้แป้นพิมพ์ และเทคโนโลยีช่วยเหลือส่วนใหญ่ในปัจจุบันยังไม่ประกาศคำแนะนำเครื่องมือในสถานการณ์นี้ นอกจากนี้ อย่าพึ่งเพียงhover
เป็นทริกเกอร์สำหรับคำแนะนำเครื่องมือของคุณ เนื่องจากจะทำให้คำแนะนำเครื่องมือของคุณไม่สามารถทริกเกอร์สำหรับผู้ใช้คีย์บอร์ดได้
<!-- HTML to write -->
<a href="#" data-bs-toggle="tooltip" title="Some tooltip text!">Hover over me</a>
<!-- Generated markup by the plugin -->
<div class="tooltip bs-tooltip-top" role="tooltip">
<div class="tooltip-arrow"></div>
<div class="tooltip-inner">
Some tooltip text!
</div>
</div>
องค์ประกอบพิการ
องค์ประกอบที่มีdisabled
แอตทริบิวต์ไม่โต้ตอบ หมายความว่าผู้ใช้ไม่สามารถโฟกัส วางเมาส์เหนือ หรือคลิกเพื่อทริกเกอร์คำแนะนำเครื่องมือ (หรือป๊อปโอเวอร์) ในการแก้ปัญหาชั่วคราว คุณจะต้องทริกเกอร์คำแนะนำเครื่องมือจาก wrapper <div>
หรือ<span>
ทำให้แป้นพิมพ์โฟกัสได้โดยใช้tabindex="0"
.
<span class="d-inline-block" tabindex="0" data-bs-toggle="tooltip" title="Disabled tooltip">
<button class="btn btn-primary" type="button" disabled>Disabled button</button>
</span>
ตัวเลือก
ตัวเลือกสามารถส่งผ่านแอตทริบิวต์ข้อมูลหรือ JavaScript สำหรับแอ็ตทริบิวต์ data ให้ผนวกชื่ออ็อพชันต่อท้ายdata-bs-
เช่นเดียวกับในdata-bs-animation=""
. อย่าลืมเปลี่ยนประเภทเคสของชื่อตัวเลือกจาก camelCase เป็น kebab-case เมื่อส่งตัวเลือกผ่านแอตทริบิวต์ข้อมูล ตัวอย่างเช่น แทนที่จะใช้data-bs-customClass="beautifier"
ให้ใช้data-bs-custom-class="beautifier"
.
sanitize
,
sanitizeFn
, และ
allowList
ไม่สามารถระบุได้โดยใช้แอตทริบิวต์ข้อมูล
ชื่อ | พิมพ์ | ค่าเริ่มต้น | คำอธิบาย |
---|---|---|---|
animation |
บูลีน | true |
ใช้ CSS Fade Transition กับคำแนะนำเครื่องมือ |
container |
สตริง | องค์ประกอบ | เท็จ | false |
เพิ่มคำแนะนำเครื่องมือต่อท้ายองค์ประกอบเฉพาะ ตัวอย่าง: |
delay |
หมายเลข | วัตถุ | 0 |
ความล่าช้าในการแสดงและซ่อนคำแนะนำเครื่องมือ (ms) - ใช้ไม่ได้กับประเภททริกเกอร์ด้วยตนเอง หากมีการระบุตัวเลข การหน่วงเวลาจะใช้กับทั้งซ่อน/แสดง โครงสร้างวัตถุคือ: |
html |
บูลีน | false |
อนุญาต HTML ในคำแนะนำเครื่องมือ หากเป็นจริง แท็ก HTML ในคำแนะนำเครื่องมือ ใช้ข้อความหากคุณกังวลเกี่ยวกับการโจมตี XSS |
placement |
สตริง | การทำงาน | 'top' |
วิธีวางตำแหน่งคำแนะนำเครื่องมือ - auto | ด้านบน | ด้านล่าง | ซ้าย | ขวา. เมื่อใช้ฟังก์ชันเพื่อกำหนดตำแหน่ง ฟังก์ชันนี้จะถูกเรียกโดยมีโหนด DOM ของคำแนะนำเครื่องมือเป็นอาร์กิวเมนต์แรก และโหนด DOM ที่ทริกเกอร์องค์ประกอบเป็นโหนดที่สอง |
selector |
สตริง | เท็จ | false |
หากมีตัวเลือก อ็อบเจ็กต์คำแนะนำเครื่องมือจะถูกส่งไปยังเป้าหมายที่ระบุ ในทางปฏิบัติ จะใช้เพื่อใช้คำแนะนำเครื่องมือกับองค์ประกอบ DOM ที่เพิ่มแบบไดนามิก ( jQuery.on การสนับสนุน) ดูสิ่งนี้และตัวอย่างข้อมูล |
template |
สตริง | '<div class="tooltip" role="tooltip"><div class="tooltip-arrow"></div><div class="tooltip-inner"></div></div>' |
HTML พื้นฐานที่จะใช้เมื่อสร้างคำแนะนำเครื่องมือ คำแนะนำเครื่องมือ
องค์ประกอบ wrapper นอกสุดควรมี |
title |
สตริง | องค์ประกอบ | การทำงาน | '' |
ค่าเริ่มต้นของชื่อหากไม่มี หากมีการกำหนดฟังก์ชัน ฟังก์ชันนั้นจะถูกเรียกโดย |
trigger |
สตริง | 'hover focus' |
วิธีการเรียกคำแนะนำเครื่องมือ - คลิก | โฉบ | โฟกัส | คู่มือ. คุณอาจส่งทริกเกอร์หลายตัว แยกพวกเขาด้วยช่องว่าง
|
fallbackPlacements |
อาร์เรย์ | ['top', 'right', 'bottom', 'left'] |
กำหนดตำแหน่งสำรองโดยระบุรายการตำแหน่งในอาร์เรย์ (ตามลำดับความชอบ) สำหรับข้อมูลเพิ่มเติม โปรดดู เอกสารพฤติกรรมของ Popper |
boundary |
สตริง | ธาตุ | 'clippingParents' |
ขอบเขตข้อจำกัดโอเวอร์โฟลว์ของคำแนะนำเครื่องมือ (ใช้เฉพาะกับตัวแก้ไขป้องกัน Overflow ของ Popper) โดยค่าเริ่มต้น จะเป็น'clippingParents' และสามารถยอมรับการอ้างอิง HTMLElement (ผ่าน JavaScript เท่านั้น) สำหรับข้อมูลเพิ่มเติม โปรดดูที่เอกสาร detectOverflowของ Popper |
customClass |
สตริง | การทำงาน | '' |
เพิ่มคลาสให้กับคำแนะนำเครื่องมือเมื่อแสดง โปรดทราบว่าคลาสเหล่านี้จะถูกเพิ่มนอกเหนือจากคลาสที่ระบุในเทมเพลต หากต้องการเพิ่มหลายคลาส ให้คั่นด้วยช่องว่าง: คุณยังสามารถส่งฟังก์ชันที่ควรส่งคืนสตริงเดียวที่มีชื่อคลาสเพิ่มเติม |
sanitize |
บูลีน | true |
เปิดหรือปิดการฆ่าเชื้อ หากเปิดใช้งาน'template' และ'title' ตัวเลือกต่างๆ จะถูกฆ่าเชื้อ ดูส่วนการฆ่าเชื้อในเอกสาร JavaScript ของเรา |
allowList |
วัตถุ | ค่าเริ่มต้น | ออบเจ็กต์ที่มีแอตทริบิวต์และแท็กที่อนุญาต |
sanitizeFn |
null | การทำงาน | null |
ที่นี่คุณสามารถจัดหาฟังก์ชันฆ่าเชื้อของคุณเองได้ สิ่งนี้มีประโยชน์หากคุณต้องการใช้ห้องสมุดเฉพาะเพื่อทำการฆ่าเชื้อ |
offset |
อาร์เรย์ | สตริง | การทำงาน | [0, 0] |
ออฟเซ็ตของคำแนะนำเครื่องมือที่สัมพันธ์กับเป้าหมาย คุณสามารถส่งสตริงในแอตทริบิวต์ข้อมูลด้วยค่าที่คั่นด้วยเครื่องหมายจุลภาค เช่น: เมื่อใช้ฟังก์ชันเพื่อกำหนดออฟเซ็ต ฟังก์ชันจะถูกเรียกด้วยออบเจ็กต์ที่มีการจัดวางแบบป๊อปเปอร์ การอ้างอิง และการแก้ไขแบบป๊อปอัปเป็นอาร์กิวเมนต์แรก องค์ประกอบทริกเกอร์โหนด DOM ถูกส่งผ่านเป็นอาร์กิวเมนต์ที่สอง ฟังก์ชันต้องส่งคืนอาร์เรย์ที่มีตัวเลขสองตัว: |
popperConfig |
null | วัตถุ | การทำงาน | null |
หากต้องการเปลี่ยนการกำหนดค่า Popper เริ่มต้นของ Bootstrap โปรดดู การกำหนดค่า ของPopper เมื่อใช้ฟังก์ชันเพื่อสร้างการกำหนดค่า Popper ฟังก์ชันนี้จะถูกเรียกใช้ด้วยอ็อบเจ็กต์ที่มีการกำหนดค่า Popper เริ่มต้นของ Bootstrap ช่วยให้คุณใช้และรวมค่าเริ่มต้นเข้ากับการกำหนดค่าของคุณเอง ฟังก์ชันต้องส่งคืนอ็อบเจ็กต์การกำหนดค่าสำหรับ Popper |
แอตทริบิวต์ข้อมูลสำหรับคำแนะนำเครื่องมือแต่ละรายการ
ตัวเลือกสำหรับคำแนะนำเครื่องมือแต่ละรายการสามารถระบุได้โดยใช้แอตทริบิวต์ข้อมูล ตามที่อธิบายข้างต้น
การใช้ฟังก์ชันกับpopperConfig
var tooltip = new bootstrap.Tooltip(element, {
popperConfig: function (defaultBsPopperConfig) {
// var newPopperConfig = {...}
// use defaultBsPopperConfig if needed...
// return newPopperConfig
}
})
วิธีการ
วิธีการและการเปลี่ยนแบบอะซิงโครนัส
เมธอด API ทั้งหมดเป็นแบบอะซิงโครนัสและเริ่มต้นการเปลี่ยนแปลง พวกเขาจะกลับไปที่ผู้โทรทันทีที่เริ่มเปลี่ยน แต่ ก่อน ที่จะสิ้นสุด นอกจากนี้ การเรียกเมธอดบนคอมโพเนนต์การเปลี่ยนจะถูกละเว้น
แสดง
แสดงคำแนะนำเครื่องมือขององค์ประกอบ กลับไปยังผู้เรียกก่อนที่จะแสดงคำแนะนำเครื่องมือจริง (กล่าวคือ ก่อนที่shown.bs.tooltip
เหตุการณ์จะเกิดขึ้น) นี่ถือเป็นการเรียกใช้ "คู่มือ" ของคำแนะนำเครื่องมือ คำแนะนำเครื่องมือที่มีชื่อความยาวเป็นศูนย์จะไม่แสดงขึ้น
tooltip.show()
ซ่อน
ซ่อนคำแนะนำเครื่องมือขององค์ประกอบ กลับไปยังผู้เรียกก่อนที่คำแนะนำเครื่องมือจะถูกซ่อนจริง ๆ (กล่าวคือ ก่อนที่hidden.bs.tooltip
เหตุการณ์จะเกิดขึ้น) นี่ถือเป็นการเรียกใช้ "คู่มือ" ของคำแนะนำเครื่องมือ
tooltip.hide()
สลับ
สลับคำแนะนำเครื่องมือขององค์ประกอบ กลับไปยังผู้เรียกก่อนที่จะแสดงหรือซ่อนคำแนะนำเครื่องมือจริง (เช่น ก่อนที่ เหตุการณ์ shown.bs.tooltip
หรือhidden.bs.tooltip
เหตุการณ์จะเกิดขึ้น) นี่ถือเป็นการเรียกใช้ "คู่มือ" ของคำแนะนำเครื่องมือ
tooltip.toggle()
ทิ้ง
ซ่อนและทำลายคำแนะนำเครื่องมือขององค์ประกอบ (ลบข้อมูลที่เก็บไว้ในองค์ประกอบ DOM) คำแนะนำเครื่องมือที่ใช้การมอบหมาย (ซึ่งสร้างขึ้นโดยใช้ตัวselector
เลือก ) ไม่สามารถทำลายทีละรายการในองค์ประกอบทริกเกอร์ที่สืบทอดได้
tooltip.dispose()
เปิดใช้งาน
ให้ความสามารถในการแสดงคำแนะนำเครื่องมือขององค์ประกอบ คำแนะนำเครื่องมือเปิดใช้งานโดยค่าเริ่มต้น
tooltip.enable()
ปิดการใช้งาน
ลบความสามารถในการแสดงคำแนะนำเครื่องมือขององค์ประกอบ คำแนะนำเครื่องมือจะแสดงได้ก็ต่อเมื่อเปิดใช้งานอีกครั้ง
tooltip.disable()
สลับเปิดใช้งาน
สลับความสามารถในการแสดงหรือซ่อนคำแนะนำเครื่องมือขององค์ประกอบ
tooltip.toggleEnabled()
อัปเดต
อัปเดตตำแหน่งของคำแนะนำเครื่องมือขององค์ประกอบ
tooltip.update()
รับอินสแตนซ์
วิธีการ แบบคงที่ซึ่งช่วยให้คุณได้รับอินสแตนซ์คำแนะนำเครื่องมือที่เชื่อมโยงกับองค์ประกอบ DOM
var exampleTriggerEl = document.getElementById('example')
var tooltip = bootstrap.Tooltip.getInstance(exampleTriggerEl) // Returns a Bootstrap tooltip instance
getOrCreateInstance
วิธีการ แบบคงที่ซึ่งช่วยให้คุณได้รับอินสแตนซ์คำแนะนำเครื่องมือที่เชื่อมโยงกับองค์ประกอบ DOM หรือสร้างใหม่ในกรณีที่ไม่ได้เริ่มต้น
var exampleTriggerEl = document.getElementById('example')
var tooltip = bootstrap.Tooltip.getOrCreateInstance(exampleTriggerEl) // Returns a Bootstrap tooltip instance
เหตุการณ์
ประเภทงาน | คำอธิบาย |
---|---|
show.bs.tooltip |
เหตุการณ์นี้จะเริ่มทำงานทันทีเมื่อมีshow การเรียกเมธอดของอินสแตนซ์ |
shown.bs.tooltip |
เหตุการณ์นี้เริ่มทำงานเมื่อผู้ใช้มองเห็นคำแนะนำเครื่องมือ (จะรอให้การเปลี่ยน CSS เสร็จสมบูรณ์) |
hide.bs.tooltip |
เหตุการณ์นี้เริ่มทำงานทันทีเมื่อhide มีการเรียกเมธอดของอินสแตนซ์ |
hidden.bs.tooltip |
เหตุการณ์นี้เริ่มทำงานเมื่อคำแนะนำเครื่องมือถูกซ่อนจากผู้ใช้เสร็จสิ้น (จะรอให้การเปลี่ยน CSS เสร็จสมบูรณ์) |
inserted.bs.tooltip |
เหตุการณ์นี้เริ่มทำงานหลังจากshow.bs.tooltip เหตุการณ์เมื่อมีการเพิ่มเทมเพลตคำแนะนำเครื่องมือใน DOM |
var myTooltipEl = document.getElementById('myTooltip')
var tooltip = new bootstrap.Tooltip(myTooltipEl)
myTooltipEl.addEventListener('hidden.bs.tooltip', function () {
// do something...
})
tooltip.hide()