亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

如何使用RN Animated做一個“添加購物車”動畫

發布時間:2021-08-05 11:40:00 來源:億速云 閱讀:226 作者:小新 欄目:web開發

小編給大家分享一下如何使用RN Animated做一個“添加購物車”動畫,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!

最近在選座的新項目中試用了一下 React Native,熟悉新框架的同時,可以略微將交互效果和 Native 看齊了。

分享一下項目本身比較重要的一個交互動畫的做法, RT。

如何使用RN Animated做一個“添加購物車”動畫

這次我們就不裝大象了,因為我真的買了冰箱 =,=

本著言簡意賅,不故弄玄虛的原則,依然是三步:

第 1 步:通過 Animated 創建合成動畫的 View。仔細觀察,“選擇座位” 動畫和 “添加購物車” 動畫類似,都可以分解為透明度變化( opacity )和 3D 變化( transform )兩部分。而 transform 又能進一步分解為水平位移( translateX )、垂直位移( translateY )、旋轉( rotateZ )、縮放( scale )四個分動畫( 代碼見 render() );

第 2 步:響應點擊事件,準備好動畫的相關參數。目標位置被點擊時,在動畫的父級組件中通過 onPress 事件的 event 對象獲取點擊的位置坐標( event.nativeEvent.changedTouches[0].pageX|Y )作為動畫起始位置。終點位置一般為固定位置,當然你也可以指定動態值;

第 3 步:獲取參數, start() 播放動畫( 代碼見 componentDidMount() )。從父級組件中獲取位置參數并通過 props 傳入子動畫組件。其中 opacityrotateZscale 屬性值都是靜態變化,分別為 1 -> 0 0deg -> 360deg 1 -> 0 (可以利用 interpolate 方法做各個屬性不同類型值的 mapping,更加方便統一控制);

注意:類似的全局動畫要展示在最高層級,防止被后渲染的組件遮擋,最好單獨封裝組建提升其在 UI 中的渲染層級。

import React from 'react';

import {
 StyleSheet,
 View,
 Image,
 Animated
} from 'react-native';

export default class SeatDroppingextends React.PureComponent{
 constructor (props) {
  super(props);
  this.state = {
   animValue: new Animated.Value(0),
   fromPageX: props.clickedPosition.x, // from event.nativeEvent.changedTouches[0]
   fromPageY: props.clickedPosition.y,
   toPageX: props.psgPosition.x,
   toPageY: props.psgPosition.y
  };
 }
 componentDidMount() {
  Animated.timing(
   this.state.animValue,
   {
    toValue: 1,
    duration: 600
   }
  ).start();
 }
 render () {
  const {
   animValue,
   fromPageX,
   fromPageY,
   toPageX,
   toPageY
  } = this.state;
  return (
   <Animated.View
    style={{
     zIndex: 9,
     position: 'absolute',
     opacity: animValue.interpolate({
      inputRange: [0, 1],
      outputRange: [1, 0]
     }),
     transform: [
      {
       translateX: animValue.interpolate({
        inputRange: [0, 1],
        outputRange: [`${fromPageX}px`, `${toPageX}px`]
       })
      },
      {
       translateY: animValue.interpolate({
        inputRange: [0, 1],
        outputRange: [`${fromPageY}px`, `${toPageY}px`]
       })
      },
      {
       rotateZ: animValue.interpolate({
        inputRange: [0, 1],
        outputRange: ['0deg', '180deg']
       })
      },
      {
       scale: animValue.interpolate({
        inputRange: [0, 1],
        outputRange: [1, 0]
       })
      }
     ]}}
   >
    <Image
     source={require('../img/ic_seat_focus.png')}
     style={[
      {
       width: 36,
       height: 32,
       zIndex: 9
      }
     ]}
    />
   </Animated.View>
  );
 }
}

以上是“如何使用RN Animated做一個“添加購物車”動畫”這篇文章的所有內容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內容對大家有所幫助,如果還想學習更多知識,歡迎關注億速云行業資訊頻道!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

观塘区| 天祝| 达孜县| 太仓市| 潍坊市| 鄂托克旗| 峡江县| 新巴尔虎左旗| 顺义区| 陆良县| 许昌县| 平武县| 项城市| 仙游县| 金塔县| 嫩江县| 郓城县| 佛冈县| 肥西县| 静海县| 镇远县| 集安市| 英超| 白城市| 安福县| 靖宇县| 深水埗区| 鄂托克前旗| 富蕴县| 满洲里市| 剑河县| 桑植县| 公主岭市| 盐津县| 义马市| 塘沽区| 东山县| 阿图什市| 三明市| 罗定市| 苗栗县|