react native中内容占位效果

打印 上一主题 下一主题

主题 656|帖子 656|积分 1968

效果实例图


实例代码skeleton.jsx

  1. import React, { useEffect, useRef } from "react";
  2. import { Animated, StyleSheet, View } from "react-native";
  3. import { pxToPd } from "../../../common/js/device";
  4. const Skeleton = ({ }) => {
  5.     const progressBarWidth = useRef(new Animated.Value(0)).current;
  6.     const animationFun = () => {
  7.         Animated.timing(progressBarWidth, {
  8.             toValue: 1, // 目标值
  9.             duration: 1000, // 动画持续时间(毫秒)
  10.             useNativeDriver: false // 必须设置为 false,因为布局动画不能使用原生驱动
  11.         }).start(({ finished }) => {
  12.             if (finished) {
  13.                 progressBarWidth.setValue(0); // 重置为初始值
  14.                 animationFun(); // 重新触发动画
  15.             }
  16.         });;
  17.     }
  18.     const widthValue = progressBarWidth.interpolate({
  19.         inputRange: [0, 1],
  20.         outputRange: ['0%', '100%']
  21.     });
  22.     useEffect(() => {
  23.         animationFun();
  24.         return () => { }
  25.     }, []);
  26.     return (
  27.         <>
  28.             <View style={styles.skeleton}>
  29.                 <View style={styles.skeletonLogo}>
  30.                     <Animated.View style={[styles.progress, { width: widthValue }]} />
  31.                 </View>
  32.                 <View style={styles.skeletonName}>
  33.                     <Animated.View style={[styles.progress, { width: widthValue }]} />
  34.                 </View>
  35.                 <View style={styles.skeletonBtn}>
  36.                     <Animated.View style={[styles.progress, { width: widthValue }]} />
  37.                 </View>
  38.             </View>
  39.         </>
  40.     )
  41. }
  42. const styles = StyleSheet.create({
  43.     skeleton: {
  44.         width: '100%',
  45.         height: pxToPd(200),
  46.         position: "relative",
  47.         backgroundColor: "#fff",
  48.         marginBottom: pxToPd(16)
  49.     },
  50.     skeletonLogo: {
  51.         height: pxToPd(155),
  52.         width: pxToPd(155),
  53.         backgroundColor: '#f2f2f2',
  54.         borderRadius: pxToPd(5),
  55.         overflow: 'hidden',
  56.         position: 'absolute',
  57.         left: '3.2%',
  58.         top: pxToPd(22)
  59.     },
  60.     skeletonName: {
  61.         height: pxToPd(60),
  62.         width: pxToPd(319),
  63.         backgroundColor: '#f2f2f2',
  64.         overflow: 'hidden',
  65.         position: 'absolute',
  66.         left: '29%',
  67.         top: pxToPd(70)
  68.     },
  69.     skeletonBtn: {
  70.         height: pxToPd(64),
  71.         width: pxToPd(152),
  72.         backgroundColor: '#f2f2f2',
  73.         borderRadius: pxToPd(32),
  74.         overflow: 'hidden',
  75.         position: 'absolute',
  76.         right: '3.2%',
  77.         top: pxToPd(68)
  78.     },
  79.     progress: {
  80.         height: '100%',
  81.         backgroundColor: 'rgba(255, 255, 255, 0.3)'
  82.     }
  83. })
  84. export default Skeleton
复制代码
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

正序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

风雨同行

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表