“拿来主义”学习无限滚动动画(附源码)

欢迎关注:xssy5431 小拾岁月
参考链接:https://mp.weixin.qq.com/s/xVTCwR1ZSn5goWmc2yimVA


动画效果

动画效果


需求分析

  需求中涉及无线滚动,说明需要使用 animation 动画。另外,为了方便用户点击操作,需要给滚动对象添加鼠标 移入移出 操作。

  其中,既然是 无限滚动,那么在所有元素滚动结束后,如何做动画衔接就变得尤为重要。

  无限滚动效果中的 动画延迟 ,需要根据实际情况做调整,以保证动画的连贯性。


页面布局

<section class="container"><div class="item-group" style="--delay:-1"><div class="item-box"><div class="img"><img src="./img/A1.jpeg" alt=""></div><div class="desc"><span class="name">张良 (第1名)</span><p class="lines">君子不立危墙之下</p></div></div><div class="follow-btn" >关注</div></div><div class="item-group" style="--delay:0">此处省略部分代码</div><div class="item-group" style="--delay:2">此处省略部分代码</div><div class="item-group" style="--delay:2">此处省略部分代码</div></section>

注意

  • 页面布局中,采用 数组 的格式布局多个元素,保持页面风格统一。
  • 其中 css样式 中声明了变量 –daplay ,但是其中的值不同,这个是关键。
  • 特别注意:元素的动画延迟时间成 等差数列,但是最后一个元素的延迟时间,与前一个元素相同,这是为了保持 动画的连贯

CSS样式(SCSS版)

