js-components-common-transition.md 12.9 KB
Newer Older
Z
zengyawen 已提交
1 2 3 4
# 转场样式<a name="ZH-CN_TOPIC_0000001127125110"></a>

## 共享元素转场<a name="section1884520391817"></a>

Z
zengyawen 已提交
5
### 属性<a name="section179214816810"></a>
Z
zengyawen 已提交
6

Z
zengyawen 已提交
7
<table><thead align="left"><tr><th class="cellrowborder" valign="top" width="15.370000000000001%" id="mcps1.1.5.1.1"><p>名称</p>
Z
zengyawen 已提交
8
</th>
Z
zengyawen 已提交
9
<th class="cellrowborder" valign="top" width="12.920000000000002%" id="mcps1.1.5.1.2"><p>类型</p>
Z
zengyawen 已提交
10
</th>
Z
zengyawen 已提交
11
<th class="cellrowborder" valign="top" width="16.41%" id="mcps1.1.5.1.3"><p>默认值</p>
Z
zengyawen 已提交
12
</th>
Z
zengyawen 已提交
13
<th class="cellrowborder" valign="top" width="55.300000000000004%" id="mcps1.1.5.1.4"><p>描述</p>
Z
zengyawen 已提交
14 15 16
</th>
</tr>
</thead>
Z
zengyawen 已提交
17
<tbody><tr><td class="cellrowborder" valign="top" width="15.370000000000001%" headers="mcps1.1.5.1.1 "><p>shareid</p>
Z
zengyawen 已提交
18
</td>
Z
zengyawen 已提交
19
<td class="cellrowborder" valign="top" width="12.920000000000002%" headers="mcps1.1.5.1.2 "><p>string</p>
Z
zengyawen 已提交
20
</td>
Z
zengyawen 已提交
21
<td class="cellrowborder" valign="top" width="16.41%" headers="mcps1.1.5.1.3 "><p></p>
Z
zengyawen 已提交
22
</td>
Z
zengyawen 已提交
23
<td class="cellrowborder" valign="top" width="55.300000000000004%" headers="mcps1.1.5.1.4 "><p>进行共享元素转场时使用,若不配置,则转场样式不生效。共享元素转场当前支持的组件:list-item、image、text、button、label。</p>
Z
zengyawen 已提交
24 25 26 27 28
</td>
</tr>
</tbody>
</table>

Z
zengyawen 已提交
29
### 样式<a name="section416125511818"></a>
Z
zengyawen 已提交
30

