js 网格卡片交换动画

news2024/9/23 19:19:01

请添加图片描述

关键技术:animate(keyframes, options)
keyframes 关键帧对象数组,或一个关键帧对象(其属性为可迭代值的数组)
代表动画持续时间的整数(以毫秒为单位),或者一个包含一个或多个时间属性
参考传送门

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta http-equiv="X-UA-Compatible" content="IE=edge" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>Document</title>
  </head>
  <style>
    * {
      padding: 0;
      margin: 0;
    }
    .box {
      position: relative;
    }
    .box div {
      position: absolute;
      top: 0;
      left: 0;
      width: 50px;
      height: 50px;
      border: 10px inset grey;
    }
  </style>
  <body>
    <div class="box" onclick="getTag(event)"></div>
  </body>
</html>

<script>
  //  多少个格子
  let btnArr = ["a", "b", "c", "d", "e", "f"];
   // 保存点击的两个元素及位置
  let saveArr = [];
  (function () {
    // 获取box
    const box = document.querySelectorAll(".box")[0];
    // 距离顶部有几个90px
    let topNum = 0;
    let dom = "";
    for (let i = 0; i < btnArr.length; i++) {
      if (i % 2 === 0 && i != 0) {
        ++topNum;
      }

      dom += `<div class="${btnArr[i]}" style="left:${
        i == 0 ? "0px" : i % 2 == 1 ? "90px" : "0px"
      };top:${topNum == 0 ? 0 : topNum * 90}px">${btnArr[i]}</div>`;
    }
    box.innerHTML = dom;
  })();

  function getTag(e) {
    let ele = e.target;

    console.dir(ele, "获取到当前点击的元素");
	// saveArr <2 添加当前元素
    if (saveArr.length < 2) {
      let obj = {
        ele: ele,
        left: ele.offsetLeft,
        top: ele.offsetTop,
      };
      saveArr.push(obj);
    }
    // saveArr=2 交换两者的位置
    if (saveArr.length == 2) {
      saveArr[0].ele.animate(
        [
          { left: saveArr[0].left + "px", top: saveArr[0].top + "px" },
          { left: saveArr[1].left + "px", top: saveArr[1].top + "px" },
        ],
        {
         // 交互时长
          duration: 1000,
          // 是否停留
          fill: "forwards",
          // 动画速度
          easing: "linear",
        }
      );
      saveArr[1].ele.animate(
        [
          { left: saveArr[1].left + "px", top: saveArr[1].top + "px" },
          { left: saveArr[0].left + "px", top: saveArr[0].top + "px" },
        ],
        {
          duration: 1000,
          easing: "linear",
          fill: "forwards",
        }
      );
      // 清空saveArr
      saveArr = [];
    }
  }
</script>

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

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

相关文章

C# 学习之路(类的基本概念)

C# 学习之路&#xff08;类的基本概念&#xff09; 类的概述 类是一种活动的数据结构 程序的数据和功能被组织为逻辑上相关的数据项和函数封装的集合&#xff0c;并称为类 类包含数据成员和函数成员&#xff1a; 数据成员&#xff1a;存储与类或类的实例相关的数据&#xff08…

Linux条件变量

一、条件变量函数 1&#xff0c;条件变量 条件变量&#xff1a;用来描述某种临界资源是否就绪的一种数据化描述。通常要配合mutex一起使用。 2&#xff0c;初始化 pthread_connd_init: 同样有一个静态的和一个动态的。 其中cond是需要初始化的条件变量&#xff0c;attr传…

在线书法培训迎来新风口

随着社会教育水平的不断提高&#xff0c;书法不再是独属于某个年龄层的爱好&#xff0c;开始被越来越多人欣赏和重视。 写一手好字&#xff0c;对每一个人来说都是一个加分“外挂”。在考场上&#xff0c;一手好字无疑可以让阅卷老师在心中自然加分&#xff1b;在职场中&#…

源码深度解析之 Spring IOC

1. 基础知识 1.1 什么是 Spring IOC &#xff1f; IOC 不是一种技术&#xff0c;只是一种思想&#xff0c;一个重要的面向对象编程的法则&#xff0c;它能指导我们如何设计出松耦合、更优良的程序。 传统应用程序都是由我们在类内部主动创建依赖对象&#xff0c;从而导致类与…

Vue--》自定义指令的使用讲解

目录 自定义指令 自定义指令的分类 私有自定义指令&#xff1a; 全局自定义指令&#xff1a; 总结 自定义指令 vue官方提供了v-text、v-for、v-model、v-if等常用的指令&#xff0c;还允许开发者自定义指令。 自定义指令的分类 私有自定义指令&#xff1a; 在每个vue组…

[附源码]计算机毕业设计框架的食品安全监督平台的设计与实现Springboot程序

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

u-BOOT启动流程

1、u-boot入口&#xff1a;入口即第一行程序&#xff0c;程序的链接是由链接脚本决定的&#xff0c;编译uboot之后&#xff0c;可以在根目录下生成u-boot.lds文件 打开lds文件可以看到代码当前入口点&#xff1a; &#xff1a;_start&#xff0c;_start后面就是中断向量表&…

