Version: 0.0.0-experimental.20.0.20.0.30.0.40.0.50.0.60.0.70.0.80.0.90.0.100.0.110.0.120.0.130.0.140.0.150.0.160.0.170.0.180.0.190.0.200.0.210.0.220.0.230.0.240.0.250.0.260.0.270.0.280.0.290.0.300.0.310.0.320.0.340.0.350.0.360.0.370.0.380.0.390.0.400.0.410.0.420.0.430.0.44-beta.00.0.44-beta.10.0.44-beta.20.0.44-beta.30.0.44-beta.40.0.440.0.450.0.460.0.470.0.480.0.490.0.500.0.510.0.520.0.530.0.540.0.550.0.560.0.570.0.580.0.590.0.600.0.610.0.620.0.630.0.640.0.650.0.660.0.67-beta.30.0.670.0.68-beta.10.0.68-beta.30.0.68-beta.40.0.680.0.690.0.700.0.710.0.720.0.731.0.0-beta.01.0.0-beta.11.0.0-beta.21.0.0-beta.31.0.0-beta.41.0.0-beta.51.0.0-beta.61.0.0-beta.71.0.0-beta.81.0.0-beta.91.0.0-beta.101.0.0-beta.111.0.0-beta.121.0.0-beta.131.0.0-beta.141.0.0-beta.151.0.0-beta.161.0.0-beta.171.0.0-beta.181.0.0-beta.191.0.0-beta.201.0.0-beta.211.0.0-beta.221.0.0-beta.231.0.0-beta.241.0.0-beta.251.0.0-beta.261.0.0-beta.271.0.0-beta.281.0.0-beta.291.0.0-beta.301.0.01.0.11.0.21.0.31.0.41.0.51.0.61.0.71.1.0-beta.01.1.0-beta.11.1.0-beta.21.1.0-beta.31.1.0-beta.41.1.0-beta.51.1.0-beta.61.1.0-beta.71.1.0-beta.81.1.0-beta.91.1.0-beta.101.1.0-beta.111.1.0-beta.121.1.0-beta.131.1.0-beta.141.1.0-beta.151.1.01.1.11.1.21.1.31.1.41.1.51.1.61.1.71.1.81.1.91.2.0-alpha.01.2.0-alpha.11.2.0-alpha.21.2.0-alpha.31.2.0-beta.01.2.0-beta.11.2.0-beta.21.2.0-beta.31.2.0-beta.41.2.0-beta.51.2.0-beta.61.2.0-beta.71.2.0-beta.81.2.0-beta.91.2.0-beta.101.2.0-beta.111.2.0-beta.121.2.0-beta.131.2.0-beta.141.2.0-beta.151.2.0-beta.161.2.01.2.11.2.21.2.31.2.41.2.51.2.61.2.71.2.81.2.91.2.101.2.111.2.121.2.131.2.141.2.151.2.161.2.171.2.181.2.191.2.201.2.211.2.221.2.231.2.241.2.251.2.261.2.27-beta.01.3.0-beta.01.3.0-beta.11.3.0-beta.21.3.0-beta.31.3.0-beta.41.3.0-beta.51.3.0-beta.61.3.0-beta.71.3.0-beta.81.3.01.3.11.3.21.3.31.3.41.3.51.3.61.3.71.3.81.3.91.3.101.3.111.3.121.3.131.3.141.3.151.3.161.3.171.3.181.3.191.3.201.3.211.3.221.3.231.3.241.3.251.3.261.3.271.3.281.3.291.3.301.3.311.3.321.3.331.3.341.3.351.3.361.3.371.3.381.3.391.3.401.3.411.3.421.3.431.3.441.3.451.3.462.0.0-beta.02.0.0-beta.12.0.0-beta.22.0.0-beta.32.0.0-beta.42.0.0-beta.52.0.0-beta.62.0.0-beta.72.0.0-beta.82.0.0-beta.92.0.0-beta.102.0.0-beta.112.0.0-beta.122.0.0-beta.132.0.0-beta.142.0.02.0.12.0.22.0.32.0.42.0.52.0.62.0.72.1.02.1.12.1.22.1.32.1.42.1.52.1.62.2.0-beta.02.2.02.2.12.2.22.2.32.2.42.2.52.2.62.2.72.2.82.2.92.2.102.2.112.2.122.2.132.2.142.2.152.2.162.2.172.2.182.2.192.2.212.2.223.0.0-alpha.03.0.0-alpha.13.0.0-alpha.23.0.0-alpha.33.0.0-alpha.43.0.0-alpha.53.0.0-alpha.63.0.0-alpha.73.0.0-alpha.93.0.0-beta.03.0.0-beta.13.0.0-beta.23.0.0-beta.33.0.0-beta.43.0.0-beta.53.0.0-beta.63.0.0-experimental.33.0.0-experimental.43.0.0-experimental.53.0.0-rc.03.0.0-rc.13.0.0-rc.23.0.0-rc.33.0.0-rc.43.0.0-rc.53.0.0-rc.63.0.03.0.13.0.23.0.33.0.43.0.53.0.63.0.73.0.83.0.93.0.103.0.113.0.123.0.133.0.143.0.153.0.163.0.173.0.183.0.193.0.203.0.213.0.223.0.233.0.243.0.253.0.263.0.273.0.283.0.293.1.0-alpha.03.1.0-alpha.13.1.0-alpha.23.1.0-beta.03.1.0-beta.13.1.0-beta.23.1.0-beta.33.1.0-beta.43.1.0-beta.53.1.0-beta.63.1.0-beta.73.1.0-beta.83.1.0-beta.93.1.0-beta.103.1.0-beta.113.1.0-beta.123.1.03.1.13.1.23.1.33.1.43.1.53.2.0-beta.03.2.0-beta.13.2.0-beta.23.2.0-beta.33.2.0-beta.43.2.0-canary.03.2.0-canary.13.2.0-canary.23.2.0-canary.33.2.0-canary.43.2.0-canary.53.2.0-canary.63.2.0-canary.73.2.0-canary.83.2.0-canary.93.2.03.2.13.2.2-beta.03.2.23.2.33.2.43.2.53.2.63.2.73.2.83.2.9-alpha.03.2.93.2.103.2.113.2.123.2.133.2.143.2.153.2.163.3.0-alpha.03.3.0-alpha.13.3.0-alpha.23.3.0-alpha.43.3.0-alpha.53.3.0-alpha.63.3.0-alpha.73.3.0-alpha.83.3.0-beta.03.3.0-beta.13.3.03.3.13.3.23.3.33.3.43.3.53.3.63.3.73.3.83.3.93.3.103.3.113.3.123.3.133.3.143.3.153.3.163.3.173.3.183.3.193.3.203.4.0-beta.03.4.0-beta.13.4.0-beta.23.4.0-beta.33.4.03.4.13.4.23.4.33.4.43.4.53.4.63.4.73.4.83.4.93.4.103.4.113.4.123.4.133.4.143.5.0-alpha.03.5.0-alpha.13.5.0-alpha.23.5.0-alpha.33.5.0-alpha.43.5.0-alpha.53.5.0-alpha.63.5.0-alpha.73.5.0-alpha.83.5.0-alpha.93.5.0-alpha.103.5.0-alpha.113.5.0-alpha.123.5.0-alpha.133.5.0-alpha.143.5.0-alpha.153.5.0-alpha.163.5.0-alpha.173.5.0-beta.03.5.0-beta.13.5.0-beta.23.5.0-beta.33.5.0-beta.43.5.0-beta.53.5.0-beta.63.5.0-beta.73.5.0-beta.83.5.0-canary.03.5.0-canary.13.5.0-theta.03.5.0-theta.13.5.03.5.1-aplha.03.5.1-aplha.13.5.13.5.2-aplha.13.5.2-aplha.23.5.23.5.3-alpha.03.5.3-aplha.03.5.3-aplha.13.5.33.5.4-alpha.03.5.4-alpha.13.5.4-canary.03.5.4-canary.13.5.43.5.5-alpha.03.5.5-alpha.13.5.53.5.6-alpha.03.5.6-alpha.13.5.6-alpha.23.5.63.5.7-alpha.03.5.7-alpha.13.5.7-alpha.23.5.7-alpha.33.5.7-alpha.43.5.7-alpha.53.5.7-alpha.63.5.7-alpha.73.5.7-alpha.83.5.7-alpha.93.5.7-alpha.103.5.7-alpha.113.5.7-alpha.123.5.73.5.83.5.93.5.103.5.113.5.123.6.0-alpha.03.6.0-alpha.13.6.0-alpha.23.6.0-alpha.33.6.0-alpha.43.6.0-beta.03.6.0-beta.13.6.0-beta.23.6.0-beta.33.6.0-beta.43.6.0-canary.03.6.0-canary.13.6.0-canary.23.6.0-canary.33.6.0-canary.43.6.0-canary.53.6.0-canary.63.6.0-canary.73.6.0-canary.83.6.0-canary.93.6.0-canary.103.6.0-canary.113.6.0-canary.123.6.0-canary.133.6.03.6.1-alpha.03.6.1-alpha.13.6.1-alpha.23.6.13.6.2-canary.03.6.2-canary.13.6.2-canary.23.6.23.6.33.6.43.6.5-alpha3.6.5-alpha.13.6.5-alpha.23.6.5-canary.03.6.5-canary.13.6.53.6.6-alpha.03.6.6-alpha.13.6.6-alpha.23.6.6-alpha.33.6.63.6.7-alpha.03.6.7-alpha.13.6.73.6.83.6.9-alpha.13.6.9-alpha.23.6.9-alpha.33.6.9-alpha.43.6.9-alpha.53.6.9-alpha.63.6.9-alpha.73.6.9-alpha.83.6.9-alpha.103.6.9-alpha.113.6.9-alpha.123.6.9-alpha.133.6.9-alpha.153.6.93.6.10-alpha.13.6.10-alpha.23.6.10-alpha.43.6.10-alpha.53.6.103.6.11-alpha.03.6.11-alpha.43.6.113.6.12-alpha.03.6.123.6.13-alpha.03.6.13-alpha.13.6.13-alpha.23.6.133.6.14-alpha.03.6.14-alpha.13.6.143.6.153.6.16-alpha.03.6.16-alpha.13.6.163.6.173.6.183.6.19-nightly.20231122173.6.19-nightly.20231122233.6.193.6.203.6.213.6.22-alpha.03.6.22-alpha.13.6.22-alpha.23.6.22-alpha.33.6.22-alpha.43.6.22-alpha.53.6.22-nightly.03.6.22-nightly.33.6.22-nightly.43.6.22-nightly.53.6.22-nightly.63.6.22-nightly.73.6.22-nightly.83.6.22-nightly.93.6.223.6.23-nightly.03.6.233.6.24-nightly.03.6.24-nightly.13.6.24-nightly.23.6.24-nightly.33.6.24-nightly.43.6.24-nightly.53.6.24-nightly.83.6.24-nightly.93.6.24-nightly.103.6.243.6.253.6.26-alpha.13.6.26-alpha.23.6.263.6.273.7.0-alpha.03.7.0-alpha.13.7.0-alpha.23.7.0-alpha.33.7.0-alpha.43.7.0-alpha.53.7.0-alpha.63.7.0-alpha.73.7.0-alpha.83.7.0-alpha.103.7.0-alpha.113.7.0-alpha.123.7.0-alpha.133.7.0-alpha.143.7.0-alpha.153.7.0-alpha.163.7.0-alpha.183.7.0-alpha.193.7.0-alpha.203.7.0-alpha.223.7.0-alpha.233.7.0-alpha.253.7.0-alpha.263.7.0-alpha.273.7.0-beta.13.7.0-beta.33.7.0-beta.43.7.0-canary.03.7.0-canary.13.7.0-canary.23.7.0-canary.33.7.0-canary.43.7.0-canary.53.7.0-canary.63.8.0-canary.04.0.0-alpha.04.0.0-alpha.24.0.0-alpha.34.0.0-beta.04.0.0-beta.14.0.0-beta.24.0.0-beta.34.0.0-beta.44.0.0-beta.54.0.0-beta.64.0.0-beta.74.0.0-beta.84.0.0-beta.94.0.0-beta.104.0.0-beta.114.0.0-beta.124.0.0-beta.134.0.0-beta.144.0.0-beta.154.0.0-beta.164.0.0-beta.174.0.0-beta.184.0.0-beta.194.0.0-beta.204.0.0-beta.214.0.0-beta.224.0.0-beta.234.0.0-beta.244.0.0-beta.254.0.0-beta.264.0.0-beta.274.0.0-beta.284.0.0-beta.294.0.0-beta.304.0.0-beta.314.0.0-beta.324.0.0-beta.334.0.0-beta.344.0.0-beta.354.0.0-beta.364.0.0-beta.374.0.0-beta.384.0.0-beta.394.0.0-beta.404.0.0-beta.414.0.0-beta.424.0.0-beta.434.0.0-beta.444.0.0-beta.454.0.0-beta.464.0.0-beta.474.0.0-canary.04.0.0-canary.14.0.0-canary.24.0.0-canary.34.0.0-canary.44.0.0-canary.54.0.0-canary.64.0.0-canary.74.0.0-canary.84.0.0-canary.94.0.0-canary.104.0.0-canary.11
import { ComponentType } from 'react'
import { StandardProps, CommonEventFunction } from './common'
interface ShareElementProps extends StandardProps {
/** 映射标记
* @supported weapp
*/
mapkey: string
/** 是否进行动画
* @default false
transform?: boolean
/** 动画时长,单位毫秒
* @default 300
duration?: number
/** css缓动函数
* @default ease-out
easingFunction?: number
}
/** 共享元素
*
* 共享元素是一种动画形式,类似于 [`flutter Hero`](https://flutterchina.club/animations/hero-animations/) 动画,表现为元素像是在页面间穿越一样。该组件需与 [`PageContainer`](/docs/components/viewContainer/page-container) 组件结合使用。
* 使用时需在当前页放置 `ShareElement` 组件,同时在 `PageContainer` 容器中放置对应的 `ShareElement` 组件,对应关系通过属性值 key 映射。当设置 `PageContainer` `显示时,transform` 属性为 `true` 的共享元素会产生动画。当前页面容器退出时,会产生返回动画。
* @classification viewContainer
* @example_react
* ```tsx
* // index.js
* import { useState, useCallback } from 'react'
* import { View, Button, PageContainer, ShareElement } from '@tarojs/components'
* import './index.scss'
* const contacts = [
* { id: 1, name: 'Frank', img: 'frank.png', phone: '0101 123456', mobile: '0770 123456', email: 'frank@emailionicsorter.com' },
* { id: 2, name: 'Susan', img: 'susan.png', phone: '0101 123456', mobile: '0770 123456', email: 'frank@emailionicsorter.com' },
* { id: 3, name: 'Emma', img: 'emma.png', phone: '0101 123456', mobile: '0770 123456', email: 'frank@emailionicsorter.com' },
* { id: 4, name: 'Scott', img: 'scott.png', phone: '0101 123456', mobile: '0770 123456', email: 'frank@emailionicsorter.com' },
* { id: 5, name: 'Bob', img: 'bob.png', phone: '0101 123456', mobile: '0770 123456', email: 'frank@emailionicsorter.com' },
* { id: 6, name: 'Olivia', img: 'olivia.png', phone: '0101 123456', mobile: '0770 123456', email: 'frank@emailionicsorter.com' },
* { id: 7, name: 'Anne', img: 'anne.png', phone: '0101 123456', mobile: '0770 123456', email: 'frank@emailionicsorter.com' },
* { id: 8, name: 'sunny', img: 'olivia.png', phone: '0101 123456', mobile: '0770 123456', email: 'frank@emailionicsorter.com' }
* ]
* export default function () {
* const [show, setShow] = useState(false)
* const [contact, setContact] = useState(contacts[0])
* const [transformIdx, setTransformIdx] = useState(0)
* const onBeforeEnter = useCallback((res) => {
* console.log('onBeforeEnter: ', res)
* }, [])
* const onEnter = useCallback((res) => {
* console.log('onEnter: ', res)
* const onAfterEnter = useCallback((res) => {
* console.log('onAfterEnter: ', res)
* const onBeforeLeave = useCallback((res) => {
* console.log('onBeforeLeave: ', res)
* const onLeave = useCallback((res) => {
* console.log('onLeave: ', res)
* const onAfterLeave = useCallback((res) => {
* console.log('onAfterLeave: ', res)
* const showNext = (e, index) => {
* setShow(true)
* setContact(contacts[index])
* setTransformIdx(index)
* }
* const showPrev = useCallback(() => {
* setShow(false)
* return (
* <View>
* <View className="screen screen1">
* {
* contacts.map((item, index) => (
* <View key={item.id} className="contact" onClick={e => showNext(e, index)}>
* <ShareElement duration={300} className="name" mapkey="name" transform={transformIdx === index}>
* {item.name}
* </ShareElement>
* <View className="list">
* <View>Phone: {item.phone}</View>
* <View>Mobile: {item.mobile}</View>
* <View>Email: {item.email}</View>
* </View>
* ))
* <PageContainer
* show={show}
* overlay={false}
* closeOnSlideDown
* duration={300}
* position='center'
* onBeforeEnter={onBeforeEnter}
* onEnter={onEnter}
* onAfterEnter={onAfterEnter}
* onBeforeLeave={onBeforeLeave}
* onLeave={onLeave}
* onAfterLeave={onAfterLeave}
* >
* <View className="screen screen2">
* <View className="contact">
* <ShareElement className="name" mapkey="name" duration={300} transform>
* {contact.name}
* <View className={`paragraph ${show ? 'enter' : ''}`}>
* Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vivamus nisl enim, sodales non augue efficitur, sagittis
* varius neque. Fusce dolor turpis, maximus eu volutpat quis, pellentesque et ligula. Ut vehicula metus in nibh
* mollis ornare. Etiam aliquam lacinia malesuada. Vestibulum dignissim mollis quam a tristique. Maecenas neque
* mauris, malesuada vitae magna eu, congue consectetur risus. Etiam vitae pulvinar ex. Maecenas suscipit mi ac
* imperdiet pretium. Aliquam velit mauris, euismod quis elementum sed, malesuada non dui. Nunc rutrum sagittis
* ligula in dapibus. Cras suscipit ut augue eget mollis. Donec auctor feugiat ipsum id viverra. Vestibulum eu nisi
* risus. Vestibulum eleifend dignissim.
* <Button className="screen2-button" onClick={showPrev} hidden={!show} hoverClass="none">Click Me</Button>
* </PageContainer>
* )
* ```
* ```scss
* \/** index.scss *\/
* page {
* color: #333;
* background-color: #ddd;
* overflow: hidden;
* button {
* border: 0 solid #0010ae;
* background-color: #1f2afe;
* color: #fff;
* font-size: 120%;
* padding: 8px 16px;
* outline-width: 0;
* -webkit-appearance: none;
* box-shadow: 0 8px 17px rgba(0, 0, 0, 0.2);
* .screen {
* position: absolute;
* top: 0;
* bottom: 0;
* left: 0;
* right: 0;
* padding: 16px;
* -webkit-overflow-scrolling: touch;
* .contact {
* position: relative;
* background-color: #fff;
* width: 100%;
* height: 100%;
* box-sizing: border-box;
* .avatar {
* top: 16px;
* left: 16px;
* font-size: 0;
* .name {
* height: 65px;
* font-size: 2em;
* font-weight: bold;
* text-align: center;
* margin: 10px 0;
* .list {
* padding-top: 8px;
* padding-left: 32px;
* .screen1 {
* overflow-y: scroll;
* padding: 0;
* .screen1 .contact {
* margin: 16px;
* height: auto;
* width: auto;
* box-shadow: 0 2px 5px 0 rgba(0, 0, 0, 0.2);
* .screen2-button {
* display: block;
* margin: 24px auto;
* .paragraph {
* -webkit-transition: transform ease-in-out 300ms;
* transition: transform ease-in-out 300ms;
* -webkit-transform: scale(0.6);
* transform: scale(0.6);
* .enter.paragraph {
* transform: none;
* @see https://developers.weixin.qq.com/miniprogram/dev/component/share-element.html
declare const ShareElement: ComponentType<ShareElementProps>
export { ShareElement, ShareElementProps }