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

React 实现老虎机滚动动画效果实例

场景

React+css 实现老虎机滚筒动画效果

核心

核心在于,useReftransition transform ,ref操作dome 控制背景transform 向下移动,添加动画的平滑过度

效果图

在这里插入图片描述

在这里插入图片描述

操作

1.滚动图片(自定义)
在这里插入图片描述
2、结构

开始/暂停

const rollersRef = useRef([]);  
//开始/暂停
const [isAnimating, setIsAnimating] = useState(false);// 开始/停止动画useEffect(() => {let interval;if (isAnimating) {resetRollers(); // 立即执行一次interval = setInterval(() => resetRollers(), 500);}//isAnimating为false时清除定时滚动 clearIntervalreturn () => {clearInterval(interval);};}, [isAnimating]);//滚动控制,初始为回到原位
const resetRollers = () => {
//初始无动画 位置为0rollersRef.current.style.transition = "none";rollersRef.current.style.transform = `translateY(${0}px)`;//时间戳 10后 感动到-2000位置setTimeout(() => {//滚动的效果,添加2S 动画过渡rollersRef.current.style.transition = `transform ${2}s cubic-bezier(0.17, 0.84, 0.44,  1)`;rollersRef.current.style.transform = `translateY(-${2000}px)`;}, 10);//与上面的循环执行相对于}

div

<div className="image-roller"><divclassName="image-list"ref={rollersRef}>//可以固定也可以动态<div className="ywbg"></div><div className="ywbg"></div><div className="ywbg"></div><div className="ywbg"></div><div className="ywbg"></div><div className="ywbg"></div><div className="ywbg"></div><div className="ywbg"></div></div></div><div><button className={`btn ${isAnimating ? "btn-stop" : "btn-start"}`}onClick={() => setIsAnimating(!isAnimating)} >{isAnimating ? "停止滚动" : "开始滚动"}</button></div>

css

        .image-roller {position: relative;width: 200px;height: 100px;background: linear-gradient(to bottom, #444, #222);border-radius: 8px;color: white;font-size: 40px;font-weight: bold;text-align: center;line-height: 100px;overflow: hidden;box-shadow: 0 5px 15px rgba(0, 0, 0, 0.3);display: inline-block;margin: 5px;}.image-list {position: absolute;top: 0;left: 0;width: 100%;height: 100%;//   transition: transform 2s cubic-bezier(0.17, 0.84, 0.44, 1);}.ywbg {background: url(${YW}) no-repeat; //固定背景图,也可以动态赋值background-size: 100% 100%;width: 100%;height: 100%;}
      images: ["😀","🍎","🐶","🚗","😃","🍐","🐱","🚕","😄","🍊","🐭","🚙","😁","🍋","🐹","🚌","😆","🍌","🐰","🚎","😅","🍉","🦊","🏎","😂","🍇","🐻","🚓","🤣","🍓","🐼","🚑","😊","🍈","🐨","🚒","😇","🍒","🐯","🚐","🙂","🍑","🦁","🚚","🙃","🥭","🐮","🚛","😉","🍍","🐷","🚜","😌","🥥","🐸","🛴","😍","🥝","🐵","🚲","🥰","🍅","🐔","🛵",],

文章转载自:
http://calcitonin.tmizpp.cn
http://chiaus.tmizpp.cn
http://burstone.tmizpp.cn
http://charmian.tmizpp.cn
http://amblygonite.tmizpp.cn
http://addie.tmizpp.cn
http://chipmuck.tmizpp.cn
http://alumnal.tmizpp.cn
http://baloney.tmizpp.cn
http://audiogram.tmizpp.cn
http://allottee.tmizpp.cn
http://alcayde.tmizpp.cn
http://acd.tmizpp.cn
http://aspersory.tmizpp.cn
http://buckjumper.tmizpp.cn
http://ament.tmizpp.cn
http://allostery.tmizpp.cn
http://blinkered.tmizpp.cn
http://baseline.tmizpp.cn
http://argali.tmizpp.cn
http://arthrodesis.tmizpp.cn
http://admittedly.tmizpp.cn
http://batting.tmizpp.cn
http://aquiline.tmizpp.cn
http://astronavigation.tmizpp.cn
http://barrowman.tmizpp.cn
http://aboveboard.tmizpp.cn
http://acetose.tmizpp.cn
http://aforesaid.tmizpp.cn
http://acus.tmizpp.cn
http://www.dtcms.com/a/280802.html

相关文章:

  • AutojsPro 9.3.11 简单hook
  • Pixel Reasoner:通过好奇心驱动的强化学习激励像素空间推理
  • 简单2步配置CadenceSkill开发编辑器,支持关键字高亮
  • [AI-video] Web UI | Streamlit(py to web) | 应用配置config.toml
  • (李宏毅)deep learning(五)--learning rate
  • 从底层技术到产业落地:优秘企业智脑的 AI 革命路径解析
  • NAT的核心原理以及配置
  • CCF-GESP 等级考试 2025年6月认证Python四级真题解析
  • RDMA over RoCE V2设计2:系统框架设计考虑
  • Datawhale AI夏令营 机器学习2.1
  • 详解低速容错CAN(附与高速CAN对比表)
  • RabbitMQ第三章(企业级MQ应用方案)
  • 基于uniapp+vue3封装的一个日期选择组件
  • 【图像处理基石】什么是解析力?
  • A*算法详解
  • Transformer江湖录 第九章:大道归一 - 总结与展望
  • 鸿蒙和Android知识点
  • 微信小程序翻书效果
  • 面试遇到的问题
  • 服务器上PHP环境安装与更新版本和扩展(安装PHP、Nginx、Redis、Swoole和OPcache)
  • 如何解决服务器频繁重启的问题?
  • Linux修改ssh默认端口,禁止root登录,禁止密码登录并同时开启公钥认证
  • session与cookie的区别
  • 55 个热门网络面试问题及答案
  • KMP (Knuth-Morris-Pratt) 算法详解
  • UE5多人MOBA+GAS 23、制作一个地面轰炸的技能
  • NE综合实验3:链路聚合、VLAN与Trunk、STP、DHCP、OSPF及PPP整合部署
  • Redis 数据持久化
  • 渲染设计图的空间革命:可视化技术如何重塑设计决策
  • WPF中ListView控件详解