ReactJS 教程

ReactJS - 主页 ReactJS - 简介 ReactJS - 路线图 ReactJS - 安装 ReactJS - 功能 ReactJS - 优势和缺点 ReactJS - 架构 ReactJS - 创建 React 应用程序 ReactJS - JSX ReactJS - 组件 ReactJS - 嵌套组件 ReactJS - 使用组件 ReactJS - 集合组件 ReactJS - 样式 ReactJS - 属性 (props) ReactJS - 使用属性创建组件 ReactJS - props 验证 ReactJS - 构造函数 ReactJS - 组件生命周期 ReactJS - 事件管理 ReactJS - 创建事件感知组件 ReactJS - Expense Manager 事件 ReactJS - 状态管理 ReactJS - 状态管理 API ReactJS - 无状态组件 ReactJS - Hooks 进行状态管理 ReactJS - Hooks 的组件生命周期 ReactJS - 布局组件 ReactJS - 分页 ReactJS - Material UI ReactJS - Http 客户端编程 ReactJS - 表单编程 ReactJS - 受控组件 ReactJS - 非受控组件 ReactJS - Formik ReactJS - 条件渲染 ReactJS - 列表 ReactJS - Key 键 ReactJS - 路由 ReactJS - Redux ReactJS - 动画 ReactJS - Bootstrap ReactJS - Map ReactJS - 表格 ReactJS - 使用 Flux 管理状态 ReactJS - 测试 ReactJS - CLI 命令 ReactJS - 构建和部署 ReactJS - 示例

Hooks

ReactJS - Hooks 简介 ReactJS - 使用 useState ReactJS - 使用 useEffect ReactJS - 使用 useContext ReactJS - 使用 useRef ReactJS - 使用 useReducer ReactJS - 使用 useCallback ReactJS - 使用 useMemo ReactJS - 自定义 Hooks

ReactJS 高级

ReactJS - 可访问性 ReactJS - 代码拆分 ReactJS - 上下文 ReactJS - 错误边界 ReactJS - 转发 Refs ReactJS - 片段 ReactJS - 高阶组件 ReactJS - 与其他库集成 ReactJS - 优化性能 ReactJS - Profiler API ReactJS - Portals ReactJS - 不使用 ES6 ECMAScript ReactJS - 不使用 JSX 的 React ReactJS - Reconciliation ReactJS - Refs 和 DOM ReactJS - 渲染道具 ReactJS - 静态类型检查 ReactJS - 严格模式 ReactJS - Web 组件

其他概念

ReactJS - 日期选择器 ReactJS - Helmet ReactJS - 内联样式 ReactJS - PropTypes ReactJS - BrowserRouter ReactJS - DOM ReactJS - 轮播 ReactJS - 图标 ReactJS - 表单组件 ReactJS - 参考 API

ReactJS 有用资源

ReactJS - 快速指南 ReactJS - 备忘录 Axios - 备忘录 ReactJS - 有用资源 ReactJS - 讨论


ReactJS - TransitionEvent 处理程序

TransitionEvent 处理程序方法类似于计算机程序中的特殊侦探,用于监控网页上事物外观(如颜色或大小)的变化。

假设我们在网站上有一个按钮,单击时颜色会轻易改变。TransitionEvent 处理程序方法可识别颜色变化发生的时间,并可用于在变化完成时执行操作。

简单来说,TransitionEvent 处理程序方法可帮助我们的网站在视觉效果出现时做出反应。

语法

<div
   onTransitionEnd={e => console.log('onTransitionEnd')}
/>

参数

e − 这是一个 React 事件对象,我们可以将其与 TransitionEvent 属性一起使用。

TransitionEvent 的类型

有四种主要的过渡事件需要注意 −

Sr.No 类型 &描述
1 transitioncancel

当动画或过渡在完成之前停止或取消时,会发生此事件。

2 transitionend

当动画或过渡成功完成时,会发生此事件。

3 transitionrun

当动画或过渡准备启动但实际上可能尚未开始移动时,会发生此事件。

4 transitionstart

当动画或过渡开始进行更改时,会发生此事件。

属性的TransitionEvent

有一些转换事件属性需要注意 −

Sr.No 属性 &描述
1 elapsedTime