[附源码]Python计算机毕业设计Django演唱会门票售卖系统

项目运行 环境配置&#xff1a; Pychram社区版 python3.7.7 Mysql5.7 HBuilderXlist pipNavicat11Djangonodejs。 项目技术&#xff1a; django python Vue 等等组成&#xff0c;B/S模式 pychram管理等等。 环境需要 1.运行环境&#xff1a;最好是python3.7.7&#xff0c;…

股票接口怎样获取数据方便?

目前很多交易者对股票数据行情查询相关使用的系统也是很普遍&#xff0c;就比如说你查询A股的大秦铁路可以使用实时股票数据接口来获取它的实时股价&#xff0c;成交量&#xff0c;成交金额等情况。那么在这个过程中&#xff0c;股票接口是如何获取数据更方便呢&#xff1f;小编…

化工厂人员定位系统:聚焦化工安全问题,提升智慧管理水平

化工厂人员定位系统&#xff0c;以人员定位技术为核心&#xff0c;整合访客管理、出入口控制、地图、人脸识别、视频监控数据采集等各种管控技术&#xff0c;提供精准实时定位、轨迹查询、货物跟踪等功能&#xff0c;又称“智能化二道门人员管理系统”。 12月1日&#xff0c;鞍…

[附源码]计算机毕业设计剧本杀交流分享平台Springboot程序

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

Spring进阶(二十一)之循环Bean详解

目录 什么是循环依赖 检测是否存在循环依赖 Spring底层是如何解决循环依赖的问题 循环依赖无法解决的情况 为什么需要用3级缓存 问题 原因 案例 单例bean解决了循环依赖&#xff0c;还存在什么问题 什么是循环依赖 这个很好理解&#xff0c;多个bean之间相互依赖&#…

Python制作进度条,原来有这么多方法

如果你之前没用过进度条&#xff0c;八成是觉得它会增加不必要的复杂性或者很难维护&#xff0c;其实不然。要加一个进度条其实只需要几行代码。 在这几行代码中&#xff0c;我们可以看看如何在命令行脚本以及 PySimpleGUI UI 中添加进度条。 下文将介绍 4 个常用的 Python 进度…

TL431介绍及其应用电路

TL431介绍及其应用电路 硬件攻城狮 1. TL431简介 TL431是常用的三端并联稳压器&#xff0c;具有较好的热稳定性&#xff0c;输出电压可以设置为Vref~36V之间的任何值。被广泛用作基准源、比较器、运放等功能。在隔离电源中&#xff0c;TL431经常与光耦配合构成隔离反馈回路&…

PDF文件怎么合并?看完这篇就懂了!

不知道小伙伴们有没有这样的经历&#xff0c;那就是准备好一些pdf去打印店打印的时候&#xff0c;本来想要打印双面的&#xff0c;但是店家却表示pdf太小&#xff0c;只能一页一页的单页打印。这就给我们的钱包无形之中增加了很多的负担&#xff0c;因为有时候我们没必要打印单…

搜索与图论-有向图的拓扑序列

文章目录一、有向图的拓扑序列1. 拓扑序列2. 拓扑排序3. 如何进行拓扑排序4. 拓扑排序具体实现详见例题有向图的拓扑序列二、有向图的拓扑序列例题——有向图的拓扑序列具体实现1. 样例演示2. 实现思路3. 代码注解4. 实现代码一、有向图的拓扑序列 有向图的拓扑序列就是图的广…

遥感测深方法综述(二)CZMIL 机载LiDAR 测深系统

机载激光雷达测深测量是集激光测距、GNSS定位/姿态测量、航空摄影等多种技术于一体的新型主动机载激光测绘&#xff0c;可应用于海滩和海岸线、浅海编图、海岛、岛礁、水下障碍物的调查&#xff0c;是高效获取高精度近岸海底地形的重要技术&#xff0c;尤其对“人下不去、船上不…

31_ADC基本原理及单次采集实验

目录 ADC简介 STM32F10x ADC特点 ADC执行模式 相关寄存器及数据对齐方式 ADC的采样时间 常用库函数 单次转换一般步骤 实验源码 ADC简介 Analog-to-Digital Converter的缩写。指模/数转换器或者模拟/数字转换器。是指将连续变量的模拟信号转换为离散的数字信号的器件。…

Hylicos --- krprint实现

可变参函数的工作原理 函数调用时先用寄存器R0 ~R3 存放参数&#xff0c;如果不够放还要使用到堆栈&#xff0c;参数列表的形参从右到左依次入栈&#xff0c;弹栈时就是从左到右的顺序。 如果函数参数的个数固定&#xff0c;编译器就可以很清楚地在函数运行时依次从堆栈中弹出…

关于城市旅游的HTML网页设计 HTML+CSS上海博物馆网站 dreamweaver作业静态HTML网页设计 html网页制作期末大作业

&#x1f468;‍&#x1f393;静态网站的编写主要是用 HTML DⅣV CSSJS等来完成页面的排版设计&#x1f469;‍&#x1f393;&#xff0c;一般的网页作业需要融入以下知识点&#xff1a;div布局、浮动定位、高级css、表格、表单及验证、js轮播图、音频视频Fash的应用、uli、下拉…