【css】落叶飘动效果,点击落叶飘动停止

2023-11-03

做项目有个需求是要求做落叶下落效果,做了一下。整体是依靠css中animation属性来控制的,@keyframes move控制动画轨迹,使用伪元素checked控制动画运行和暂停。

css3文档中有这样的例子,利用伪元素checked控制动画效果的运行和暂停:跳转链接

这种动画实现效果是一个指定元素按照指定路线去进行来回往复线性运动,代码如下
(HTML部分):

<input id="stop" type="radio" name="playAnimation"/>
<input id="play" type="radio" name="playAnimation"/>

<div class="box">
    <label for="stop">
        <div class="btn">stop</div>
    </label>
    <label for="play">
        <div class="btn">play</div>
    </label>
</div>

<div class="animation"></div>

(SCSS部分)

.animation {
    width: 100px;
    height: 100px;
    margin: 50px auto;
    background: deeppink;
    animation: move 2s linear infinite alternate;
}

input {
    display: none;
}

@keyframes move {
    0% {
        transform: translate(-100px, 0);
    }
    100% {
        transform: translate(100px, 0);
    }
}

.btn {
    width: 50px;
    margin: 10px auto;
    text-align: center;
    border:1px solid #ddd;
    padding: 10px;
    border-radius: 5px;
    cursor:pointer;
    
    &:hover {
        background: #ddd;
        color: #333;
    }
    
    &:active {
        background: #aaa;
    }
}

#stop:checked ~ .animation {
    animation-play-state: paused;
}
#play:checked ~ .animation {
    animation-play-state: running;
}

其实里面的核心代码主要就是animation动画效果、@keyframes move控制轨迹两者。
@keyframes move中0% 15% 85% 90% 100%…指的是在整段动画效果中,你的动画到达这个阶段的运动状态,比如0%就是动画未开始运行的初始状态、100%就是动画全部进行了完成结束后的状态。

三种控制动画暂停和启动方式hover、target、checked:
1.hover控制:

.stop:hover ~ .animation {
    animation-play-state: paused;
}

2.target控制

#stop:target ~ .animation {
    animation-play-state: paused;
}
#play:target ~ .animation {
    animation-play-state: running;
}

3.checked控制

#stop:checked ~ .animation {
    animation-play-state: paused;
}
#play:checked ~ .animation {
    animation-play-state: running;
}

以上的例子可以实现简单的元素下落效果,通过label的for绑定固定id来决定点击按钮是运行还是暂停,例子上是有两个按钮分别控制,但我自己的需求是要求点击滑动中的元素控制动画是否运行,所以需要改进一下。
我目前是用vue写的,所以进行了一下改造,通过一个button动态for绑定来判断是运行还是暂停,又因为需要点击单个元素,控制单个元素的动画效果,不能影响其他元素的动画,所以要加个id判断,具体实现代码如下(下方图片路径我是放在阿里oss上的,用vuex.store.state获取的前置路径,所以写的时候具体到底用什么路径具体看待):

<template>
  <div>
    <input id="stop" type="radio" name="playAnimation"/>
    <input id="play" type="radio" name="playAnimation"/>

    <div v-for="(item, index) in chooseList" :key="index">
      <div :class="!clickList.includes(index+1)?'animation':'animation1'"
           :style="{
              'margin': item.itemMargin,
              'animation-duration': item.duration + 's',
              'display': 'flex',
              'align-items': 'center',
              'justify-content': 'center',
              'color': '#333333'
           }" @click="onChange(item.id)">
        <img style="width: 90px; height: 90px;" :src="item.itemImage"/>
        <div v-if="clickList.includes(index+1)">{{item.id}}</div>
      </div>
    </div>
  </div>
</template>

<script>
import {shuffle} from "@/utils/shuffle";
export default {
  name: "downFull",
  data() {
    return {
      clickIndex: 1,
      chooseList: [
        {
          id: 1,
          itemMargin: '3px auto 0',
          itemImage: this.$store.state.imgApiWeb + "/images/gameLevel29/wintersweet/r3.png ",
          duration: 5,
        },
        {
          id: 2,
          itemMargin: '3px 500px 0',
          itemImage: this.$store.state.imgApiWeb + "/images/gameLevel29/wintersweet/b1.png ",
          duration: 6,
        },
        {
          id: 3,
          itemMargin: '3px 300px 0 1550px',
          itemImage: this.$store.state.imgApiWeb + "/images/gameLevel29/wintersweet/r1.png ",
          duration: 7,
        },
        {
          id: 4,
          itemMargin: '3px 200px 0 750px',
          itemImage: this.$store.state.imgApiWeb + "/images/gameLevel29/wintersweet/w3.png ",
          duration: 8,
        },
        {
          id: 5,
          itemMargin: '3px 100px 0 1250px',
          itemImage: this.$store.state.imgApiWeb + "/images/gameLevel29/wintersweet/r.png ",
          duration: 9,
        },
      ],
      clickList: [],
    }
  },
  mounted() {
    // this.chooseList = shuffle(this.chooseList);
  },
  methods: {
    onChange(item) {
      console.log('i click it!', item);
      this.clickList.push(item);
      this.clickIndex = item.id;
    }
  }
}
</script>

