底部彈起的分享面板,用于展示各分享渠道對(duì)應(yīng)的操作按鈕,不含具體的分享邏輯。
通過以下方式來全局注冊(cè)組件,更多注冊(cè)方式請(qǐng)參考組件注冊(cè)。
import { createApp } from 'vue';
import { ShareSheet } from 'vant';
const app = createApp();
app.use(ShareSheet);
分享面板通過 ?options
? 屬性來定義分享選項(xiàng),數(shù)組的每一項(xiàng)是一個(gè)對(duì)象,對(duì)象格式見文檔下方表格。
<van-cell title="顯示分享面板" @click="showShare = true" />
<van-share-sheet
v-model:show="showShare"
title="立即分享給好友"
:options="options"
@select="onSelect"
/>
import { ref } from 'vue';
import { showToast } from 'vant';
export default {
setup() {
const showShare = ref(false);
const options = [
{ name: '微信', icon: 'wechat' },
{ name: '微博', icon: 'weibo' },
{ name: '復(fù)制鏈接', icon: 'link' },
{ name: '分享海報(bào)', icon: 'poster' },
{ name: '二維碼', icon: 'qrcode' },
];
const onSelect = (option) => {
showToast(option.name);
showShare.value = false;
};
return {
options,
onSelect,
showShare,
};
},
};
當(dāng)分享選項(xiàng)的數(shù)量較多時(shí),可以將 ?options
? 定義為數(shù)組嵌套的格式,每個(gè)子數(shù)組會(huì)作為一行選項(xiàng)展示。
<van-share-sheet
v-model:show="showShare"
title="立即分享給好友"
:options="options"
/>
import { ref } from 'vue';
export default {
setup() {
const showShare = ref(false);
const options = [
[
{ name: '微信', icon: 'wechat' },
{ name: '朋友圈', icon: 'wechat-moments' },
{ name: '微博', icon: 'weibo' },
{ name: 'QQ', icon: 'qq' },
],
[
{ name: '復(fù)制鏈接', icon: 'link' },
{ name: '分享海報(bào)', icon: 'poster' },
{ name: '二維碼', icon: 'qrcode' },
{ name: '小程序碼', icon: 'weapp-qrcode' },
],
];
return {
options,
showShare,
};
},
};
除了使用內(nèi)置的幾種圖標(biāo)外,可以直接在 ?icon
? 中傳入圖片 URL 來使用自定義的圖標(biāo)。
<van-share-sheet v-model:show="showShare" :options="options" />
import { ref } from 'vue';
export default {
setup() {
const showShare = ref(false);
const options = [
{
name: '名稱',
icon: 'https://fastly.jsdelivr.net/npm/@vant/assets/custom-icon-fire.png',
},
{
name: '名稱',
icon: 'https://fastly.jsdelivr.net/npm/@vant/assets/custom-icon-light.png',
},
{
name: '名稱',
icon: 'https://fastly.jsdelivr.net/npm/@vant/assets/custom-icon-water.png',
},
];
return {
options,
showShare,
};
},
};
通過 ?description
? 屬性可以設(shè)置標(biāo)題下方的描述文字, 在 ?options
? 內(nèi)設(shè)置 ?description
? 屬性可以添加分享選項(xiàng)描述。
<van-share-sheet
v-model:show="showShare"
:options="options"
title="立即分享給好友"
description="描述信息"
/>
import { ref } from 'vue';
export default {
setup() {
const showShare = ref(false);
const options = [
{ name: '微信', icon: 'wechat' },
{ name: '微博', icon: 'weibo' },
{ name: '復(fù)制鏈接', icon: 'link', description: '描述信息' },
{ name: '分享海報(bào)', icon: 'poster' },
{ name: '二維碼', icon: 'qrcode' },
];
return {
options,
showShare,
};
},
};
參數(shù) | 說明 | 類型 | 默認(rèn)值 |
---|---|---|---|
v-model:show | 是否顯示分享面板 | boolean | false
|
options | 分享選項(xiàng) | Option[] | []
|
title | 頂部標(biāo)題 | string | - |
cancel-text | 取消按鈕文字,傳入空字符串可以隱藏按鈕 | string | '取消'
|
description | 標(biāo)題下方的輔助描述文字 | string | - |
duration | 動(dòng)畫時(shí)長,單位秒,設(shè)置為 0 可以禁用動(dòng)畫 | number | string | 0.3
|
z-index | 將面板的 z-index 層級(jí)設(shè)置為一個(gè)固定值 | number | string | 2000+
|
round v3.2.6
|
是否顯示圓角 | boolean | true
|
overlay | 是否顯示遮罩層 | boolean | true
|
overlay-class | 自定義遮罩層類名 | string | Array | object | - |
overlay-style | 自定義遮罩層樣式 | object | - |
lock-scroll | 是否鎖定背景滾動(dòng) | boolean | true
|
lazy-render | 是否在顯示彈層時(shí)才渲染內(nèi)容 | boolean | true
|
close-on-popstate | 是否在頁面回退時(shí)自動(dòng)關(guān)閉 | boolean | true
|
close-on-click-overlay | 是否在點(diǎn)擊遮罩層后關(guān)閉 | boolean | true
|
safe-area-inset-bottom | 是否開啟底部安全區(qū)適配 | boolean | true
|
teleport | 指定掛載的節(jié)點(diǎn),等同于 Teleport 組件的 to 屬性 | string | Element | - |
before-close v3.1.4
|
關(guān)閉前的回調(diào)函數(shù),返回 false 可阻止關(guān)閉,支持返回 Promise |
(action: string) => boolean | Promise<boolean> | - |
?options
? 屬性為一個(gè)對(duì)象數(shù)組,數(shù)組中的每個(gè)對(duì)象配置一列,對(duì)象可以包含以下值:
鍵名 | 說明 | 類型 |
---|---|---|
name | 分享渠道名稱 | string |
description | 分享選項(xiàng)描述 | string |
icon | 圖標(biāo),可選值為 wechat weibo qq link qrcode poster weapp-qrcode wechat-moments ,支持傳入圖片 URL |
string |
className | 分享選項(xiàng)類名 | string |
事件名 | 說明 | 回調(diào)參數(shù) |
---|---|---|
select | 點(diǎn)擊分享選項(xiàng)時(shí)觸發(fā) | option: Option, index: number |
cancel | 點(diǎn)擊取消按鈕時(shí)觸發(fā) | - |
open | 打開面板時(shí)觸發(fā) | - |
close | 關(guān)閉面板時(shí)觸發(fā) | - |
opened | 打開面板且動(dòng)畫結(jié)束后觸發(fā) | - |
closed | 關(guān)閉面板且動(dòng)畫結(jié)束后觸發(fā) | - |
click-overlay | 點(diǎn)擊遮罩層時(shí)觸發(fā) | event: MouseEvent |
名稱 | 說明 |
---|---|
title | 自定義頂部標(biāo)題 |
description | 自定義描述文字 |
cancel v3.0.10
|
自定義取消按鈕內(nèi)容 |
組件導(dǎo)出以下類型定義:
import type {
ShareSheetProps,
ShareSheetOption,
ShareSheetOptions,
} from 'vant';
組件提供了下列 CSS 變量,可用于自定義樣式,使用方法請(qǐng)參考 ConfigProvider 組件。
名稱 | 默認(rèn)值 | 描述 |
---|---|---|
--van-share-sheet-header-padding | var(--van-padding-sm) var(--van-padding-md) var(--van-padding-base) | - |
--van-share-sheet-title-color | var(--van-text-color) | - |
--van-share-sheet-title-font-size | var(--van-font-size-md) | - |
--van-share-sheet-title-line-height | var(--van-line-height-md) | - |
--van-share-sheet-description-color | var(--van-text-color-2) | - |
--van-share-sheet-description-font-size | var(--van-font-size-sm) | - |
--van-share-sheet-description-line-height | 16px | - |
--van-share-sheet-icon-size | 48px | - |
--van-share-sheet-option-name-color | var(--van-gray-7) | - |
--van-share-sheet-option-name-font-size | var(--van-font-size-sm) | - |
--van-share-sheet-option-description-color | var(--van-text-color-3) | - |
--van-share-sheet-option-description-font-size | var(--van-font-size-sm) | - |
--van-share-sheet-cancel-button-font-size | var(--van-font-size-lg) | - |
--van-share-sheet-cancel-button-height | 48px | - |
--van-share-sheet-cancel-button-background | var(--van-background-2) | - |
在不同的 App 或?yàn)g覽器中,存在各式各樣的分享接口或分享方式,因此 ShareSheet 組件不提供具體的分享邏輯,需要開發(fā)者根據(jù)業(yè)務(wù)場(chǎng)景自行實(shí)現(xiàn)。
由于微信未提供分享相關(guān)的 API,需要引導(dǎo)用戶點(diǎn)擊右上角進(jìn)行分享。
可以通過 JSBridge 調(diào)用原生應(yīng)用的 SDK 進(jìn)行分享。
可以通過 Popup 組件以彈層的形式展示圖片,然后引導(dǎo)用戶保存圖片進(jìn)行分享。
更多建議: