主要实现以下几种简单的动画效果(其实原理基本相同):

1.匀速动画:物体的速度固定

2.缓动动画:物体速度逐渐变慢

3.多物体动画

4.透明度动画

效果实现:

1.匀速动画(以物体左右匀速运动为例)

动画效果主要是用定时器setInterval()来实现的,每隔几毫秒让物体移动一点距离,通过不断调用定时器来达到让物体运动的效果。

将定时器放在一个函数内,定义物体的运动速度speed为10,判断物体的运动方向(向左走或向右走)来规定speed的正负;

然后将 物体的offsetLeft加上速度speed 赋值给物体的left样式值(要给物体设置定位);

当物体到达目标位置时清除定时器;

   var box = document.querySelector('.box'); // 获取box盒子
  box.addEventListener("mouseover", function() {
   animate(400); // 当鼠标经过盒子时,让盒子运动到400的位置
  });
  var timer = null; // 声明一个变量来存储定时器
  function animate(target) { // target 目标位置
  clearInterval(timer); // 开启定时器前要先关闭上一个定时器,不然定时器会累加导致速度越来越快
  timer = setInterval(function() {
  var speed = 10; // 速度 固定值10
  speed = box.offsetLeft < target ? speed : - speed; // 判断是向左走(负)还是向右走(正)
  if(box.offsetLeft == target) {
  clearInterval(timer); // 盒子到达目标值时清除定时器
  } else {
  box.style.left = box.offsetLeft + speed + 'px';
  }
  },25)
  }

2.缓动动画(和匀速运动相同原理,只不过速度做些改变)

让速度等于 目标值和当前位置之差/10,二者之差会越来越小,即速度speed也会越来越小;

二者之差除以十并不总是整数,可能会导致物体位置和目标值不能完全相等,所以需要对speed进行取整,大于0向上取整,小于0向下取整;

     var box = document.querySelector('.box');
box.addEventListener("mouseover", function() {
animate(400);
});
var timer = null;
function animate(target) {
clearInterval(timer);
timer = setInterval(function() {
var speed = (target - box.offsetLeft) / 10; // 速度为目标值和当前位置之差/10
speed = speed > 0 ? Math.ceil(speed) : Math.floor(speed); // 判断speed的正负,大于0向上取整,小于0向下取整
if(box.offsetLeft == target) {
clearInterval(timer);
} else {
box.style.left = box.offsetLeft + speed + 'px';
}
}, 25)
}

3.多物体动画(相同原理,不过要多开器几个定时器)

因为有多个物体要做动画,所以要给每个物体都要开启一个定时器,向上边那样只声明一个timer是不行的,

所以要循环遍历每个li(我是用列表写了几个小盒子),给每个li声明一个timer来存储各自的定时器,

并且要给animate函数多添加一个形参obj来区分是哪个盒子的定时器

     var lis = document.querySelectorAll('li');
for(var i = 0; i < lis.length; i++) { // 循环遍历li
lis[i].timer = null; // 给每个li声明一个timer来存储定时器
lis[i].addEventListener("mouseover", function() {
animate(this, 400);
});
}
function animate(obj, target) {
clearInterval(obj.timer);
obj.timer = setInterval(function() {
var speed = (target - obj.offsetLeft) / 10;
speed = speed > 0 ? Math.ceil(speed) : Math.floor(speed);
if(obj.offsetLeft == target) {
clearInterval(obj.timer);
} else {
obj.style.left = obj.offsetLeft + speed + 'px';
}
}, 25)
}

4.透明度动画(与匀速运动相似)

声明一个alpha变量来存储当前的透明度,speed为速度,当前透明度加速度 赋值给盒子的透明度样式。

(多个物体透明度也是和上边多物体动画一样的,给每个物体都添加一个定时器,并给animate函数多一个形参obj)

 <style>
.box {
width: 200px;
height: 200px;
background-color: #f00;
opacity: 0.3;
filter: alpha(opacity = 30); /* 兼容IE8及以下的IE浏览器 */
}
</style>
<script>
window.addEventListener('load', function() {
var box = document.querySelector('.box');
box.addEventListener('mouseover', function() {
animateAlpha(100); // 鼠标经过盒子 透明度变为1
})
box.addEventListener('mouseout', function() {
animateAlpha(30); // 鼠标离开透明度变为0.3
})
var alpha = 30; // 存储当前透明度 初始值为30
var timer = null;
function animateAlpha(target) {
clearInterval(timer);
timer = setInterval(function() {
var speed = 10;
speed = alpha < target ? speed : - speed; // 判断速度的正负
if(alpha == target) {
clearInterval(timer);
} else {
alpha += speed;
/* 这里有两个样式都需要改变 */
box.style.filter = 'alpha(opacity = '+ alpha +')';
box.style.opacity = alpha / 100; // opacity别忘了除以100
}
}, 25);
}
})
</script>

