vue2 自定义指令 列表元素上划 动画


// 距离向上滑动的距离 可优化为 外部传入
let slideDistace = 100;
// 动画完成的时间
let slideDuration = 500;
// 用来映射 元素 和 动画
let domMap = new WeakMap();
// 观察器 用来观察元素是否 出现在视口
const ob = new IntersectionObserver(entries => {// 循环元素entries.forEach(entry => {// 判断元素是否出现在视口if (entry.isIntersecting) {// 从map中获取动画let animation = domMap.get(entry.target)if (animation) {// 动画存在 播放动画 并且销毁观察器animation.play()ob.unobserve(entry.target)}}})
})
// 判断元素是否在视口
function isBelowViewPort(el) {const rect = el.getBoundingClientRect()return rect.top > window.innerHeight
}
Vue.directive('slide-in', {inserted (el, binding) {if (!isBelowViewPort(el)) {return}const animate = el.animate([{transform: `translateY(${slideDistace}px)`,opacity: 0.5},{transform: `translateY(0px)`,opacity: 1}], {duration: slideDuration,easing: 'ease-out',FillMode: 'forward'})animate.pause();domMap.set(el, animate)ob.observe(el)},unbind(el) {// 解除绑定 销毁观察器ob.unobserve(el)},
})

WeakMapMap 都是 JavaScript 中用于存储键值对的数据结构,但它们之间存在一些重要的区别,特别是在键的类型、垃圾回收机制以及使用场景方面。下面是 WeakMapMap 的主要区别:

1. 键的类型

  • Map: Map 的键可以是任何数据类型,包括原始值(如字符串、数字)和对象。
  • WeakMap: WeakMap 的键必须是对象。不能使用原始值(如字符串、数字、布尔值等)作为键。

2. 垃圾回收机制

  • Map: Map 中的键值对会阻止键对象被垃圾回收。也就是说,只要键值对存在,键对象就不会被垃圾回收器回收。
  • WeakMap: WeakMap 中的键是弱引用的,这意味着如果一个对象只被 WeakMap 作为键引用,而没有其他引用,那么这个对象可以被垃圾回收器回收。这使得 WeakMap 适合用于存储临时数据或与对象关联的元数据,而不用担心内存泄漏。

3. 使用场景

  • Map: 适用于需要强引用键值对的场景,特别是当你需要使用原始值作为键,或者需要长时间保留键值对的情况。
  • WeakMap: 适用于需要临时关联数据的场景,特别是当你希望数据在对象不再使用时自动被垃圾回收。常见的使用场景包括缓存、私有数据存储等。

4. API 差异

  • Map: 提供了丰富的 API,包括 set, get, has, delete, clear, keys, values, entries 等。
  • WeakMap: 提供了较为有限的 API,主要包括 set, get, has, delete。没有 clear 方法,也没有迭代方法(如 keys, values, entries)。

示例代码

Map 示例
const map = new Map();// 使用各种类型的键
map.set('string', 'Hello');
map.set(1, 'One');
map.set({ key: 'value' }, 'Object as key');console.log(map.get('string')); // 输出: Hello
console.log(map.get(1));       // 输出: One
console.log(map.get({ key: 'value' })); // 输出: undefined (因为是不同的对象实例)
WeakMap 示例
const weakMap = new WeakMap();// 只能使用对象作为键
const obj = { key: 'value' };
weakMap.set(obj, 'Data associated with obj');console.log(weakMap.get(obj)); // 输出: Data associated with obj// 如果 obj 不再被其他变量引用,它可能会被垃圾回收
obj = null; // 解除引用

总结

  • Map 更通用,适用于大多数需要键值对的场景。
  • WeakMap 更适合用于临时数据存储,特别是当你希望数据在对象不再使用时自动被垃圾回收。

选择哪种数据结构取决于你的具体需求和使用场景。

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

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

相关文章

2024年双十一有什么好物推荐?盘点2024双十一爆款好物分享

第一款:希亦ACE内衣洗衣机 一句话点评:常出口欧美等多个国家,被超百家专业媒体评为“洗护一体技术之王”,妇科细菌除菌率达99.99%,清洁度高达99.8%! CEYEE希亦是清洁领域的实力大牌子了,也是母…

老照片如何修复变清晰?手把手教你4种模糊照片变清晰方法!

在洋溢着温情的生日聚会上,家人们围坐一堂,总会情不自禁地翻阅那些尘封已久的老照片,一同沉醉于往昔的温情岁月。然而,时光荏苒,许多承载着深情厚意的照片已变得泛黄、模糊,难以再现昔日的清晰与鲜活。但请…

vue2 a-input输入框使用正则限制为数字、英文及中文,出现吞字符和英文字符打断问题

需求是输入框限制数字、英文和中文,原始使用的正则是: replace(/[^a-zA-Z0-9\u4E00-\u9FA5]/g,)1、使用这个正则表达式使用搜狗输入法没问题,使用微软自带输入法后会存在输入英文会吞并当前光标前的字符,也有英文打断问题。 输入…

2024年【制冷与空调设备安装修理】考试及制冷与空调设备安装修理最新解析

题库来源:安全生产模拟考试一点通公众号小程序 制冷与空调设备安装修理考试参考答案及制冷与空调设备安装修理考试试题解析是安全生产模拟考试一点通题库老师及制冷与空调设备安装修理操作证已考过的学员汇总,相对有效帮助制冷与空调设备安装修理最新解…

线上遇到的问题记录(说多了都是泪)

写在前面 我觉得,工作中最有价值的就是及遇到的问题了,特别时线上这种容易让人血压升高的环境中遇到的问题,本文就是记录这些血压升高时刻。 如果你遇到什么真实环境的问题,也欢迎评论或者私信分享给我!!&…

Angular 保姆级别教程高阶应用 - RxJs

RxJS 13.1.1 什么是 RxJS ? RxJS 是一个用于处理异步编程的 JavaScript 库,目标是使编写异步和基于回调的代码更容易。 13.1.2 为什么要学习 RxJS ? 就像 Angular 深度集成 TypeScript 一样,Angular 也深度集成了 RxJS。 服务、表单、事件、全局状…

经典功率谱估计的原理及MATLAB仿真(自相关函数BT法、周期图法、bartlett法、welch法)

经典功率谱估计的原理及MATLAB仿真(自相关函数BT法、周期图法、bartlett法、welch法) 文章目录 前言一、BT法二、周期图法三、Bartlett法四、welch法五、MATLAB仿真六、MATLAB详细代码总结 前言 经典功率谱估计方法包括BT法(对自相关函数求傅…

基于Java的就业信息管理系统源码带本地搭建教程

技术框架:jQuery MySQL5.7 mybatis shiro Layui HTML CSs JS 运行环境:jdk8 IntelliJ IDEA maven3 宝塔面板 实现了就业信息管理、就业统计、用户管理等功能。有普通用户和管理员两种角色。

开源限流组件分析(三):golang-time/rate

文章目录 本系列前言提供获取令牌的API数据结构基础方法tokensFromDurationdurationFromTokensadvance 获取令牌方法reverseN其他系列API 令人费解的CancelAt是bug吗 取消后无法唤醒其他请求 本系列 开源限流组件分析(一):juju/ratelimit开源…

智能AI监测系统燃气安全改造方案的背景及应用价值

随着燃气行业的迅速发展和城市化进程的加快,燃气安全管理成为企业运营和城市管理中不可忽视的关键领域。燃气泄漏、管道破损等事故的发生不仅会造成严重的经济损失,还威胁到人民生命财产安全。传统的安全管理方法往往依赖人工巡检和手动监测,…

如何写一个视频编码器演示篇

先前写过《视频编码原理简介》,有朋友问光代码和文字不太真切,能否补充几张图片,今天我们演示一下: 这是第一帧画面:P1(我们的参考帧) 这是第二帧画面:P2(需要编码的帧&…

C2W4.LAB.Word_Embedding.Part2

理论课:C2W4.Word Embeddings with Neural Networks 文章目录 Training the CBOW modelForward propagationInitialization of the weights and biasesTraining exampleValues of the hidden layerValues of the output layerCross-entropy loss BackpropagationGr…

大家都在用的HR招聘管理工具:国内Top5排名

招聘管理工具是专为HR及招聘团队设计的数字化助手,旨在简化招聘流程,提高效率。众所周知,招聘管理工具通常集成简历收集、筛选、面试安排、候选人跟踪等功能于一体,让招聘过程更加流畅。使用招聘管理工具,不仅能节省时…

高边坡稳定安全监测预警系统解决方案

一、项目背景 高边坡的滑坡和崩塌是一种常见的自然地质灾害,一但发生而没有提前预告将给人民的生命财产和社会危害产生严重影响。对高边坡可能产生的灾害提前预警、必将有利于决策者采取应对措施、减少和降低灾害造成的损失。现有的高边坡监测技术有人工巡查和利用测…

100个候选人,没一个能讲明白什么是自动化框架?

什么是自动化测试框架 01 什么是框架 框架是整个或部分系统的可重用设计,表现为一组抽象构件及构件实例间交互的方法。它规定了应用的体系结构,阐明了整个设计、协作构件之间的依赖关系、责任分配和控制流程,表现为一组抽象类以及其实例之间…

格姗知识圈博客网站开源了!

格姗知识圈博客 一个基于 Spring Boot、Spring Security、Vue3、Element Plus 的前后端分离的博客网站!本项目基本上是小格子一个人开发,由于工作和个人能力原因,部分技术都是边学习边开发,特别是前端(工作中是后端开…

MySQL~表的操作(创建表,查看表,修改表,删除表)

1.创建表 1.1.创建表 首先要选择需要操作的数据库,USE 数据库名,后续可以根据实际情况操作时添加。 USE fruitsales;建表语法: create table 表名( 字段名1 数据类型, 字段名2 数据类型, ); 实例:创建fruit_bak1表。 create t…

[linux]软件安装

安装方式 二进制发布包安装: 软件已经针对具体平台编译打包发布,只要解压修改配置即可 rpm安装: 软件已经按照redhat的包管理规范进行打包, 使用rpm命令进行安装,不能自行解决库依赖问题 yum安装: 一种在线软件安装方式, 本质上还是rpm安装, 自动下载…

【vim】手动安装 Leader-F

LeaderF 是一个功能强大的 Vim 插件,主要用于快速导航和搜索。它可以帮助用户在 Vim 中高效地查找文件、缓冲区、标签、函数等各种元素,极大地提高了编辑效率。 LeaderF 的安装如果按照仓库中的教程来的话可以很方便的实现安装,这里介绍一下…

【记录】VSCode|自用设置项

文章目录 1 基础配置1.1 自动保存1.2 编辑区自动换行1.3 选项卡换行1.4 空格代替制表符1.5 开启滚轮缩放 2 进阶设置2.1 选项卡不自我覆盖2.2 选项卡限制宽度2.3 选项卡组限制高度2.4 字体设置2.5 字体加粗2.6 侧边栏2.7 沉浸式代码模式 Zen Mode2.8 设置 Zen 模式的选项卡组 3…