Vant3 ShareSheet 分享面板

2021-09-14 11:52 更新

介紹

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

實例演示

引入

通過以下方式來全局注冊組件,更多注冊方式請參考組件注冊

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

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

代碼演示

基礎(chǔ)用法

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

自定義圖標(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://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,
    };
  },
};

API

Props

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

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

options 屬性為一個對象數(shù)組,數(shù)組中的每個對象配置一列,對象可以包含以下值:

鍵名 說明 類型
name 分享渠道名稱 string
description 分享選項描述 string
icon 圖標(biāo),可選值為 wechat weibo qq link qrcode poster weapp-qrcode wechat-moments,支持傳入圖片 URL string
className 分享選項類名 string

Events

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

Slots

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

常見問題

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

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

微信內(nèi)分享

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

App 內(nèi)分享

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

分享海報或二維碼

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


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

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號