Z
zengyawen 已提交
31
<table><thead align="left"><tr><th class="cellrowborder" valign="top" width="26.780000000000005%" id="mcps1.1.5.1.1"><p>名称</p>
Z
zengyawen 已提交
32
</th>
Z
zengyawen 已提交
33
<th class="cellrowborder" valign="top" width="15.480000000000002%" id="mcps1.1.5.1.2"><p>类型</p>
Z
zengyawen 已提交
34
</th>
Z
zengyawen 已提交
35
<th class="cellrowborder" valign="top" width="15.480000000000002%" id="mcps1.1.5.1.3"><p>默认值</p>
Z
zengyawen 已提交
36
</th>
Z
zengyawen 已提交
37
<th class="cellrowborder" valign="top" width="42.260000000000005%" id="mcps1.1.5.1.4"><p>描述</p>
Z
zengyawen 已提交
38 39 40
</th>
</tr>
</thead>
Z
zengyawen 已提交
41
<tbody><tr><td class="cellrowborder" valign="top" width="26.780000000000005%" headers="mcps1.1.5.1.1 "><p>shared-transition-effect</p>
Z
zengyawen 已提交
42
</td>
Z
zengyawen 已提交
43
<td class="cellrowborder" valign="top" width="15.480000000000002%" headers="mcps1.1.5.1.2 "><p>string</p>
Z
zengyawen 已提交
44
</td>
Z
zengyawen 已提交
45
<td class="cellrowborder" valign="top" width="15.480000000000002%" headers="mcps1.1.5.1.3 "><p>exchange</p>
Z
zengyawen 已提交
46
</td>
Z
zengyawen 已提交
47 48
<td class="cellrowborder" valign="top" width="42.260000000000005%" headers="mcps1.1.5.1.4 "><p>配置共享元素转场时的入场样式。</p>
<ul><li>exchange(默认值):源页面元素移动到目的页元素位置,并进行适当缩放。</li><li>static:目的页元素位置不变,用户可配置透明度动画。当前仅跳转目标页配置的static效果生效。</li></ul>
Z
zengyawen 已提交
49 50
</td>
</tr>
Z
zengyawen 已提交
51
<tr><td class="cellrowborder" valign="top" width="26.780000000000005%" headers="mcps1.1.5.1.1 "><p>shared-transition-name</p>
Z
zengyawen 已提交
52
</td>
Z
zengyawen 已提交
53
<td class="cellrowborder" valign="top" width="15.480000000000002%" headers="mcps1.1.5.1.2 "><p>string</p>
Z
zengyawen 已提交
54
</td>
Z
zengyawen 已提交
55
<td class="cellrowborder" valign="top" width="15.480000000000002%" headers="mcps1.1.5.1.3 "><p>-</p>
Z
zengyawen 已提交
56
</td>
Z
zengyawen 已提交
57
<td class="cellrowborder" valign="top" width="42.260000000000005%" headers="mcps1.1.5.1.4 "><p>转场时,目的页配置的样式优先生效。该样式用于配置共享元素的动画效果,一个由@keyframes定义的动画序列,支持transform和透明度动画。若共享元素效果与自定义的动画冲突,以自定义动画为准。</p>
Z
zengyawen 已提交
58 59
</td>
</tr>
Z
zengyawen 已提交
60
<tr><td class="cellrowborder" valign="top" width="26.780000000000005%" headers="mcps1.1.5.1.1 "><p>shared-transition-timing-function</p>
Z
zengyawen 已提交
61
</td>
Z
zengyawen 已提交
62
<td class="cellrowborder" valign="top" width="15.480000000000002%" headers="mcps1.1.5.1.2 "><p>string</p>
Z
zengyawen 已提交
63
</td>
Z
zengyawen 已提交
64
<td class="cellrowborder" valign="top" width="15.480000000000002%" headers="mcps1.1.5.1.3 "><p>friction</p>
Z
zengyawen 已提交
65
</td>
Z
zengyawen 已提交
66
<td class="cellrowborder" valign="top" width="42.260000000000005%" headers="mcps1.1.5.1.4 "><p>转场时,目的页配置的样式优先生效。该属性定义了共享元素转场时的差值曲线。若不配置,默认使用friction曲线。</p>
Z
zengyawen 已提交
67 68 69 70 71
</td>
</tr>
</tbody>
</table>

Z
zengyawen 已提交
72
### 注意事项<a name="section181291131395"></a>
Z
zengyawen 已提交
73

Z
zengyawen 已提交
74
1. 若同时配置了共享元素转场和自定义页面转场样式,页面转场效果以自定义效果为准。
Z
zengyawen 已提交
75

Z
zengyawen 已提交
76
2. 共享元素的exchange效果类似下图。
Z
zengyawen 已提交
77

Z
zengyawen 已提交
78
**图 1**  共享元素转场默认效果  
Z
zengyawen 已提交
79 80 81 82 83 84
![](figures/共享元素转场默认效果.png "共享元素转场默认效果")

3. 共享元素动画对元素的边框、背景色不生效。

4. 共享元素转场时,由于页面元素会被隐藏,故页面元素配置的动画样式/动画方法失效。

Z
zengyawen 已提交
85
5. 动态修改shareid<sup>5+</sup>:组件A的shareid被组件B的shareid覆盖,则组件A的共享元素效果失效,即使组件B的shareid被修改,此时组件A的共享元素效果也不会恢复。
Z
zengyawen 已提交
86

Z
zengyawen 已提交
87
### 示例<a name="section11396118910"></a>
Z
zengyawen 已提交
88 89 90 91 92 93 94

PageA跳转到PageB,跳转的共享元素为image, shareid为“shareImage”。

```
<!-- PageA -->
<!-- xxx.hml -->
<div>
Z
zengyawen 已提交
95 96 97 98 99 100 101 102
    <list>
        <list-item type="description">
            <div>
                <image src="item.jpg" shareid="shareImage" onclick="jump" class="shared-transition-style"></image>
                <text onclick="jump">Click on picture to Jump to ths details</text>
            </div>
        </list-item>
    </list>
Z
zengyawen 已提交
103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161
</div>
```

```
// xxx.js
import router from '@system.router';
export default {
  jump() {
    router.push({
      uri: 'detailpage',
    });
  },
}
```

```
/* xxx.css */
.shared-transition-style {
  shared-transition-effect: exchange;
  shared-transition-name: shared-transition;
}
@keyframes shared-transition {
  from { opacity: 0; }
  to { opacity: 1; }
}
```

```
<!-- PageB -->
<!-- xxx.hml -->
<div>
  <image src="itemDetail.jpg" shareid="shareImage" onclick="jumpBack" class="shared-transition-style"></image>
</div>
```

```
// xxx.js
import router from '@system.router';
export default {
  jumpBack() {
    router.back();
  },
}
```

```
/* xxx.css */
.shared-transition-style {
  shared-transition-effect: exchange;
  shared-transition-name: shared-transition;
}
@keyframes shared-transition {
  from { opacity: 0; }
  to { opacity: 1; }
}
```

## 卡片转场样式<a name="section765051220203"></a>

Z
zengyawen 已提交
162 163 164 165 166 167
>![](../../public_sys-resources/icon-note.gif) **说明:** 
>卡片转场无法和其他转场\(包括共享元素转场和自定义转场\)共同使用。

### 样式<a name="section1242474714118"></a>

<table><thead align="left"><tr><th class="cellrowborder" valign="top" width="25%" id="mcps1.1.5.1.1"><p>名称</p>
Z
zengyawen 已提交
168
</th>
Z
zengyawen 已提交
169
<th class="cellrowborder" valign="top" width="13.969999999999999%" id="mcps1.1.5.1.2"><p>类型</p>
Z
zengyawen 已提交
170
</th>
Z
zengyawen 已提交
171
<th class="cellrowborder" valign="top" width="28.410000000000004%" id="mcps1.1.5.1.3"><p>默认值</p>
Z
zengyawen 已提交
172
</th>
Z
zengyawen 已提交
173
<th class="cellrowborder" valign="top" width="32.62%" id="mcps1.1.5.1.4"><p>描述</p>
Z
zengyawen 已提交
174 175 176
</th>
</tr>
</thead>
Z
zengyawen 已提交
177
<tbody><tr><td class="cellrowborder" valign="top" width="25%" headers="mcps1.1.5.1.1 "><p>transition-effect</p>
Z
zengyawen 已提交
178
</td>
Z
zengyawen 已提交
179
<td class="cellrowborder" valign="top" width="13.969999999999999%" headers="mcps1.1.5.1.2 "><p>string</p>
Z
zengyawen 已提交
180
</td>
Z
zengyawen 已提交
181
<td class="cellrowborder" valign="top" width="28.410000000000004%" headers="mcps1.1.5.1.3 "><p>-</p>
Z
zengyawen 已提交
182
</td>
Z
zengyawen 已提交
183 184
<td class="cellrowborder" valign="top" width="32.62%" headers="mcps1.1.5.1.4 "><p>用于配置当前页面中的某个组件在卡片转场过程中是否进行转场动效,当前支持如下配置:</p>
<ul><li>unfold:配置这个属性的组件,如在卡片的上方,则向上移动一个卡片的高度,如在卡片的下方,则向下移动一个卡片的高度。</li><li>none:转场过程中没有动效。</li></ul>
Z
zengyawen 已提交
185 186 187 188 189
</td>
</tr>
</tbody>
</table>

Z
zengyawen 已提交
190
### 示例<a name="section13120105991118"></a>
Z
zengyawen 已提交
191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276

source\_page包含顶部内容以及卡片列表,点击卡片可以跳转到target\_page。