此属性告诉我们自过渡或动画开始以来已经过了多少时间。

2 propertyName

此属性指示在过渡或动画期间发生变化的 CSS 属性的名称。

3 pseudoElement

它有助于识别动画是在元素上还是在使用 CSS 添加的内容上。

示例

示例 − CSS 过渡应用

为了展示 TransitionEvent 处理程序方法的概念,我们可以创建一个组件,该组件会改变 CSS 过渡,并使用 transitionend 事件来标识过渡何时完成。因此,我们将创建一个按钮,该按钮会随着过渡而改变其背景颜色,并在过渡结束时显示一条消息。代码如下 −

import React, { useState } from "react";

function App() {
   const [isTransition, setTransition] = useState(false);
   const [message, setMessage] = useState("");   
   const handleButtonClick = () => {
      setTransition(true);
      setMessage("Transition...");
      
      // 延迟然后重置过渡状态
      setTimeout(() => {
         setTransition(false);
         setMessage("Transition Complete");
      }, 1000);
   };   
   return (
      <div className="App">
         <button
            className={`transition-button ${
               isTransition ? "Transition" : ""
            }`}
            onClick={handleButtonClick}
         >
            Click me to start the transition
         </button>
         <div className="message">{message}</div>
      </div>
   );
}

export default App;

输出

transition

此示例使用基本过渡来响应按钮单击,以及 TransitionEvent 概念。当我们单击按钮时,过渡开始,消息将通知我们何时完成。

示例 − 使用 TransitionEvent 的简单动画

此应用程序在单击时显示 div 元素的不透明度并记录过渡持续时间。当我们单击"动画"按钮时,div 的不透明度将在 1 秒内从 1(完全不透明)变为 0(完全透明)。 onTransitionEnd 处理程序记录完成过渡所花费的时间。

import React, { useState } from "react";

function App() {
   const [isAnimating, setIsAnimating] = useState(false);   
   const handleClick = () => {
      setIsAnimating(true);
   };   
   const handleTransitionEnd = (e) => {
      console.log(`Transition completed: ${e.elapsedTime} seconds`);
      setIsAnimating(false);
   };   
   return (
      <div>
         <button onClick={handleClick}>Animate</button>
         <div
            style={{ opacity: isAnimating ? 0 : 1 }}
            transition="opacity 1s ease"
            onTransitionEnd={handleTransitionEnd}
         >
            Click me to animate!
         </div>
      </div>
   );
}

export default App;

输出

animate

示例 − 带展开和折叠动画的手风琴

此应用显示一个手风琴,其内容面板在单击时展开和折叠。单击面板标题可在 0.5 秒内平滑展开或折叠其内容。onTransitionEnd 处理函数记录已完成转换的面板的标题。

import React, { useState } from "react";

const panels = [
   { title: "Panel 1", content: "This is the content of panel 1." },
   { title: "Panel 2", content: "This is the content of panel 2." },
   { title: "Panel 3", content: "This is the content of panel 3." },
];
function App() {
   const [activePanelIndex, setActivePanelIndex] = useState(null);   
   const handleClick = (index) => {
      setActivePanelIndex(index === activePanelIndex ? null : index);
   };   
   const handleTransitionEnd = (e) => {
      console.log(
         `Panel transitioned: ${e.target.parentNode.querySelector(".panel-title").textContent}`
      );
   };   
   return (
      <div>
         {panels.map((panel, index) => (
            <div key={index} className="panel">
               <h3
                  className="panel-title"
                  onClick={() => handleClick(index)}
               >
                  {panel.title}
               </h3>
               <div
                  className="panel-content"
                  style={{ maxHeight: activePanelIndex === index ? "500px" : "0" }}
                  transition="max-height 0.5s ease"
                  onTransitionEnd={handleTransitionEnd}
               >
                  {panel.content}
               </div>
            </div>
         ))}
      </div>
   );
}

export default App;

输出

panels content

摘要

TransitionEvent 处理函数是一种 Web 开发工具,用于识别和响应网页上的过渡或动画。它就像一个可以对某些 CSS 过渡事件做出反应的观察者。

这些方法允许开发人员向这些过渡事件添加自定义操作或响应,从而允许开发人员创建交互式动态 Web 应用程序。

reactjs_reference_api.html