用React加CSS3实现微信拆红包动画

微信红包曾经引爆过一系列的营销热潮,相信大家对于这种红包形式并不陌生,这里本着娱乐至上的精神用React简单地实现了拆红包的动画效果,供大家一起交流学习

项目源码地址:https://github.com/lionrock/H...

用CSS3绘制红包

.redpack {
  height: 450px;
  background: #A5423A;
  width: 300px;
  left: 0;
  top: 0;
  border-radius: 10px;
  margin: 0 auto;
}
.topcontent {
    height: 300px;
    border: 1px solid #BD503A;
    background-color: #BD503A;
    border-radius: 10px 10px 50% 50% / 10px 10px 15% 15%;
    box-shadow: 0px 4px 0px -1px rgba(0,0,0,0.2);
}
#redpack-open {
    width: 100px;
    height: 100px;
    border: 1px solid #FFA73A;
    background-color: #FFA73A;
    border-radius: 50%;
    color: #fff;
    font-size: 20px;
    display: inline-block;
    margin-top: -50px;
    box-shadow: 0px 4px 0px 0px rgba(0, 0, 0, 0.2);
}
<div class='redpack'>
  <!--  红包的顶部盖子 -->
  <div class="topcontent"></div>
  <!-- 拆红包的按钮 -->
  <div id="redpack-open"></div>
</div>

在线Demo演示: https://jsbin.com/sawaxid/edi...
图片描述

用React来区分不同的状态的转换

用React.js来实现的话,主要通过判断state来控制红包现在是等待拆开还是已经拆开过,具体的代码如下

import React from 'react';

class ReadPacket extends React.Component {
    constructor(props) {
        super(props);
        this.state = {
            animation: false,
            status: 0  // 0: 等待拆开 1: 拆开后
        };
    }

    render() {
        var bonus = this.props.thanks ? 0 : parseFloat(this.props.surveyInfo.bonus);

        if(this.state.status == 0) {
            return (
                <div className='redpack-container' id='redpack-container'>
                    <div className='redpack'>
                        <div className='topcontent'>
                            <div id='redpack-opened'>
                              <div className='redpack-avatar'>
                                <img src='http://placehold.it/80x80' alt='头像' width='80' height='80'/>
                              </div>
                            </div>
                            <h2 style={{marginTop: 80, color: 'white'}}>奖励</h2>
                            <span className='redpack-text'>点击下方按钮领取红包</span>
                            <div className='redpack-description white-text'>恭喜发财 大吉大利</div>
                        </div>

                        <div id='redpack-open' className={this.state.animation ? 'rotate' : ''}
                             onClick={this.openRedPacket.bind(this)}
                        >
                            <span>拆红包</span>
                        </div>
                    </div>
                </div>
            );
        } else if (bonus == 0) {
            // 谢谢参与
            return (
                <div className='redpack-container' id='redpack-container'>
                    <div className='redpack'>
                        <div className='topcontent-open'>
                            <div className='redpack-avatar'>
                                <span id='close'></span>
                            </div>
                            <h1 style={{marginTop: 180, color: 'white'}}> 谢谢参与 </h1>
                            <span className='redpack-text'>多多参与的奖励的机会更多哦</span>
                            <br/>
                            <a onClick={this._toWallet.bind(this)}
                               style={{cursor:'pointer',textDecoration: 'underline', color: 'white'}}>
                                去我的账户查看
                            </a>
                        </div>

                        <div id='redpack-opened'>
                          <div className='redpack-avatar'>
                            <img src='http://placehold.it/80x80' alt='头像' width='80' height='80'/>
                          </div>
                        </div>
                    </div>
                </div>
            );
        } else {
            // 显示奖励金额
            return (
                <div className='redpack-container' id='redpack-container'>
                    <div className='redpack'>
                        <div className='topcontent-open'>
                            <div className='redpack-avatar'>
                                <span id='close'></span>
                            </div>
                            <h1 className='white-text' style={{marginTop: 180}}> {bonus.toFixed(2)} </h1>
                            <span className='redpack-text'>奖励积分已经存入您的账户</span>
                            <a className='btn-flat white-text' onClick={this._toWallet.bind(this)}
                               style={{textDecoration: 'underline'}}>
                                去我的账户查看积分
                            </a>
                        </div>

                        <div id='redpack-opened'>
                          <div className='redpack-avatar'>
                            <img src='http://placehold.it/80x80' alt='头像' width='80' height='80'/>
                          </div>
                        </div>
                    </div>
                </div>
            );
        }
    }

    stopAnimation() {
        this.setState({animation: false});
    }

    showResult() {
        this.setState({status: 1});
    }

    openRedPacket() {
        this.setState({animation: true});
        setTimeout(this.stopAnimation.bind(this), 3000);
        setTimeout(this.showResult.bind(this), 4000);
    }