<style lang="scss" scoped>
.animation {
  width: 50px;
  height: 50px;
  //margin: 50px auto;
  //background: deeppink;
  animation: move linear 1 normal forwards;
  animation-play-state: running;
}

.animation1 {
  width: 50px;
  height: 50px;
  //margin: 50px auto;
  //background: deeppink;
  animation: move linear 1 normal forwards;
  animation-play-state: paused;
}

input {
  display: none;
}

@keyframes move {
  0% {
    transform: translate(-75px, 0px) rotate(0deg);
  }
  25% {
    transform: translate(75px, 250px) rotate(45deg);
  }
  50% {
    transform: translate(0, 450px) rotate(0deg);
  }
  75% {
    transform: translate(-75px, 550px) rotate(-45deg);
  }
  100% {
    transform: translate(0, 680px) rotate(0deg);
  }
}

.btn {
  margin: 10px auto;
  text-align: center;
  border: 1px solid #ddd;
  padding: 10px;
  border-radius: 5px;
  cursor: pointer;

  &:hover {
    background: #ddd;
    color: #333;
  }

  &:active {
    background: #aaa;
  }
}

#stop:checked ~ .animation {
  animation-play-state: paused;
}

#play:checked ~ .animation {
  animation-play-state: running;
}
</style>

通过transform的控制translateX轴和Y轴来决定轨迹长度和方向,用rotate控制元素的角度,来达成落叶飘落过程中旋转效果。

实现不难,看看文档可以了。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

