vue3自定义指令——元素平滑移动

news2024/9/27 5:56:45

vue提供一个用户可以高度自定义的指令入口directives
利用这个入口我们实现一个常见的元素平滑移动的自定义指令 ‘sl
首先我们结合指令创建一个多元素的界面:
在这里插入图片描述
这个场景我们在很多网站,商城都有见过,特别对于移动端的清单类界面
我们的终极目标是在滚动的过程中出现在视口的元素移动,而并不是所有的元素都在移动

平滑移动

有了目标之后我们就可以分解一下我们codeing的过程,

  1. 创建一个基础的指令
  2. 选则一个何使的方式去建立一个高效的运动动画
  3. 如何获取到进入视口的元素
  4. 找到视口元素并让它移动

s1创建一个基础的指令文件

//移动的距离
const DISTANCE : number = 150;

const derDve = {
    
    mounted(el:any){
    
    el.style.transform=`translateY(${DISTANCE}px)` 
  }
}
export default derDve

s2指令内容根据分解的需求变更

  1. 指令使用的过程不应影响到原始元素的属性特征 el.style 方式会导致元素原有的样式出现变更
  2. 指令的使用应该具有兼容性和高效的复用价值

动画方式创建一个平滑指令

const derDve = {
    mounted(el:any){
     //动画方式创建
    const animation = el.animate([
        {
            transform:`translateY(${DISTANCE}px)`,
            opacity:0.5
        },
        {
            transform:'translateY(0)',
            opacity:1
        }
    ],
        {
            duration:DURATION,
            easing:'ease'
        }
    );
    //初始状态下动画应该是停止状态
       animation.pause();
    },
}
export default derDve

s3一个好用的视口元素检测WebAPI IntersectionObserver

IntersectionObserver 一个浏览器自带的用于检测元素与视口是否有交集的api 接收两个参数,[callback,option] 详细配置可自行百度

有了这个api之后我们就可以对上述指令再次进行修改

//移动的距离
const DISTANCE : number = 150;
//动画时间
const DURATION : number = 1000;

//创建一个动画保存对象

const cations =new  WeakMap(); //使用弱映射防止内存泄露
//创建一个视口元素监听
const ob= new IntersectionObserver(entries =>{
    for(const  entry of entries){
        if(entry.isIntersecting){
         const animation=cations.get(entry.target);
         animation.play();
         ob.unobserve(entry.target)
        }
    }
})
const derDve = {
    mounted(el:any){
     //动画方式创建
    const animation = el.animate([
        {
            transform:`translateY(${DISTANCE}px)`,
            opacity:0.5
        },
        {
            transform:'translateY(0)',
            opacity:1
        }
    ],
        {
            duration:DURATION,
            easing:'ease'
        }
    );
       animation.pause();
       cations.set(el,animation);
       ob.observe(el);
    },
    unmounted(el:any){
      ob.unobserve(el)
    }
}
export default derDve

业务中使用也很简单

 <li v-for="(item,index) in list" class="_cl_row" v-sl v-bg>{{item}}</li>
import derDve from "../../utils/silderAntiom";
import color from "../../utils/randomColor";
 directives: {
         sl:  derDve, //平滑移动的指令
         bg:  color  //随机颜色指令
     },
      setup(){

         const list : Array<number> =[1,2,3,4,5,6,7,8,9,10,11,12]
       }

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

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

相关文章

Linux如何找回root密码

Linux如何找回root密码 首先&#xff0c;启动系统&#xff0c;进入开机界面&#xff0c;在界面中按“e”进入编辑界面。如图 进入编辑界面&#xff0c;使用键盘上的上下键把光标往下移动&#xff0c;找到以““Linux16”开头内容所在的行数”&#xff0c;在行的最后面输入&…

【几分醉意赠书活动 - 03期】 | 《Python系列丛书》

个人主页&#xff1a; 几分醉意的CSDN博客主页_传送门 个人主页&#xff1a; 陈老板的CSDN博客主页_传送门 赠书活动 | 第三期 本期好书推荐&#xff1a;《Python系列丛书》 粉丝福利&#xff1a;书籍赠送&#xff1a;共计送出30本 参与方式&#xff1a;关注公众号&#xff1a;…

IP-GUARD是否支持对打了水印的文档去除水印?

是否支持对打了水印的文档去除水印&#xff1f; 支持&#xff0c;从4.64.1005.0版本开始&#xff0c;支持对打了文档水印的文档做去水印的操作&#xff0c;但只是支持去除非图片类型的显式水印。支持右键文件去除、申请去除、自我备案去除三种方式。 例如&#xff1a; 对客户端…

短视频电商平台的流量货币化率

通过对内容社区的流量规模流量货币化率的估算&#xff0c;可以得出对应的商业化即变现能力&#xff0c;如电商GMV&#xff0c;广告收入规模。 货币化率 Take Rate 货币化率&#xff08;Take Rate&#xff0c;TR&#xff09;是电商平台报表指标而非业务指标&#xff0c;是广告收…

一步到位Python Django部署,浅谈Python Django框架

Django是一个使用Python开发的Web应用程序框架&#xff0c;它遵循MVC&#xff08;Model-View-Controller&#xff09;设计模式&#xff0c;旨在帮助开发人员更快、更轻松地构建和维护高质量的Web应用程序。Django提供了强大的基础设施和工具&#xff0c;以便于处理复杂的业务逻…

【Eclipse】Eclipse的下载与安装

一.下载 下载地址&#xff1a;https://www.eclipse.org/downloads/packages/ 根据自己电脑的操作系统下载对应的版本 二.安装 解压到你想存放的路径上 设置该路径作为项目/代码存放的默认路径 \

修改knative func build的image

问题描述 基于func create创建的function的source code&#xff0c;并基于build创建出function对应的image。我们需在该image内创建安装iperf3。 解决步骤及遇到的errors 1. 查看本地的image&#xff0c;并运行该image podman images docker run -it -u root -p 10001:22 $…

Stream流 - 取最大对象、最小对象

需求&#xff1a;Dnl 对象包含属性 ygz&#xff08;有功总&#xff09;、wgz&#xff08;无功总&#xff09;&#xff0c;统计 Dnl 对象集合的最大有功总、最小有功总的对象。 集合&#xff1a; 对象1&#xff1a;ygz11.1、wgz22.2 对象2&#xff1a;ygz22.1、wgz66.2 对象3&a…

2023网络安全面试题汇总(附答案)

大家好&#xff0c;我是小V ,本人 17 年就读于一所普通的本科学校&#xff0c;20 年 6 月在三年经验的时候顺利通过校招实习面试进入大厂&#xff0c;现就职于某大厂安全联合实验室。 又到了毕业季&#xff0c;大四的漂亮学姐即将下架&#xff0c;大一的小学妹还在来的路上&…

网络安全入门教程(非常详细)从零基础入门到精通,看完这一篇就够了

朋友们如果有需要全套《黑客&网络安全入门&进阶学习包》&#xff0c;可以&#x1f447;下方自取&#xff08;如遇问题&#xff0c;可以在评论区留言哦&#xff09;~ &#x1f447;&#x1f447;&#x1f447; 《黑客&网络安全入门&进阶学习包》 &#x1f446;&…

STM32F407硬件I2C实现MPU6050通讯(CUBEIDE)

STM32F407硬件I2C实现MPU6050通讯 文章目录 STM32F407硬件I2C实现MPU6050通讯cubeide设置写操作与读操作函数实现复位&#xff0c;读取温度&#xff0c;角度等函数封装mpu6050.cmpu6050.h代码分析 DMP移植1.修改头文件路径为自己的头文件路径2.修改I2C读写函数为自己mcu平台的读…

6.12黄金何时走出区间震荡?后市如何布局

近期有哪些消息面影响黄金走势&#xff1f;下周黄金多空该如何研判&#xff1f; ​黄金消息面解析&#xff1a;周一(6月12日)亚市盘中&#xff0c;现货黄金维持震荡&#xff0c;金价现报1960美元/盎司。本周黄金交易员将迎来美国CPI数据以及美联储利率决议&#xff0c;预计将对…

vue3+ts+vite实现pinia

本篇文章主要从事3部分 单个store下的文件进行使用模块下进行使用(pinia不像vuex那样使用模块化了 直接在store下定义ts文件即可)pinia持久化使用 安装pinia : cnpm install pinia 安装持久化 cnpm install pinia-plugin-persistedstate 1.单文件: index.ts (先不要管user.ts)…

详细讲解!如何模拟后台API调用场景

目录 简介 Postman 迁移至 ApiFox ApiFox 导入 Postman ApiFox 展示 API 调用场景 增加断言验证 API 使用测试执行场景 API 序列 总结 简介 在进行Web性能测试时&#xff0c;我们不仅需要测试前端页面的性能&#xff0c;还需要测试与后台API的交互性能&#xff0c;以及…

Spring Cloud常用组件介绍(Netflix、Alibaba)

Spring Cloud常用组件介绍 文章目录 **Spring Cloud常用组件介绍**一、说明**1.1.什么是Spring Cloud**1.2.Spring Cloud的组件选型 **二、组件介绍****2.1.服务注册与发现****2.1.1.Netflix Eureka****1&#xff09;分布式模型****2&#xff09;主要组件****3&#xff09;工作…

骑行陡坡村,潇潇洒洒出品

2023年6月10日群峰环抱小村庄盘山陡坡蜜桃香唇干舌燥咬一口甘甜香沁嘴边淌久旱叶枯悯农急乌云密布盼雷响但得雷神甘露下雨中狂奔又何妨

高效搞定文件重命名和归类!使用文件批量改名高手轻松实现

文件夹管理是计算机使用中非常重要的一项任务&#xff0c;对于个人电脑用户或企业机构来说&#xff0c;都需要对文件夹进行有效管理归类和重命名。 第一步&#xff0c;打开文件批量改名高手&#xff0c;进入文件批量重命名板块并点击添加文件&#xff0c;选择需要重命名的文件…

IOS应用跳转URL scheme和Universal Links

简介 IOS常见的跳转方式有URL scheme和Universal Links。这两个均可以实现App之间的跳转&#xff0c;以及通过网页实现跳转到对应的App内。通过本文章可以了解到两者的区别和具体的使用方法&#xff0c;以及参数的传递。应对常见的几种跳转需求。 URL scheme:需要配置URL sch…

增值税高不再是难事,只需一招即可解决!

《税筹顾问》专注于园区招商&#xff0c;您的贴身节税小能手&#xff0c;合理合规节税&#xff01; 任何一家企业&#xff0c;都逃脱不了一种税费的缴纳&#xff0c;那就是增值税。但其实小规模纳税人增值税缴纳&#xff0c;是可以享受到一些税收优惠照顾的&#xff0c;未达到月…

看完阿里大牛的LeetCode算法刷题手册后,成功在四面字节斩获offer

最近有看到很多朋友想进大厂&#xff0c;四面竟然都考了算法&#xff0c;很多同学面对算法的问题都很头大&#xff0c;因为自己做项目很难用到&#xff0c;但是但凡高薪的职位面试都会问到。最近我整理了一份刷题宝典&#xff0c;这份刷题宝典&#xff0c;也让我进了心仪的大厂…