Vant4 ShareSheet 分享面板

2023-02-16 17:55 更新

介紹

底部彈起的分享面板,用于展示各分享渠道對(duì)應(yīng)的操作按鈕,不含具體的分享邏輯。

引入

通過以下方式來全局注冊(cè)組件,更多注冊(cè)方式請(qǐng)參考組件注冊(cè)。

import { createApp } from 'vue';
import { ShareSheet } from 'vant';

const app = createApp();
app.use(ShareSheet);

代碼演示

基礎(chǔ)用法

分享面板通過 ?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,
    };
  },
};

展示多行選項(xiàng)

當(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,
    };
  },
};

自定義圖標(biāo)

除了使用內(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,
    };
  },
};

API

Props

參數(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> -

Option 數(shù)據(jù)結(jié)構(gòu)

?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

Events

事件名 說明 回調(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

Slots

名稱 說明
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) -

常見問題

如何實(shí)現(xiàn)分享邏輯?

在不同的 App 或?yàn)g覽器中,存在各式各樣的分享接口或分享方式,因此 ShareSheet 組件不提供具體的分享邏輯,需要開發(fā)者根據(jù)業(yè)務(wù)場(chǎng)景自行實(shí)現(xiàn)。

微信內(nèi)分享

由于微信未提供分享相關(guān)的 API,需要引導(dǎo)用戶點(diǎn)擊右上角進(jìn)行分享。

App 內(nèi)分享

可以通過 JSBridge 調(diào)用原生應(yīng)用的 SDK 進(jìn)行分享。

分享海報(bào)或二維碼

可以通過 Popup 組件以彈層的形式展示圖片,然后引導(dǎo)用戶保存圖片進(jìn)行分享。


以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)