当前位置: 首页 > news >正文

04 react css上下浮动动画效果

react css上下浮动动画效果

  • html原生实现上下浮动
  • react 实现上下浮动
    • 思路分析
    • 实现步骤
      • 1.引入useRef
      • 2.在所属组件内定义—个变量
      • 3.在按钮上添加事件
      • 4.定义点击事件
        • 对window.scrollTo()进行了解:
        • 在react中实现
        • 效果图:

html原生实现上下浮动

我们有一个导向箭头,需要微微浮动提示用户具体操作导向,用css去写,实现方法如下:

  • 首先创建一个dom元素,controller是包裹导向箭头的容器,img是导向箭头图片
  • css中创建动画,动画的快慢速度可以通过dom元素高度与animation中的秒数去调整
    完整代码:
.controller {position: absolute;width: 24px;height: 12px;z-index: 100;bottom: 20px;left: 50%;margin-left: -12px;-webkit-animation: bounce-down 1.6s linear infinite;animation: bounce-down 1.6s linear infinite;img {position: absolute;}}@-webkit-keyframes bounce-down {25% {-webkit-transform: translateY(-4px);}50%, 100% {-webkit-transform: translateY(0);}75% {-webkit-transform: translateY(4px);}
}@keyframes bounce-down {25% {transform: translateY(-4px);}50%, 100% {transform: translateY(0);}75% {transform: translateY(4px);}
}

react 实现上下浮动

思路分析

React点击事件实现滚动到指定页面位置,在react框架中通过函数组件的钩子函数useRef()

实现步骤

1.引入useRef

import React, { useEffect, useRef } from 'react';

2.在所属组件内定义—个变量

const downBtnRef = useRef(null)

3.在按钮上添加事件

<div className={styles.iconBox} ref={downBtnRef} onClick={toDown}><DownOutlined />
</div>

4.定义点击事件

预期效果:平滑滚动

const toDown = () => {//在需要操作某个ref时候,通过downBtnRef.current,并且在整个项目中ref名唯一。if (downBtnRef.current) {console.log('downBtnRef.current', downBtnRef.current);window.scrollTo(0, downBtnRef.current.offsetHeight || 0)}}

实际效果:可以实现向下滑动一个屏幕的高度,但是我们需要平滑滚动

对window.scrollTo()进行了解:

  • 语法一:window.scrollTop(x,y) //x横坐标 y纵坐标
  • 例:window.scrollTop(0,1000)
  • 语法二:window.scrollTop(options)
  • 例:代码如下
 window.scrollTo({top: -560,left: 0,behavior: "smooth"});

在react中实现

点击事件的完整代码:

const toDown = () => {//在react中需要操作某个ref时候,通过downBtnRef.current,并且downBtnRef在整个项目中ref名唯一。if (downBtnRef.current) {console.log('downBtnRef.current', downBtnRef.current);window.scrollTo({top: downBtnRef.current.offsetTop,behavior: "smooth"});}}

效果图:

在这里插入图片描述

http://www.lryc.cn/news/1968.html

相关文章:

  • 关于线程池
  • 【GPLT 二阶题目集】L2-004 这是二叉搜索树吗?
  • Python Numpy基础教程
  • 常见HTTP请求错误码大全
  • 重保期间如何「快速」构建内容安全治理体系?
  • 用Qt开发的ffmpeg流媒体播放器,支持截图、录像,支持音视频播放,支持本地文件播放、网络流播放
  • 第七节 平台设备驱动
  • 代理模式详解
  • 根据报告20%的白领在一年内做过副业,你有做副业吗?
  • 第二十三周周报
  • 2023年Q1业绩增长背后,迪士尼亟待扭转流媒体亏损困局
  • LKWA靶场通关和源码分析
  • logcpp demo
  • 平价款的血糖血压监测工具,用它养成健康生活习惯,dido F50S Pro上手
  • 算法训练营 day42 动态规划 理论基础 斐波那契数 爬楼梯 使用最小花费爬楼梯
  • MySQL8 创建用户,设置修改密码,授权
  • MySQL —— 内置函数
  • Mybatis框架(全部基础知识)
  • pixhawk2.4.8使用调试记录—APM固件
  • 终于进了字节,记录一下我作为一名测试员磕磕碰碰的三个月找工作经历...
  • 基于PYTHON django四川旅游景点推荐系统
  • MySql服务多版本之间的切换
  • 嵌入式开发:通过嵌入式虚
  • 广州穗雅医院杨济安:了解症状表现 有效防治口腔黏膜下纤维化
  • [数据分析] 数据指标体系搭建
  • Dubbo 源码分析 – 集群容错之 Cluster
  • Spring学习20230208-09
  • tomcat10部署报错WebStatFilter cannot be cast to jakarta.servlet.Filter
  • Linux修改文件时间或创建新文件:touch
  • 原生微信小程序按需引入vant