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