```
<!-- source_page -->
<!-- xxx.hml -->
<div class="container">
  <div class="outer">
    <text style="font-size: 23px; margin-bottom: 20px" >MAIN TITLE</text>
  </div>
  <list style="width:340px;height:600px;flex-direction:column;justify-content:center;align-items:center">
    <list-item type="listItem" class="item" card="true" for="list" id="{{$item.id}}" onclick="jumpPage({{$item.id}}, {{$item.uri}})">
      <text style="margin-left: 10px; font-size: 23px;">{{$item.title}}</text>
    </list-item>
  </list>
</div>
```

```
// xxx.js
import router from '@system.router'
export default {
  data: { list: [] },
  onInit() {
    for(var i = 0; i < 10; i++) {
      var item = { uri: "pages/card_transition/target_page/index", 
                   title: "this is title" + i, id: "item_" + i }
      this.list.push(item);
    }
  },
  jumpPage(id, uri) {
    var cardId = this.$element(id).ref;
    router.push({ uri: uri, params : { ref : cardId } });
  }
}
```

```
/* xxx.css */
.container {
  flex-direction: column;
  align-items: center;
  background-color: #ABDAFF;
}
.item {
  height: 80px;
  background-color: #FAFAFA;
  margin-top: 2px;
}
.outer {
  width: 300px;
  height: 100px;
  align-items: flex-end;
  transition-effect: unfold;
}
```

```
<!-- target_page -->
<!-- xxx.hml -->
<div class="container">
  <div class="div">
    <text style="font-size: 30px">this is detail</text>
  </div>
</div>
```

```
/* xxx.css */
.container {
  flex-direction: column;
  align-items: center;
  background-color: #EBFFD7;
}
.div {
  height: 600px;
  flex-direction: column;
  align-items: center;
  justify-content: center;
}
```

![](figures/卡片转场.gif)

## 页面转场样式<a name="section0565021620"></a>

Z
zengyawen 已提交
277
### 样式<a name="section11765348111217"></a>
Z
zengyawen 已提交
278

