首页 > 其他分享 >react点击滑块验证

react点击滑块验证

时间:2023-04-26 13:45:24浏览次数:40  
标签:const 滑块 1px react width 点击 useState 00de76 border

 

css

.wrap-num {
  width: 300px;
}
@keyframes defaultWave {
  0% {
    transform: scale(1);
  }
  20% {
    transform: scale(1.23);
  }
  40% {
    transform: scale(1);
  }
  100% {
    transform: scale(1);
  }
}
// 旋转
@keyframes loadingWave {
  0% {
    transform: rotate(0deg);
  }
  100% {
    transform: rotate(1turn);
  }
}
@keyframes successRectBottom {
  0% {
    width: 0;
    border-top: 1px solid #00de76;
    border-bottom: 1px solid #00de76;
  }

  100% {
    width: 100%;
    border-top: 1px solid #00de76;
    border-bottom: 1px solid #00de76;
  }
}
.verify-success {
  animation: var(--succesbottom);
  width: 100%;
  height: 100%;
  position: absolute;
  left: 0;
  top: 0;
}
.verify-wrap {
  position: relative;
  background-color: white;
  display: flex;
  padding: 4px;
  border-radius: 2px;
  border: var(--border);
  //   阴影
    &:hover {
      border: 1px solid #a0f3cc;
      box-shadow: 0 0 5px 1px #a0f3cc;
    }
  .out-silder-circle {
    width: 38px;
    height: 38px;
    position: absolute;
    z-index: 1;
    border-radius: 50px;
    animation: var(--aleftx);
    background: var(--background);
  }
  .verify-left {
    overflow: hidden;
    margin-right: 20px;
    width: 36px;
    height: 36px;
    border-radius: 50px;
    display: flex;
    align-items: center;
    justify-content: center;
    background-color: rgba(195, 239, 232, 0.9);
    .left-conter {
      animation: var(--aleft);
      position: absolute;
      z-index: 1;
      display: flex;
      align-items: center;
      justify-content: center;
      width: 28px;
      height: 28px;
      background-image: linear-gradient(0deg, #3a9afa, #00de76);
      border-radius: 50px;
    }
  }
  .verify-right {
    display: flex;
    align-items: center;
    flex: 1;
    color: var(--textcolor);
  }
}

子组件
import React, { CSSProperties, useState } from 'react';
import './index.less';
export default function VerifyPage(props: any) {
  const { resultData, setResultData } = props;

  const data = ['点击此智能验证后在发送验证码', '智能检测中', '验证成功'];
  //   const [resultData, setResultData] = useState(0); //data下标
  const [aleftx, setAleftx] = useState<string>(''); // 智能检测中旋转动画
  const [aleft, setAleft] = useState<string>('defaultWave 1.5s ease infinite'); //初次动画
  const [background, setBackground] = useState<string>('transparent'); //旋转按钮背景颜色
  const [borderv, setBorder] = useState<string>('1px solid rgb(212, 205, 205)'); //边框颜色
  const [succesbottom, setSuccesbottom] = useState<string>(''); // 上下边框动画效果
  const [textcolor, setTextcolor] = useState<string>(''); // 文字颜色
  const handleVerify = () => {
    setResultData(1);
    setAleftx('loadingWave 1s infinite');
    setBackground(`linear-gradient(
      rgba(0, 222, 118, 0.8),
      rgba(0, 222, 118, 0.4),
      rgba(0, 222, 118, 0.3),
      rgba(0, 222, 118, 0.2)
    )`);
    setAleft('');
    const timer = setTimeout(() => {
      setResultData(2);
      setSuccesbottom('successRectBottom 1.5s');
      setAleftx('');
      setBackground('');
      setAleft('');
      clearTimeout(timer);
      setTextcolor('#00de76');
      const valuetime = setTimeout(() => {
        setBorder('1px solid #00de76'); // 外层边框颜色
        clearTimeout(valuetime);
      }, 1000);
    }, 2000);
  };
  return (
    <div
      className="verify-wrap"
      style={{ '--aleft': aleft, '--border': borderv } as CSSProperties}
      onClick={handleVerify}
    >
      <div
        className="verify-success"
        style={{ '--succesbottom': succesbottom } as CSSProperties}
      ></div>
      <div className="verify-left">
        <div
          className="out-silder-circle"
          style={{ '--aleftx': aleftx, '--background': background } as CSSProperties}
        ></div>
        <div className="left-conter" style={{ '--aleft': aleft } as CSSProperties}>
          <svg width="12px" height="14px" viewBox="0 0 200 255">
            <g id="Page3" stroke="#eeeeee" strokeWidth="1" fill="none" fillRule="evenodd">
              <g id="Group3" fill="#ffffff" fillRule="nonzero">
                <path
                  d="M192.215987,31.5402031 C190.026012,31.619176 187.868479,31.6497744 185.757709,31.6497744 L185.748648,31.6497744 C130.221833,31.6497744 105.760339,6.2755772 105.556627,6.05672609 L100.008184,0 L94.4518488,6.05672609 C94.2095573,6.32191195 68.3980713,33.5987437 7.78430533,31.5402029 L2.8561292e-07,31.2753086 L0,146.302981 C0,176.418758 10.0841737,220.345176 97.2848165,253.952079 L100.000584,255 L102.715183,253.952079 C189.915826,220.345176 200,176.418467 200,146.302981 L200,31.2753086 L192.215987,31.5402031 Z"
                  id="Shape3"
                ></path>
              </g>
            </g>
          </svg>
        </div>
      </div>
      <div className="verify-right" style={{ '--textcolor': textcolor } as CSSProperties}>
        {data[resultData]}
      </div>
    </div>
  );
}

父组件
import React, { useState } from 'react'
import './index.less'
import VerifyPage from './verify-page'
export default function ceshi() {
  const [resultData, setResultData] = useState(0); //data下标
  console.log(resultData);
  
  return (
    <div className='wrap-num'>
      <VerifyPage resultData={resultData} setResultData={setResultData}></VerifyPage>
    </div>
  )
}

  

标签:const,滑块,1px,react,width,点击,useState,00de76,border
From: https://www.cnblogs.com/zjxzhj/p/17355645.html

相关文章

  • 重拾react杂记
     import{param,setParam}from'React'组件的名称必须以大写字母开头 <TableOfContents/>每个js文件只有一个exportdefaultfunctionxx(){}你的标签和return关键字不在同一行,则必须把它包裹在一对括号中, 注意:无论是子组件还是父组件,他们的名字都是大写字母开头,......
  • 【FAQ】关于JavaScript版本的华为地图服务Map的点击事件与Marker的点击事件存在冲突的
    一. 问题描述创建地图对象,并添加marker标记,对map和marker均添加了点击事件;<body><script>functioninitMap(){//创建地图对象constmap=newHWMapJsSDK.HWMap(document.getElementById('map'),{center:{lat:39.36322,lng:......
  • React和Vue的区别
    React和Vue是两个非常流行的JavaScript框架,用于构建前端Web应用程序。以下是它们之间的一些区别:模板语法:Vue使用模板语法,它允许您在HTML模板中嵌入Vue代码,类似于AngularJS。React使用JSX语法,它允许您将JavaScript代码嵌入HTML模板中。数据绑定:Vue使用双向数据绑定,这意味着当......
  • 使用Vue实现点击事件变颜色并且显示选中文字
    首先需要引入Vue.js!!!!!   直接上代码<!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"><title>Title</title><scriptsrc="../static/vue.js"></script><st......
  • 使用Qt Designer生成的两个UI文件,实现在主界面中点击后弹出另一个界面
    QtDesigner生成的ui代码policy.py#Formimplementationgeneratedfromreadinguifile'policy.ui'##Createdby:PyQt6UIcodegenerator6.4.2##WARNING:Anymanualchangesmadetothisfilewillbelostwhenpyuic6is#runagain.Donotedit......
  • react antd 函数式弹窗案例
     1.弹窗函数exportconstcheckReviewTaskTipModal=async(checkResult:{status:boolean;mseeage:string;})=>{returnnewPromise((r,j)=>{constcancelFc=()=>{mConfirm?.destroy();};constmConfirm=Modal.confi......
  • [REACT_DOC]-Quick Start
    目录QuickStart创建以及嵌套组件用JSX书写标记(markup)添加样式展示数据条件渲染列表渲染事件响应更新屏幕使用Hooks在组件之间共享数据QuickStart概览:如何创建以及嵌套组件如何添加markup和样式如何展示数据如何条件渲染,如何渲染列表如何响应事件并更新渲染如何......
  • 使用Ref还是Reactive?
    我喜欢Vue3的CompositionAPI,它提供了两种方法来为Vue组件添加响应式状态:ref和reactive。当你使用ref时到处使用.value是很麻烦的,但当你用reactive创建的响应式对象进行重构时,也很容易丢失响应性。在这篇文章中,我将阐释你如何来选择reactive以及ref。一句话总结:默认情况下使用......
  • React Native 桥接原生模块
    原生模块简介有时候一个RN应用需要访问一个原生平台的API比如相机,但是,默认情况下JavaScript是无法访问原生API的。原生模块系统暴露了一些Java类的实例对象给JavaScript,这样就可以允许开发者在JS代码中执行一些特定的原生代码。简单来说,桥接原生就是为了实现reac......
  • React、Ant Design 5.0 构建通用后台管理系统 - 接口服务环境搭建
    目录项目初始化项目结构package.jsontsconfig.jsonnodemon.jsonindex.tssrc/server.ts运行项目初始化mkdirgeneral-admin-system-servercdgeneral-admin-system-servernpminit-ynpminstalltypescriptts-node@types/nodenodemon@swc/core@swc/helpersregenerator-......