js简单动画:匀速动画、缓动动画、多物体动画以及透明度动画的更多相关文章

  1. EaseType 缓动函数

    EaseType(动画曲线) EaseType 缓动函数或者我习惯叫它动画曲线,在很多的软件或动画中都有涉及到,下面是摘取的一些资料: 缓函数图例 Tween效果 每一幅图像当鼠标移上去,会有路径效果 ...

  2. JS动画之缓动函数分析及动画库

    上一篇讲了JS动画定时器相关知识,这一篇介绍下缓动函数及流行的动画库. 熟悉的图 实际使用 jquery animate()+jquery.easing插件的使用: $(selector).anima ...

  3. js off 缓动动画

    动画也有很多种,一起来学习,缓动动画吧 缓动动画 1.缓动动画原理=盒子位置+(目标盒子位置-现在盒子位置)/10 2.步长越来越小 3.让步长越来越小的公式      步长=(目标位置-本身位置)/ ...

  4. 奇思妙想 CSS 3D 动画 | 仅使用 CSS 能制作出多惊艳的动画?

    本文将从比较多的方面详细阐述如何利用 CSS 3D 的特性,实现各类有趣.酷炫的动画效果.认真读完,你将会收获到: 了解 CSS 3D 的各种用途 激发你新的灵感,感受动画之美 对于提升 CSS 动画 ...

  5. pixi.js 简单交互事件(点击、缩放、平移)

    注意:本文代码使用的Pixi.js版本为PixiJS 5.3.3 pixi中常用的鼠标交互事件: //兼容鼠标和触摸屏的共同触发 type InteractionPointerEvents = &qu ...

  6. 软件项目技术点(1)——Tween算法及缓动效果

    AxeSlide软件项目梳理   canvas绘图系列知识点整理 Tween算法及缓动效果 软件里在切换步序时需要有过渡动画效果,从当前位置的画面缓动到目标位置的画面.动画效果可重新查看文章系列第一篇 ...

  7. window.requestAnimationFrame与Tween.js配合使用实现动画缓动效果

    window.requestAnimationFrame 概述 window.requestAnimationFrame()这个方法是用来在页面重绘之前,通知浏览器调用一个指定的函数,以满足开发者操作 ...

  8. tween.js缓动(补间动画)

    一.理解tween.js 如果看到上面的已经理解了,可以跳过下面的部分.下面为对Tween.js的解释 下面就介绍如何使用这个Tween了,首先b.c.d三个参数(即初始值,变化量,持续时间)在缓动开 ...

  9. JS实现缓动动画效果

    原理如下: 假设要从数值A变化到数值B,如果是线性运动,则每次移动距离是一样:如果是缓动,每次移动距离不一样.那如何才能不一样呢?很简单,按比例移动就可以. 例如:每次移动剩余距离的一半. 对吧,超容 ...

随机推荐

  1. webpack4打包的一些坑

    1.安装webPack看官方文档就可以了,主要是打包,我安装的是4+以上的 官网中文教程:https://www.webpackjs.com/guides/installation/ 2.我是在php ...

  2. es3设置属性不能修改

    /*es3*/ { var Person =function () { var data ={ name:'zs', sex:'男', age:18 } this.get=function (key) ...

  3. Spring Cloud Alibaba(五)RocketMQ 异步通信实现

    本文探讨如何使用 RocketMQ Binder 完成 Spring Cloud 应用消息的订阅和发布. 介绍 RocketMQ 是一款开源的分布式消息系统,基于高可用分布式集群技术,提供低延时的.高 ...

  4. java 数组注意细节,例子解析

    1. int x[]; 或int [] x; 此时却无物理的存在数组.需:数组名= new 数组元素类型[size]: a = new int [10]; 2. 不能使用任何未初始化的数组. 默认的初 ...

  5. 少用float浮动?

    在css中,float 属性定义元素在哪个方向浮动.也是我在css样式中常用到的属性,后来浏览了一些公司项目代码,发现float属性极少有人使用.随后做了一些调查和研究: 1.在ie6以下,float ...

  6. 腾讯iphone面试题(转)

    1Objective-C内部的实现 2CALayer和View的关系 3 http协议,tcp/ip 4 UITableView的那些元素是可以自定义的? 5 c语言的,定义变量,比如int,在什么情 ...

  7. springboot+apache前后端分离部署https

    目录 1. 引言 2. 了解https.证书.openssl及keytool 2.1 https 2.1.1 什么是https 2.1.2 https解决什么问题 2.2 证书 2.2.1 证书内容 ...

  8. Scrapy爬虫及案例剖析

    由于互联网的极速发展,所有现在的信息处于大量堆积的状态,我们既要向外界获取大量数据,又要在大量数据中过滤无用的数据.针对我们有益的数据需要我们进行指定抓取,从而出现了现在的爬虫技术,通过爬虫技术我们可 ...

  9. 华为云备案服务全面升级,EI助力带来极速体验

    华为云备案"电子化核验"正式发布,备案更轻松.更快捷.自2019年9月12日起,华为云用户申请办理ICP备案可以通过华为云APP进行"ICP备案主体真实身份信息采集&qu ...

  10. luogu P2296 寻找道路 |最短路

    题目描述 在有向图 G 中,每条边的长度均为 1,现给定起点和终点,请你在图中找一条从起点到终点的路径,该路径满足以下条件: 路径上的所有点的出边所指向的点都直接或间接与终点连通. 在满足条件 1 的 ...