    _toWallet() {
      // 跳转到钱包
      window.location.hash = '/wallet';
    }
}

export default ReadPacket;

转载请注明原文链接:http://xunli.xyz/2016/04/02/r...

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 在 React Native 中实现 App ID 或微信用户登录可以使用第三方登录库来实现。 首先,你需要在 App ID 或微信开放平台上注册你的应用,然后获取到应用的 appId 和 appSecret。 然后,你可以使用 react-native-app-auth 库来实现 OAuth2.0 授权流程。这个库支持许多第三方登录平台,包括 App ID 和微信。 你可以使用以下步骤来实现登录: 1. 安装 react-native-app-auth 库: ``` yarn add react-native-app-auth ``` 2. 在你的组件中引入库: ``` import { authorize, refresh } from 'react-native-app-auth'; ``` 3. 在你的组件中定义登录配置对象,包括应用的 appId 和 appSecret,以及登录所需的其他信息,如 redirectUrl 等: ``` const config = { clientId: 'YOUR_APP_ID', clientSecret: 'YOUR_APP_SECRET', redirectUrl: 'YOUR_REDIRECT_URL', serviceConfiguration: { authorizationEndpoint: 'https://open.weixin.qq.com/connect/oauth2/authorize', tokenEndpoint: 'https://api.weixin.qq.com/sns/oauth2/access_token', revocationEndpoint: 'https://api.weixin.qq.com/sns/oauth2/refresh_token', }, }; ``` 4. 调用 authorize 方法来开始登录流程: ``` const result = await authorize(config); ``` 登录成功后,result 对象中会包含登录后获取到的 accessToken 和其他信息。你可以使用这些信息来调用 API 获取用户信息等。 注意 ### 回答2: 使用React Native实现APP ID或微信用户登录可以通过以下步骤进行: 1. 集成第三方登录库:React Native提供了许多第三方库,可以实现APP ID或微信用户登录。可以在项目中使用npm或yarn来安装适用于React Native的第三方登录库,如"react-native-login-with"库。 2. 配置第三方登录:安装完相应的库后,需要根据第三方登录提供的开发者文档进行配置。对于APP ID登录功能,通常需要在项目中配置应用的APP ID和相应的密钥,以及其他需要的参数。对于微信用户登录,需要在开放平台注册应用,获取App ID和App Secret,并配置回调URL等。 3. 创建登录界面:创建一个用于用户登录的界面,可以使用React Native提供的组件来实现。界面通常包含表单、按钮等元素,用户可以输入用户名和密码进行登录。 4. 处理登录逻辑:在登录界面中,使用第三方登录库提供的API进行登录逻辑的处理。对于APP ID登录,需要调用相应的登录API并传递用户输入的用户名和密码。对于微信用户登录,需要调用微信提供的API进行用户授权,并获取到用户的AccessToken等信息。 5. 处理登录结果:根据登录逻辑返回的结果,可以根据需求进行处理。例如,可以根据登录结果跳转到不同的页面,或者在登录失败时给出错误提示。 6. 存储登录状态:登录成功后,可以将用户的登录状态保存在本地,以便下次打开应用时可以自动登录。可以使用React Native提供的AsyncStorage等方法来实现数据的本地存储。 以上就是使用React Native实现APP ID或微信用户登录的大致步骤。根据具体需求和第三方登录库的文档,可能还需要做其他的相关配置和处理。 ### 回答3: 使用React Native实现APPID或微信用户登录,可以通过第三方库react-native-wechat来完成。 首先,需要在自己的React Native项目中安装react-native-wechat库。可以使用npm或yarn来进行安装: ``` npm install react-native-wechat --save ``` 然后,在项目的入口文件中导入react-native-wechat库,并初始化微信SDK: ```javascript import WeChat from 'react-native-wechat'; // 初始化微信SDK WeChat.registerApp('YOUR_WECHAT_APPID'); ``` 在登录按钮的点击事件中,调用微信登录的方法并处理登录结果: ```javascript import WeChat from 'react-native-wechat'; // 微信登录 const handleWeChatLogin = async () => { try { // 检查微信是否可用 const isWeChatInstalled = await WeChat.isWXAppInstalled(); if (!isWeChatInstalled) { console.log('请安装微信'); return; } // 发起微信登录 const result = await WeChat.sendAuthRequest('snsapi_userinfo'); if (result && result.state === 'success') { const code = result.code; // 用于换取access_token的临时code // 处理登录逻辑,向服务器传递code进行后续认证操作 // ... } else { console.log('用户取消了登录'); } } catch (error) { console.log('微信登录失败:', error); } }; ``` 以上代码演示了微信登录的基本流程,可以根据自己的需求添相应的业务逻辑。需要注意的是,React Native中实现微信登录需要在微信开放平台申请相应的APPID,并进行配置。 通过以上的操作,就可以在React Native应用中实现APPID或微信用户登录了。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值