自从CSS3引入了动画(transition和@keyframes,还有与之搭配的transform)之后,写动画也变的越来多越来越容易。

可是当我们遇到需要利用数学公式的复杂动画时,却一筹莫展,只能怪小时候数学没学好(可能是语文老师教的)。那么问题来了,但我拿到要实现这样的需求,该如何:

可能我们会去苦恼,加班熬夜的去补功课去解决,可是这样真的很费劲,那么,我们就来分析一下如何,快速解决

要想做出这样的动画,我们必先知道其运动的原理,不是吗,鉴于抛物线太多了,这里只对最简单的匀变速曲线运动做分享,看图:

好不容易找到了一张小图,是不是有点读高中物理课的感觉

运动原理可以分解为:水平方向匀速运动,垂直方向重力加速度运动

位移途径为: 1. (水平)s = vt 2.(垂直)h = gt*t/2

假如我们已起抛点为原点,就可以根据运行时间,计算出,物体x轴、y轴运行的距离,通过细时间间隔,利用css3属性tanslate3d(x,y,z)进行精细的位移,那么我们就能形成抛物线运动了, 那么我们试验一下。

代码块

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>抛物线</title>
<style>
body{background: #8fd5d5;} /******抛物线******/
.ball{
width:20px;
height:20px;
background:yellow;
-webkit-border-radius:%;
-moz-border-radius:%;
border-radius:%;
cursor:pointer
}
/********水平移动距离600 速度 200m/s 重力加速度的运动速度**************/
.tab span{
display:inline-block;
padding:10px;
color:#fff;
border:2px solid #59AEAE;
}
.animg{-webkit-animation:pao 3s linear both;}
.animg50{-webkit-animation:pao50 3s linear both;}
.animg100{-webkit-animation:pao100 3s linear both;}
@-webkit-keyframes pao{
%{-webkit-transform:translate3d(0px,,)}
%{-webkit-transform:translate3d(60px,.45px,)}
%{-webkit-transform:translate3d(120px,.8px,)}
%{-webkit-transform:translate3d(180px,.05px,)}
%{-webkit-transform:translate3d(240px,.2px,)}
%{-webkit-transform:translate3d(300px,.25px,)}
%{-webkit-transform:translate3d(360px,.2px,)}
%{-webkit-transform:translate3d(420px,.05px,)}
%{-webkit-transform:translate3d(480px,.8px,)}
%{-webkit-transform:translate3d(540px,36.45,)}
%{-webkit-transform:translate3d(600px,45px,)}
}
@-webkit-keyframes pao50{
%{-webkit-transform:translate3d(0px,,)}
%{-webkit-transform:translate3d(60px,.25px,)}
%{-webkit-transform:translate3d(120px,9px,)}
%{-webkit-transform:translate3d(180px,.25px,)}
%{-webkit-transform:translate3d(240px,36px,)}
%{-webkit-transform:translate3d(300px,.25px,)}
%{-webkit-transform:translate3d(360px,81px,)}
%{-webkit-transform:translate3d(420px,.25px,)}
%{-webkit-transform:translate3d(480px,144px,)}
%{-webkit-transform:translate3d(540px,182.25,)}
%{-webkit-transform:translate3d(600px,225px,)}
}
@-webkit-keyframes pao100{
%{-webkit-transform:translate3d(0px,,)}
%{-webkit-transform:translate3d(60px,.5px,)}
%{-webkit-transform:translate3d(120px,18px,)}
%{-webkit-transform:translate3d(180px,.5px,)}
%{-webkit-transform:translate3d(240px,72px,)}
%{-webkit-transform:translate3d(300px,.5px,)}
%{-webkit-transform:translate3d(360px,162px,)}
%{-webkit-transform:translate3d(420px,.5px,)}
%{-webkit-transform:translate3d(480px,288px,)}
%{-webkit-transform:translate3d(540px,364.5,)}
%{-webkit-transform:translate3d(600px,450px,)}
} .margin{margin-top:450px}
</style>
</head>
<body>
<h2>抛物线运动曲线 水平移动距离600px 速度 200px/s 默认垂直方向为重力加速度</h2>
<div class="tab">
<span class="sg">垂直方向重力加速度</span>
<span class="sg50">垂直方向50px/s</span>
<span class="sg100">垂直方向100px/s</span>
</div>
<div class="ball sg"></div> <script type="text/javascript">
document.querySelector(".sg").onclick =function(){ document.querySelector(".ball").className = "ball animg"}
document.querySelector(".sg50").onclick =function(){ document.querySelector(".ball").className = "ball animg50"}
document.querySelector(".sg100").onclick =function(){ document.querySelector(".ball").className = "ball animg100"}
</script>
</body>
</html>

在演示效果中,我们发现,水平方向匀速运动一定,垂直方向的加速度越大时,所细分的做出的动画抛物线效果越不好,得出结论就是我们为了保持更好的抛物线效 果,时间比例细分越小,移动的距离越精细,抛物线效果动画越好。可是,问题来了,为了做精细的抛物动画,给我们带来的问题,就是要花更多的时间去计算精细 的值,可这非常需要时间……

为了更好的解决以上的这个问题,分享一款更好用的动画神器—Stylie 用户界面简洁大方,使用简单

页面打开以后很简单,蓝色的网格背景上面,两个绿色的十字中间连着一根黄色的线,上面有一个白色小球不断地从左边滑动到右边(还称不上滚动),下面有一个进度条,右边有一个操作面板。

Keyframes标签设置面板:

1.第一个0ms处表示起点相关信息,第二个2000ms处表示2000ms处断点的相关信息;

2.第一个0ms处表示起点相关信息,第二个2000ms处表示2000ms处断点的相关信息;

3.X和Y分别表示横坐标及纵坐标(其实你也可以用鼠标去拖绿色的十字…);

4.S表示缩放倍率(默认是1);

5.rX、rY、rZ分别表示物体沿X、Y、Z轴的旋转角度(具体哪个轴是哪个可以在上面填写数字自己尝试,出于便于观察的理由建议填写180。当然你也可以按住Shift键,拖,但是我觉得这样很不好控制…);

6.linear表示线性的…这一栏是自定义缓动曲线(Easing curves)

Motion是自定义缓动曲线运动轨迹,可以在Keyframes选择里面添加你自定义的运动轨迹。

我觉得这个神器最牛逼的功能在于,缓动曲线功能所有的数值,都!可!以!定义缓动,让我们轻松完成抛物线运动动画。

神器地址:http://jeremyckahn.github.io/stylie/

 

stylie工具轻松搞定css3抛物线动画的更多相关文章

  1. 【转】轻松搞定FTP之FlashFxp全攻略

    转载网址:http://www.newhua.com/2008/0603/39163.shtml 轻松搞定FTP之FlashFxp全攻略 导读: FlashFXP是一款功能强大的FXP/FTP软件,融 ...

  2. Webcast / 技术小视频制作方法——自己动手录制video轻松搞定

    Webcast / 技术小视频制作方法——自己动手录制video轻松搞定 http://blog.sina.com.cn/s/blog_67d387490100wdnh.html 最近申请加入MSP的 ...

  3. 【微服务】之三:从零开始,轻松搞定SpringCloud微服务-配置中心

    在整个微服务体系中,除了注册中心具有非常重要的意义之外,还有一个注册中心.注册中心作为管理在整个项目群的配置文件及动态参数的重要载体服务.Spring Cloud体系的子项目中,Spring Clou ...

  4. 【微服务】之四:轻松搞定SpringCloud微服务-负载均衡Ribbon

    对于任何一个高可用高负载的系统来说,负载均衡是一个必不可少的名称.在大型分布式计算体系中,某个服务在单例的情况下,很难应对各种突发情况.因此,负载均衡是为了让系统在性能出现瓶颈或者其中一些出现状态下可 ...

  5. PDF怎么旋转页面,只需几步轻松搞定!

    有时候我们下载一个PDF文件里面有页面是旋转的情况,用手机看的时候可以把手机旋转过来看,那么用电脑的时候总不可能也转过来看吧,笔记本是可以的台式的是不行的,这个时候我们就需要把PDF文件中旋转的页面转 ...

  6. 轻松搞定RabbitMQ(六)——主题

    转自 http://blog.csdn.net/xiaoxian8023/article/details/48806871 翻译地址:http://www.rabbitmq.com/tutorials ...

  7. 基于 CODING 轻松搞定持续集成

    点击观看视频教程 带你一步一步搞定 CODING 持续集成 持续集成加速软件交付 持续集成这个概念是由 Grady Booch 在 1991 年首次提出,随后成为了 DevOps 的核心实践之一.持续 ...

  8. 春节过后就是金三银四求职季,分享几个Java面试妙招,轻松搞定HR!

    春节过后就是金三银四,分享几个Java面试妙招,轻松搞定HR! 2020年了,先祝大家新年快乐! 今年IT职位依然相当热门,特别是Java开发岗位.软件开发人才在今年将有大量的就业机会.春节过后,金三 ...

  9. 盘它!基于CANN的辅助驾驶AI实战案例,轻松搞定车辆检测和车距计算!

    摘要:基于昇腾AI异构计算架构CANN(Compute Architecture for Neural Networks)的简易版辅助驾驶AI应用,具备车辆检测.车距计算等基本功能,作为辅助驾驶入门级 ...

随机推荐

  1. Redis面试题及答案整理

    1.什么是Redis?简述它的优缺点? Redis的全称是:Remote Dictionary.Server,本质上是一个Key-Value类型的内存数据库,很像memcached,整个数据库统统加载 ...

  2. Unity Shader-描边效果

    原文链接:http://blog.csdn.net/puppet_master

  3. 超强OCR文字识别软件首选ABBYY FineReader

    提到纸质文档—转换—文本格式—可编辑这些字眼,相信大家的第一反映都是OCR文字识别软件,如何排除错误或利用辅助信息提高识别正确率,是OCR最重要的课题,衡量一个OCR系统性能好坏的主要指标无非是精确度 ...

  4. mysql执行SQL语句时报错:[Err] 3 - Error writing file '/tmp/MYP0G1B8' (Errcode: 28 - No space left on device)

    问题描述: 今天一同事在mysql中执行SQL语句的时候,报了/tmp空间不足的问题,报错如下: [SQL] SELECT f.prov as 字段1, MAX( CASE f.flag_name W ...

  5. 06-Linux RPM 命令参数使用详解

    rpm 执行安装包二进制包(Binary)以及源代码包(Source)两种.二进制包可以直接安装在计算机中,而源代码包将会由 RPM自动编译.安装.源代码包经常以src.rpm作为后缀名. 常用命令组 ...

  6. JavaScript之 for...in

    for-in 可以用来枚举对象的属性,还有数组的索引,用法: 枚举对象属性 var o={name:'a',age:25,sex:'male'} for(var each in o){ console ...

  7. Spark-scala-API

    1.sc.version2.集群对象:SparkContext:获得Spark集群的SparkContext对象,是构造Spark应用的第一步!SparkContext对象代表 整个 Spark集群, ...

  8. RF-获取上个月份

    验证1: case ${NowDate} set variable 20170103 ${year} set variable ${NowDate[0:4]} ${month} set variabl ...

  9. Android开发-- 简单对话框

    final Builder builder = new AlertDialog.Builder(this); builder.setIcon(R.drawable.appicns_folder_sma ...

  10. ldap命令

    ldapadd  -x   进行简单认证 -D   用来绑定服务器的DN -h   目录服务的地址 -w   绑定DN的密码 -f   使用ldif文件进行条目添加的文件 -W 交互式输入DN的密码 ...