匯入個別指令
您可以透過下列命名匯出至您的專案匯入個別指令
指令 | 命名匯出 | 匯入路徑 |
---|---|---|
v-b-visible | VBVisible | bootstrap-vue |
範例
import { VBVisible } from 'bootstrap-vue' // Note: Vue automatically prefixes the directive name with 'v-' Vue.directive('b-visible', VBVisible)
v-b-visible
是個簡易的指令,可讓您在元件於視窗中可見(或離開視窗/不再可見)時,採取因應措施。
自 v2.1.0
起在 BootstrapVue 中提供
v-b-visible
會呼叫您的回呼函式,並傳入一個布林值,用以表示該元件是否可見(與視窗相交)或不可見。display: none
),只要該元件在(或部分於)視窗或選用偏移量內即可。請注意:無法偵測因 v-if="false"
而轉變為不可見狀態。<b-img-lazy>
。v-b-visible
指令,瀏覽器必須支援 IntersectionObserver
。對於不支援 IntersectionObserver
的舊版瀏覽器,您將需要使用 polyfill。IntersectionObserver
支援,則 v-b-visible
會假設該元件永遠可見,並在引數設定為 true
時呼叫回呼函式一次。<div v-b-visible.[mod1].[mod2]="callback">content</div>
這裡 callback
是必需的
true
表示元件在視窗中相交(部分或全部可見),false
則表示元件不可見/未與視窗相交。每當元件能見度變化時其中 [mod1]
或 [mod2]
可以為(全部可選)
0
。once
。在加上此修飾子時,回呼只會在首次可見元素時呼叫一次(以 true
的引數指出元素相交/可見)。請注意,回呼可能會在此之前呼叫一次,傳入的 false
引數表示元素不相交/不可見。修飾子的順序無關緊要。
在所有使用情況下,回呼函數都是必需的。
<template>
<div v-b-visible="visibleHandler"> ... </div>
</template>
<script>
export default {
methods: {
visibleHandler(isVisible) {
if (isVisible) {
// Do something
} else {
// Do something else
}
}
}
}
</script>
在此範例中,修飾子值代表 350 像素(如果元素至少超出實際視窗 350 像素,它將被視為「可見」)
<template>
<div v-b-visible.350="visibleHandler"> ... </div>
</template>
<script>
export default {
methods: {
visibleHandler(isVisible) {
if (isVisible) {
// Do something
} else {
// Do something else
}
}
}
}
</script>
once
修飾子<template>
<div v-b-visible.once="visibleHandler"> ... </div>
</template>
<script>
export default {
methods: {
visibleHandler(isVisible) {
if (isVisible) {
// This will only ever happen once, when the
// element has become visible for the first time
} else {
// This may happen zero or more times before
// the element becomes visible, but will never
// happen after the element has become visible
}
}
}
}
</script>
once
和抵銷修飾子<template>
<div v-b-visible.once.350="visibleHandler"> ... </div>
</template>
<script>
export default {
methods: {
visibleHandler(isVisible) {
if (isVisible) {
// This will only ever happen once, when the
// element is outside of the physical viewport
// by at least 350px for the first time
} else {
// This may happen zero or more times before
// the element becomes visible, but will never
// happen after the element has become visible
}
}
}
}
</script>
以下是兩個顯示常見使用案例的動態範例。
捲動容器以查看 <b-badge>
捲動到可見狀態時的反應。請注意,如果元素捲動至視窗外,可見性狀態也會改變。
<template>
<div>
<div
:class="[isVisible ? 'bg-info' : 'bg-light', 'border', 'p-2', 'text-center']"
style="height: 85px; overflow-y: scroll;"
>
<p>{{ text }}</p>
<b-badge v-b-visible="handleVisibility">Element with v-b-visible directive</b-badge>
<p>{{ text }}</p>
</div>
<p class="mt-2">
Visible: {{ isVisible }}
</p>
</div>
</template>
<script>
export default {
data() {
return {
isVisible: false,
text: `
Quis magna Lorem anim amet ipsum do mollit sit cillum voluptate ex nulla
tempor. Laborum consequat non elit enim exercitation cillum aliqua
consequat id aliqua. Esse ex consectetur mollit voluptate est in duis
laboris ad sit ipsum anim Lorem. Incididunt veniam velit elit elit veniam
Lorem aliqua quis ullamco deserunt sit enim elit aliqua esse irure. Laborum
nisi sit est tempor laborum mollit labore officia laborum excepteur commodo
non commodo dolor excepteur commodo. Ipsum fugiat ex est consectetur ipsum
commodo tempor sunt in proident. Non elixir food exorcism nacho tequila tasty.
`
}
},
methods: {
handleVisibility(isVisible) {
this.isVisible = isVisible
}
}
}
</script>
<!-- v-b-visible-scroll.vue -->
其中一個使用案例是將其與 once
修飾子結合,以查看使用者是否已捲動到頁面或可捲動 div(例如,已「讀取」服務條款全文)的最底部。
按鈕以變更 <div>
的可見性狀態。請注意,如果元素捲動至視窗外,可見性狀態也會改變。
<template>
<div>
<b-button @click="show = !show" class="mb-2">Toggle display</b-button>
<p>Visible: {{ isVisible }}</p>
<div class="border p-3" style="height: 6em;">
<!-- We use Vue's `v-show` directive to control the CSS `display` of the div -->
<div v-show="show" class="bg-info p-3">
<b-badge v-b-visible="handleVisibility">Element with v-b-visible directive</b-badge>
</div>
</div>
</div>
</template>
<script>
export default {
data() {
return {
show: true,
isVisible: false
}
},
methods: {
handleVisibility(isVisible) {
this.isVisible = isVisible
}
}
}
</script>
<!-- v-b-visible-display.vue -->
如需 IntersectionObserver
的詳細資料,請參閱 MDN 文件
您可以透過下列命名匯出至您的專案匯入個別指令
指令 | 命名匯出 | 匯入路徑 |
---|---|---|
v-b-visible | VBVisible | bootstrap-vue |
範例
import { VBVisible } from 'bootstrap-vue' // Note: Vue automatically prefixes the directive name with 'v-' Vue.directive('b-visible', VBVisible)
此外掛程式包含上述所有列出的個別指令。
命名匯出 | 匯入路徑 |
---|---|
VBVisiblePlugin | bootstrap-vue |
範例
import { VBVisiblePlugin } from 'bootstrap-vue' Vue.use(VBVisiblePlugin)