* {margin: 0;padding: 0;font-size: 12px;list-style: none;text-decoration: none;
}.container {box-sizing: border-box;width: 100%;min-height: 100vh;padding: 0 5em;display: flex;align-items: center;justify-content: center;margin: 0 auto;background: linear-gradient(to bottom, #bea2e7 0%, #86b7e7 100%);line-height: 24px;&.no-animation {.item-group {animation-play-state: paused;}}.item-group {background: #fff;max-width: 460px;display: flex;justify-content: space-between;align-items: center;border-radius: 100px 20px 20px 100px;padding: 6px 20px 6px 6px;animation: animate 15s linear infinite;animation-delay: calc(3s * var(--delay));position: absolute;opacity: 0;&:last-child {animation-delay: calc(-3s * var(--delay));}.item-box {display: flex;align-items: center;.img {width: 90px;height: 90px;img {width: 100%;height: 100%;border-radius: 50%;box-shadow: 0 0 10px #888888;}}.desc {margin-left: 20px;.name {font-size: 18px;font-weight: bold;}.lines{font-size: 14px;color: #333;}}}.follow-btn {font-size: 14px;letter-spacing: 4px;margin-left: 15px;border-radius: 16px;font-weight: bold;padding: 5px 26px;color: #fff;background: linear-gradient(to bottom, #bea2e7 0%, #86b7e7 100%);}.del-follow-btn{font-size: 14px;letter-spacing: 4px;margin-left: 15px;border-radius: 16px;font-weight: bold;padding: 5px 26px;color: #fff;background: linear-gradient(to bottom, #1f1f1f 0%, #a8a8a8 100%);}}
}@keyframes animate {0% {opacity: 0;transform: translateY(100%) scale(0.5);}5%,20% {opacity: 0.4;transform: translateY(100%) scale(0.7);}25%,40% {opacity: 1;z-index: 1;pointer-events: auto;transform: translateY(0%) scale(1);}45%,60% {opacity: 0.4;transform: translateY(-100%) scale(0.7);}65%,100% {opacity: 0;transform: translateY(-100%) scale(0.5);}
}

注意事项

  • 此处 css 样式,为了清晰的对照页面结构,我采用了 scss 编写。
  • 开发时,可安装 Live Sass Compilerscss 实时编译为 css ,我们在引入时,依然采用 css 文件。

关键代码

  .item-group {background: #fff;max-width: 460px;display: flex;justify-content: space-between;align-items: center;border-radius: 100px 20px 20px 100px;padding: 6px 20px 6px 6px;animation: animate 15s linear infinite;animation-delay: calc(3s * var(--delay));position: absolute;opacity: 0;&:last-child {animation-delay: calc(-3s * var(--delay));}}

  其中,animation: animate 15s linear infinite; 定义了无限循环动画, animation-delay: calc(3s * var(--delay)); 定义了动画的延迟时间,这个是动画中的重点,对最后一个滚动对象,做了 animation-delay: calc(3s * var(--delay)); 处理,使得页面动画连贯。

动画暂停

const containerBox = document.querySelector('.container');
const itemGroup = document.querySelectorAll(".item-group")
for (let i = 0; i < itemGroup.length; i++) {itemGroup[i].addEventListener("mouseover",()=>{containerBox.classList.add("no-animation" )})itemGroup[i].addEventListener("mouseout",()=>{containerBox.classList.remove("no-animation" )})
}

  其实,这段代码就做了一件事情:鼠标移入 停止动画


温馨提示

更多博文,请关注:xssy5431 小拾岁月,回复 “循环滚动”,获取源码

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/35114.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

感谢我的辅导员—敬爱的罗老师

前言&#xff1a;快毕业了&#xff0c;想在毕业季感谢给予我帮助的老师&#xff0c;我的辅导员-罗老师是我最想感谢的大学老师。我不知道应该以什么样的方式去表达罗老师对我大学阶段的帮助&#xff0c;如果是直接发邮件&#xff0c;微信信息留言&#xff0c;可能在之后我和老师…

MySQL索引优化解决方案--索引优化(4)

排序优化 尽量避免使用Using FileSort方式排序。order by语句使用索引最左前列或使用where子句与order by子句条件组合满足索引最左前列。where子句中如果出现索引范围查询会导致order by索引失效。 优化案例 联表查询优化 分组查询优化 慢查询日志

架构是怎样练成的-楼宇监控系统案例

目录 概要 项目背景 原系统设计方案 改进后的设计方案 小结 概要 绝大多数人掌握的架构都是直接学习&#xff0c;慢慢地才能体会到一个架构的好处。架构是一种抽象&#xff0c;是为了复用目的而对代码做的抽象。通过一个项目的改造&#xff0c;理解架构是如何产生的&…

Kubernetes Prometheus 系例 | kubernetes 部署 Kafka exporter监控Kafka集群

prometheus 监控 kafka 常见的有两种开源方案&#xff1b; 部署 exporter 或 jmx 配置监控。 项目地址&#xff1a; kafka_exporter&#xff1a;https://github.com/danielqsj/kafka_exporter jmx_exporter&#xff1a;https://github.com/prometheus/jmx_exporter 本文采用kaf…

【日常记录】【JS】优雅检测用户是否在指定元素的外部点击

文章目录 1、界面基本布局2、代码实现3、参考链接 1、界面基本布局 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0">…

搜索python包的说明

当我发现bug时&#xff0c;就怀疑是sns包的版本问题了&#xff08;原代码是原作者以前成功运行的代码&#xff09;&#xff0c;于是直接到网上搜&#xff0c;找到对应的说明文档 根据该示例代码进行改写&#xff1a; 达成目的。

【漏洞复现】用友 UFIDA saveDoc.ajax 任意文件上传漏洞

免责声明&#xff1a; 本文内容旨在提供有关特定漏洞或安全漏洞的信息&#xff0c;以帮助用户更好地了解可能存在的风险。公布此类信息的目的在于促进网络安全意识和技术进步&#xff0c;并非出于任何恶意目的。阅读者应该明白&#xff0c;在利用本文提到的漏洞信息或进行相关测…

ONLYOFFICE 8.1版本桌面编辑器测评

https://www.onlyoffice.com/zh/ 随着工作方式的不断演变&#xff0c;文档编辑软件成为了我们日常工作中不可或缺的一部分。而ONLYOFFICE作为一款开源且功能丰富的办公套件&#xff0c;其最新推出的8.1版本在原有基础上进行了大量的优化与更新&#xff0c;旨在提供更流畅、更安…

后端返回base64文件流下载

后端返回base64文件流: 前端处理&#xff1a; downloadTemplate () {this.$API.downloadTemplate().then(({ data }) > {const binaryString atob(data) // 解码base64字符串const byteArray new Uint8Array(binaryString.length) // 创建一个Uint8Arrayfor (let i 0; i…

2.优化算法之滑动窗口1

1.长度最小的子数组 . - 力扣&#xff08;LeetCode&#xff09; &#xff08;1&#xff09;题目描述 给定一个含有 n 个正整数的数组和一个正整数 target 。 找出该数组中满足其总和大于等于 target 的长度最小的 子数组 [numsl, numsl1, ..., numsr-1, numsr] &#xff0c;…

计算机视觉——opencv快速入门(一) opencv的介绍与安装

什么是opencv OpenCV&#xff08;Open Source Computer Vision Library&#xff09;是一个开源的计算机视觉和机器学习软件库。它旨在提供广泛的图像和视频处理功能&#xff0c;支持多种编程语言&#xff08;主要包括C, Python, Java等&#xff09;和操作系统&#xff08;如Li…

生产环境:CentOS 7 Docker 20.10.19离线部署(为离线部署k8s做准备)

背景描述&#xff1a;离线部署Docker环境 在现代IT基础设施中&#xff0c;Docker已经成为应用容器化的标准工具。它简化了应用程序的部署和管理&#xff0c;使开发者和运维工程师能够以更高的效率和一致性进行工作。然而&#xff0c;在某些场景下&#xff0c;由于安全性、网络…

代码随想录算法训练营第三十四天|56. 合并区间、738.单调递增的数字、968.监控二叉树

56. 合并区间 题目链接&#xff1a;56. 合并区间 文档讲解&#xff1a;代码随想录 状态&#xff1a;无语&#xff0c;这题从右边界排序做不了&#xff01; 思路&#xff1a; 排序&#xff1a;按照区间的起始位置进行排序&#xff0c;这样后面处理时可以顺序合并重叠区间。合并…

数据结构-线性表的链式表示

目录 前言一、线性表的链式表示和实现1.1 线性表的表示1.2 基本操作的实现1.3 线性表的链式表示的优缺点 总结 前言 本篇文章主要介绍线性表的链式表示 一、线性表的链式表示和实现 1.1 线性表的表示 线性表的链式表示又称为链式存储结构或链式映像 链式存储定义&#xff1…

emlogpro文件上传漏洞代码审计(CVE-2023-44974)(CVE-2023-44973)

【产品介绍】 emlog 是 “Every Memory Log” 的简称&#xff0c;意即&#xff1a;点滴记忆。它是一款基于PHP语言和MySQL数据库的开源、免费、功能强大的个人或多人联合撰写的博客系统(blog)。基于PHP和MySQL的功能强大的博客及CMS建站系统。致力于提供快速、稳定&#xff0c…

JAVA【案例5-2】模拟默认密码自动生成

【模拟默认密码自动生成】 1、案例描述 本案例要求编写一个程序&#xff0c;模拟默认密码的自动生成策略&#xff0c;手动输入用户名&#xff0c;根据用户名自动生成默认密码。在生成密码时&#xff0c;将用户名反转即为默认的密码。 2、案例目的 &#xff08;1&#xff09…

JavaWeb系列六: 动态WEB开发核心(Servlet) 上

韩老师学生 官网文档为什么会出现Servlet什么是ServletServlet在JavaWeb项目位置Servlet基本使用Servlet开发方式说明快速入门- 手动开发 servlet浏览器请求Servlet UML分析Servlet生命周期GET和POST请求分发处理通过继承HttpServlet开发ServletIDEA配置ServletServlet注意事项…

【Python/Pytorch - 网络模型】-- 高阶SVD算法

文章目录 文章目录 00 写在前面01 基于Python版本的高阶SVD算代码02 HOSVD 的步骤 00 写在前面 高阶奇异值分解&#xff08;Higher-Order SVD&#xff0c;HOSVD&#xff09;是一种将传统的奇异值分解&#xff08;SVD&#xff09;扩展到高阶张量的方法。它能够将一个高阶张量分…

【AI编译器】triton学习:矩阵乘优化

Matrix Multiplication 主要内容&#xff1a; 块级矩阵乘法 多维指针算术 重新编排程序以提升L2缓存命 自动性能调整 Motivations 矩阵乘法是当今高性能计算系统的一个关键组件&#xff0c;在大多数情况下被用于构建硬件。由于该操作特别复杂&#xff0c;因此通常由软件提…

mprpc框架的配置文件加载

目录 1.回顾测试 2.mprpc框架的配置文件加载 2.1 mprpcconfig.h 2.2 完善mprpcapplication.h 2.3 完善mprpcapplication.cc 2.4 mprpcconfig.cc 2.5 test.conf 2.6 测试运行 ​3.扩展问题 1.回顾测试 我们先把之前的项目代码工程编译好&#xff0c;然后进入bin里面&am…