模拟钉钉官网动画

实现思路:利用粘性定位sticky,以及滚动事件实现。首先我们应该设置滚动动画开始位置和结束位置 ,然后根据位置计算透明度或者transform,scale的值。

 首先根据上述图线计算属性值,代码如下:

function createAnimate(scrollStart, scrollEnd, valueStart, valueEnd) {return function (x) {if (x < scrollStart) {return valueStart;}if (x > scrollEnd) {return valueEnd;}const bili = (valueEnd - valueStart) / (scrollEnd - scrollStart);return bili * (x - scrollStart) + valueStart;};}

然后考虑到每个dom它的动画不是只有一个属性可能有多个,例如scale,opacity,transform等。然后应该将dom和属性存储到map集合中,key为dom,属性为value。

const items = document.querySelectorAll('.list-item');
const animationMap = new Map();const getTitleAnimation = (scrollStart, scrollEnd, dom) => {const opacityAnimation = createAnimate(scrollStart, scrollEnd, 1, 0);const yAnimation = createAnimate(scrollStart, scrollEnd, 0, -200);const transform = function (x) {return `translate(0,${yAnimation(x)}px)`;};const opacity = function (x) {return opacityAnimation(x);};return {transform,opacity,};};const updateMap=()=>{for (const item of items) {animationMap.set(item,getTitleAnimation(scrollStart + 50, scrollEnd, item));}
}

然后就是属性赋值:

const updateStyles = () => {const scrollY = window.scrollY;for (const [dom, animations] of animationMap) {for (const prop in animations) {const value = animations[prop](scrollY);dom.style[prop] = value;}}};
updateStyles();
window.addEventListener('scroll', updateStyles);

全部代码访问: liuzicheng/web - Gitee.com

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

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

相关文章

Go语言在构建HTTP代理时的优势和挑战

Go语言&#xff0c;又称Golang&#xff0c;是一种开源的、静态类型的、编译型的编程语言。它在设计时考虑到了性能、并发性和简洁性&#xff0c;因此在构建网络应用方面表现优异。特别是在构建HTTP代理时&#xff0c;Go语言展现出了一些独特的优势&#xff0c;但也存在一些挑战…

鸿蒙开发-UI-页面路由

鸿蒙开发-UI-组件 鸿蒙开发-UI-组件2 鸿蒙开发-UI-组件3 鸿蒙开发-UI-气泡/菜单 文章目录 一、基本概念 二、页面跳转 1.router基本概念 2.使用场景 3.页面跳转参数传递 三、页面返回 1.普通页面返回 2.页面返回前增加一个询问框 1.系统默认询问框 2.自定义询问框 总…

Linux基础知识合集

整理了一下学习的一些关于Linux的一些基础知识&#xff0c;同学们也可以通过公众号菜单栏查看&#xff01; 一、基础知识 Linux基础知识 Linux命令行基础学习 Linux用户与组概念初识 Linux文件与目录权限基础 Linux中文件内容的查看 Linux系统之计划任务管理 二、服务器管理 Vm…

BFS——多源BFS+双端队列BFS

173. 矩阵距离&#xff08;173. 矩阵距离 - AcWing题库&#xff09; 思路&#xff1a;这题和多源最短路还是有一些区别的&#xff0c;相当于求一个点到距离它最近的一个终点的距离&#xff0c;其实我们可以反着来看&#xff0c;将终点视为起点&#xff0c;然后加一个虚拟起点&a…

降维(Dimensionality Reduction)

一、动机一&#xff1a;数据压缩 这节我将开始谈论第二种类型的无监督学习问题&#xff0c;称为降维。有几个原因使我们可能想要做降维&#xff0c;其一是数据压缩&#xff0c;它不仅允许我们压缩数据使用较少的计算机内存或磁盘空间&#xff0c;而且它可以加快我们的学习算法。…

Android Studio非UI线程修改控件——定时器软件

目录 一、UI界面设计 1、UI样式 2、XML代码 二、功能编写 1、定义 2、实现方法 3、功能实现 一、UI界面设计 1、UI样式 2、XML代码 <?xml version"1.0" encoding"utf-8"?> <RelativeLayout xmlns:android"http://schemas.android…

vue实现带缩略图的轮播图(vue-awesome-swiper)

demo 请复制打开 https://download.lllomh.com/cliect/#/product/E125504451206525 如点击链接跳转失败请复制网址到浏览器打开 1.引入swiper和vue-awesome-swiper插件 npm install swiper4 --save npm install vue-awesome-swiper3 --save2.在main.js中引入&#xff1a; …

【代码随想录20】669.修剪二叉搜索树 108.将有序数组转换为二叉搜索树 538.把二叉搜索树转换为累加树

目录 669.修剪二叉搜索树题目描述参考代码 108.将有序数组转换为二叉搜索树题目介绍参考代码 538.把二叉搜索树转换为累加树题目描述参考代码 669.修剪二叉搜索树 题目描述 给你二叉搜索树的根节点 root &#xff0c;同时给定最小边界low 和最大边界 high。通过修剪二叉搜索树…

XGB-1:XGBoost安装及快速上手

XGBoost是“Extreme Gradient Boosting”的缩写&#xff0c;是一种高效的机器学习算法&#xff0c;用于分类、回归和排序问题。它由陈天奇&#xff08;Tianqi Chen&#xff09;在2014年首次提出&#xff0c;并迅速在数据科学竞赛和工业界获得广泛应用。XGBoost基于梯度提升框架…

【Git】01 Git介绍与安装

文章目录 一、版本控制系统二、Git三、Windows安装Git3.1 下载Git3.2 安装3.3 检查 四、Linux安装Git4.1 YUM安装4.2 源码安装 五、配置Git5.1 配置用户名和邮箱5.2 配置级别5.3 查看配置 六、总结 一、版本控制系统 版本控制系统&#xff0c;Version Control System&#xff…

Unity中AssetBundle的打包和分包策略

在Unity中&#xff0c;AssetBundle的打包策略主要是针对资源的整理和分组&#xff0c;以做到即方便管理&#xff0c;又能有效优化资源的加载和内存使用。具体来看包括以下几种常见的策略&#xff1a; 打包资源的预处理&#xff1a;为了减小AssetBundle的大小和数量&#xff0c;…

C语言数据结构之两道OJ题带你走近环形链表

倘若南风知我意 莫将晚霞落黄昏 &#x1f3a5;烟雨长虹&#xff0c;孤鹜齐飞的个人主页 &#x1f525;个人专栏 &#x1f3a5;前期回顾-单链表 目录 环形链表 题目描述# 思路# 代码测试# 环形链表II 题目描述# 思路# 代码测试# 环形链表 题目链接&#xff1a;环形链表 题目…