【css】落叶飘动效果,点击落叶飘动停止 的相关文章

  • 整理 CSS 的最佳方法是什么? [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 我正在整理一个以前由不同的人修改过的网站 这是我拥有的页面的骨架 测试 html http pastry se 94064 nav css ht
  • 使用 Bootstrap 3 具有固定高度、标题和列宽度的表格

    我想要一张具有以下功能的表 固定标题 固定高度 带有可见的滚动条 3个固定宽度的列 一个大列和两个窄列 我开始使用 tbody display block overflow auto height 100px 为了至少获得固定高度 但此规则
  • HTML - 使用 JS 根据值更改文本颜色

    我正在使用 Django 创建一个以 HTML 形式显示的表格 我想当数字为负数时将数字的颜色更改为红色 当数字为正数时将数字的颜色更改为绿色 我知道我需要使用 JS 来实现这一点 但我无法让它工作 任何帮助将不胜感激 这是我的 Djang
  • 如何在 HTML 元素中使用 CSS 设置特定单词的样式?

    如何设置其中特定单词的样式 p 标签 前任 STUDIO X是有史以来最好的工作室 如何使用 css 将 STUDIO X 设为与 is the best studio ever 不同的字体 你应该做这个 p font size 12px
  • 缩放网页内容上的特定元素(HTML、CSS、JavaScript)

    如果用户在移动设备上缩放网站 我只想缩放网站的特定元素 某个 div 下图展示了我的想法 如您所见 测试已缩放 但顶部 div 保持相同大小 仅包含 test 的 div 被缩放 缩放 有人可以给我一些关于如何实现这一目标的提示吗 我真的不
  • 是否可以使用 jQuery UI 限制 selectmenu 小部件的高度?

    我一直在尝试通过设置来做到这一点size来源的属性select元素 但它被忽略了 小部件似乎没有任何高度设置选项 是否可以 该小部件当前在隐藏了溢出的 div 对话框内工作 因此下拉列表 始终为 26 个项目 会从 div 中消失 一些CS
  • 如何避免 Angular 材料中出现额外的 mat-form-field-underline

    我在查找为什么在使用组件时会出现额外的 mat form field underline 时遇到问题 我的页面使用此标记
  • Internet Explorer 9 中图像地图周围的蓝色边框

    我遇到了以下问题 我在网站上使用图像地图 在 Internet Explorer 9 IE8 很好 中 当我单击链接 区域标签 时 它周围会出现蓝色边框 如何摆脱它 我试过了 map map area border none importa
  • 使用尾随与号 (&) 作为类组合选择器,而不是后代选择器

    我想申请一个班级 highlight到一堆不同的元素并根据元素类型设置它们的样式 我可以这样做 input type text highlight select highlight someOtherSelector hightlight
  • 文本输入框作为 SVG 中的“foreignObject” - 文本溢出问题

    我使用 foreignObject 标签在 svg 中有一个文本输入框 这很有效 但是如果您在输入框中输入的内容比其宽度长 从而导致其溢出 那么文本实际上会出现在页面上的其他位置 可能是没有外来对象标记的默认位置 这是一些屏幕截图来解释正在
  • Bootstrap 手风琴菜单不起作用

    我设计了一个如图所示的手风琴菜单 如果单击菜单 打开的菜单将关闭 这就是手风琴的功能 但在这个设计中 我逐个单击菜单 但前一个没有关闭 如何解决这个问题 提前致谢 jQuery document ready function var acc
  • HTML5旋转动画——如何显示“硬币的另一面”?

    考虑到这个 JSFiddle 旋转示例 https jsfiddle net 194288aw HTML div class container div class coin div class face heads Hey div div
  • 如何使用 Cypress 定位没有 id 属性的嵌套输入?

    我正在为 React 项目编写 Cypress 测试 我需要能够瞄准
  • stripe checkout css内容策略错误

    我正在尝试创建一种形式条纹结账 https stripe com docs checkout在我的 Ionic 应用程序中 我创建了一个指令 将表单植入到我的内容视图中 但是当我运行它时 CSS 因违反内容策略而失败 checkout js
  • ReactTable 修复了最后一行

    我正在使用 ReactTable 最后我需要创建一些摘要 当分页存在时 它每次都应该可见 可以用react table来实现吗 我可以通过创建下一个表来部分解决这个问题 但我没有找到如何隐藏标题的方法 另一个问题是调整列宽度时 它不会应用于
  • 有 CSS 父选择器吗?

    我该如何选择 li 元素是锚元素的直接父元素 举个例子 我的 CSS 应该是这样的 li lt a active property value 显然 有多种方法可以使用 JavaScript 实现此目的 但我希望 CSS Level 2 本
  • 使用JQuery检查元素是否有边框?

    所以我正在玩 el css 尝试确定元素是否有边框 我用 css border style solid 设置边框 这是可行的 但实际上它设置了 4 种单独的样式 border right style border left style bo
  • 如何在表格的 tbody/thead 部分周围创建边框?

    我正在尝试创建一个包含表格数据的页面 该页面必须显示为多个表格 然而 我有两个相互冲突的要求需要解决 每个表格周围都必须有边框 每个表格的列宽必须能够根据内容重新调整大小 但是 所有表中的列宽必须一致 即列的大小基于所有表中该列中最大的单元
  • 删除

    好的 我有一个小菜单栏 菜单内的三个元素还有更多的子菜单 但是菜单栏中的元素之间有不必要的间距 而且我创建的子菜单有不必要的背景宽度 我在代码中将其涂成白色以使读者理解 由于这种不必要的宽度 即使鼠标悬停在不可见的宽度上 在本例中为白色 本
  • 为什么我的图像下方有空间? [复制]

    这个问题在这里已经有答案了 图像在下面获得了神秘的空白空间 即使padding 0 margin 0被应用 示范 http jsfiddle net cLETP 红色边框应该包围图像 但底部有空间 造成这种情况的原因是什么 如何删除该空间

随机推荐

  • JAVA线程池自定义拒绝策略以及利用反射获取任务参数

    目录 前言 线程池拒绝策略的触发条件 AbortPolicy拒绝并抛出异常 DiscardPolicy丢弃任务并不做任何操作 DiscardOldestPolicy丢弃最老的任务 CallerRunsPolicy调用主线程处理
  • 如何使用C#以编程方式将MPP文件转换为PDF?

    Microsoft Project文件用于组织和管理项目中的不同任务 您可以使用C 以编程方式将MPP文件转换为PDF 本文将介绍以下内容 使用C 以编程方式将MPP转换为PDF 在C 中将MPP转换为多页PDF 在C 中将MPP转换为受密
  • 高并发系统设计负载均衡架构

    菜菜哥 上次你给我讲的分库分表策略对我帮助很大 有帮助就好 上次请我的咖啡也很好喝 呵呵 不过随着访问量的不断加大 网站我又加了nginx做负载均衡 好呀 看来要进阶高级工程师啦 负载均衡也很简单呀 一个nginx就搞定了 现
  • mysql主从复制配置

    1 准备工作 主从数据库版本最好一致 主从数据库内数据保持一致 我的主从服务器的IP为 主服务器ip 192 168 84 128 从服务器ip 192 168 0 100 2 找到主数据库的配置文件my cnf 或者my ini 我的在
  • ubuntu 从18.04升级20.04用什么命令

    在 Ubuntu 18 04 中升级到 20 04 的命令是 sudo do release upgrade 使用这个命令之前建议先备份重要数据 因为升级过程中可能会有数据丢失的风险 然后输入密码进入升级模式 会提示确认是否升级 输入y 确
  • vs2013安装部署中没有visual studio installer

    vs2013安装部署中没有visual studio installer 下载安装Microsoft Visual Studio 2013 Installer Projects 下载地址 https marketplace visualst
  • LIF神经元膜电压公式-迭代式推导,及其在STBP中的应用

    膜电压公式 m d u d t
  • 利用ESP定律进行脱壳

    目录 预备知识 壳的概念 UPX PEiD OllyDbg 实验目的 实验环境 实验步骤一 实验步骤二 实验步骤三 预备知识 基础的汇编语言命令以及对汇编程序的基本审计能力 壳的概念 加壳的全称应该是可执行程序资源压缩 是保护文件的常用手段
  • 抖音api开放平台对接_抖音视频API解析接口

    发布抖音视频接口一枚 无限制免费调用 但需要AppKey 更新 2019 09 23 1 视频统计信息公开 2019 06 23 1 修复无水印解析失败BUG 2 接口返回内容调整 已获取视频播放量等统计信息 目前暂未公开 接口地址 htt
  • Connect was not declared in this scope

    QT程序中的事件机制是通过SIGNAL SLOT 信号 槽 来实现的 创建一个信号与槽的连接就是使用connect方法 它是QObject类下面的一个静态方法 基本上 所有的QT对象的基类都是QObject 所以 在非QObject的派生类
  • alsa-lib应用层接口分析

    ALSA lib接口调用简介 ALSA逻辑 在我当前看来 总共有两条线 1 录放音流控 2 amixer cset控件 录放音流控 自定义名称 相当于操作OSS的 dev dsp设备 可以设置三大参数等 并且启动录放音 这里 aplay m
  • Spring Boot底层原理详解及整合

    Spring Boot框架 通过Spring Boot 可以构建一个基于Spring框架的Java Application 简化配置 自动装配 开箱即用 JavaConfiguration用Java类代替XML的配置方式 Spring Bo
  • Java实现图的深度和广度优先遍历算法

    概述 最近要学习写网络爬虫 所以把图的深度和广度搜索都再温习一下 图结构展示 实现过程 首先 我们来看看图结构在代码中的实现 有三块逻辑 1 图中的节点 java view plain copy public class GraphNode
  • MongoDB(三):MongoDB图形化界面工具

    一 下载 MongoDBCompass 官方提供的 下载地址 https www mongodb com download center compass jmp docs 二 解压 启动 三 启动MongoDB 连接MongoDB服务 出现
  • Vue笔记——Vue组件中引入jQuery

    如果想在普通的HTML页面引入jQuer库的话 直接使用即可 但是如果要在Vue组件中使用jQuery库的话 使用这样的方式就不行了 需要使用以下方法 一 安装jQuery依赖 在使用jQuery之前 我们首先要通过以下命令来安装jQuer
  • Json字符串属性里面有逗号问题

    今天小编写 代码时候 后台给我返回的一个json字符串 name group id 123 所以不能通过name group id这样来 取值 不然会报没有id属性 看到这里相信很多程序员和小编一样肯定会骂后台传递的值不对 小编也是这样骂的
  • 快速排序详解(图解实例)

    快速排序 Quicksort 是对冒泡排序的一种改进 它的基本思想是 通过一趟排序将要排序的数据 分割成独立的两部分 其中一部分的所有数据都比另外一部分的所有数据都要小 然后再按此方法 对这两部分数据分别进行快速排序 整个排序过程可以递归进
  • 红外人体感应传感器SR602模块使用说明

    一 HC SR602模块 红外人体感应传感器HC SR602是基于红外线技术的自动控制模块 专用于感应周围人体的存在 该模块相较于HC SR501 灵敏度较高 抗干扰能力大 且简单易用 二 HC SR602模块主要参数 工作电压 3 3V
  • 使用手柄控制Unity及效果展示(1)

    Unity支持手柄的控制 效果图如下所示 这是一篇针对手柄控制U3D入门的过程记载 主要以实现功能为目的 分四个部分进行过程展示 Input System包的下载 设备的查找 Input Actions控件的使用 主要代码的解释及编写 这里
  • 【css】落叶飘动效果,点击落叶飘动停止

    做项目有个需求是要求做落叶下落效果 做了一下 整体是依靠css中animation属性来控制的 keyframes move控制动画轨迹 使用伪元素checked控制动画运行和暂停 css3文档中有这样的例子 利用伪元素checked控制动