Z
zengyawen 已提交
279
<table><thead align="left"><tr><th class="cellrowborder" valign="top" width="25%" id="mcps1.1.5.1.1"><p>名称</p>
Z
zengyawen 已提交
280
</th>
Z
zengyawen 已提交
281
<th class="cellrowborder" valign="top" width="13.969999999999999%" id="mcps1.1.5.1.2"><p>类型</p>
Z
zengyawen 已提交
282
</th>
Z
zengyawen 已提交
283
<th class="cellrowborder" valign="top" width="28.410000000000004%" id="mcps1.1.5.1.3"><p>默认值</p>
Z
zengyawen 已提交
284
</th>
Z
zengyawen 已提交
285
<th class="cellrowborder" valign="top" width="32.62%" id="mcps1.1.5.1.4"><p>描述</p>
Z
zengyawen 已提交
286 287 288
</th>
</tr>
</thead>
Z
zengyawen 已提交
289
<tbody><tr><td class="cellrowborder" valign="top" width="25%" headers="mcps1.1.5.1.1 "><p>transition-enter</p>
Z
zengyawen 已提交
290
</td>
Z
zengyawen 已提交
291
<td class="cellrowborder" valign="top" width="13.969999999999999%" headers="mcps1.1.5.1.2 "><p>string</p>
Z
zengyawen 已提交
292
</td>
Z
zengyawen 已提交
293
<td class="cellrowborder" valign="top" width="28.410000000000004%" headers="mcps1.1.5.1.3 "><p>-</p>
Z
zengyawen 已提交
294
</td>
Z
zengyawen 已提交
295
<td class="cellrowborder" valign="top" width="32.62%" headers="mcps1.1.5.1.4 "><p>与@keyframes配套使用,支持transform和透明度动画,详见<a href="js-components-common-animation.md#t48a722bba37a44c883ed4e046a4cf82e">表2</a>。</p>
Z
zengyawen 已提交
296 297
</td>
</tr>
Z
zengyawen 已提交
298
<tr><td class="cellrowborder" valign="top" width="25%" headers="mcps1.1.5.1.1 "><p>transition-exit</p>
Z
zengyawen 已提交
299
</td>
Z
zengyawen 已提交
300
<td class="cellrowborder" valign="top" width="13.969999999999999%" headers="mcps1.1.5.1.2 "><p>string</p>
Z
zengyawen 已提交
301
</td>
Z
zengyawen 已提交
302
<td class="cellrowborder" valign="top" width="28.410000000000004%" headers="mcps1.1.5.1.3 "><p>-</p>
Z
zengyawen 已提交
303
</td>
Z
zengyawen 已提交
304
<td class="cellrowborder" valign="top" width="32.62%" headers="mcps1.1.5.1.4 "><p>与@keyframes配套使用,支持transform和透明度动画,详见<a href="js-components-common-animation.md#t48a722bba37a44c883ed4e046a4cf82e">表2</a>。</p>
Z
zengyawen 已提交
305 306
</td>
</tr>
Z
zengyawen 已提交
307
<tr><td class="cellrowborder" valign="top" width="25%" headers="mcps1.1.5.1.1 "><p>transition-duration</p>
Z
zengyawen 已提交
308
</td>
Z
zengyawen 已提交
309
<td class="cellrowborder" valign="top" width="13.969999999999999%" headers="mcps1.1.5.1.2 "><p>string</p>
Z
zengyawen 已提交
310
</td>
Z
zengyawen 已提交
311
<td class="cellrowborder" valign="top" width="28.410000000000004%" headers="mcps1.1.5.1.3 "><p>跟随设备默认的页面转场时间</p>
Z
zengyawen 已提交
312
</td>
Z
zengyawen 已提交
313
<td class="cellrowborder" valign="top" width="32.62%" headers="mcps1.1.5.1.4 "><p>支持的单位为[s(秒)|ms(毫秒) ],默认单位为ms,未配置时使用系统默认值。</p>
Z
zengyawen 已提交
314 315
</td>
</tr>
Z
zengyawen 已提交
316
<tr><td class="cellrowborder" valign="top" width="25%" headers="mcps1.1.5.1.1 "><p>transition-timing-function</p>
Z
zengyawen 已提交
317
</td>
Z
zengyawen 已提交
318
<td class="cellrowborder" valign="top" width="13.969999999999999%" headers="mcps1.1.5.1.2 "><p>string</p>
Z
zengyawen 已提交
319
</td>
Z
zengyawen 已提交
320
<td class="cellrowborder" valign="top" width="28.410000000000004%" headers="mcps1.1.5.1.3 "><p>friction</p>
Z
zengyawen 已提交
321
</td>
Z
zengyawen 已提交
322
<td class="cellrowborder" valign="top" width="32.62%" headers="mcps1.1.5.1.4 "><p>描述转场动画执行的速度曲线,用于使转场更为平滑。详细参数见<a href="js-components-common-animation.md">动画样式</a>中“animation-timing-function”有效值说明。</p>
Z
zengyawen 已提交
323 324 325 326 327
</td>
</tr>
</tbody>
</table>

Z
zengyawen 已提交
328
### 注意事项<a name="section16968142012132"></a>
Z
zengyawen 已提交
329 330

1.  配置自定义转场时,建议配置页面背景色为不透明颜色,否则在转场过程中可能会出现衔接不自然的现象。
Z
zengyawen 已提交
331 332 333
2.  transition-enter和transition-exit可单独配置,没有配置时使用系统默认的参数。
3.  transition-enter/transition-exit说明如下:
    1.  push场景下:进入页面栈的Page2.js应用transition-enter描述的动画配置;进入页面栈第二位置的Page1.js应用transition-exit描述的动画配置。
Z
zengyawen 已提交
334

Z
zengyawen 已提交
335
        ![](figures/zh-cn_image_0000001193704354.png)
Z
zengyawen 已提交
336 337 338

    2.  back场景下:退出页面栈的Page2.js应用transition-enter描述的动画配置,并进行倒播;从页面栈第二位置进入栈顶位置的Page1.js应用transition-exit描述的动画配置,并进行倒播。

Z
zengyawen 已提交
339
        ![](figures/zh-cn_image_0000001238184345.png)
Z
zengyawen 已提交
340 341 342