概述
学习内容:动画实现原理,动画函数简单封装,缓动动画原理,动漫函数添加回调函数
学习笔记:
动画实现原理
核心原理:通过定时器setInterval()不断移动盒子位置
实现步骤:
1.获得盒子当前的位置
2.让盒子在当前位置上加上一个移动距离
3.利用定时器不断重复这个操作
4.加一个结束定时器的条件
5.注意此元素需要添加定位,才能使用element.style.left
实例:
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title></title>
<style type="text/css">
.box {
position: absolute;
left: 0;
width: 100px;
height: 120px;
background-color: pink;
}
</style>
</head>
<body>
<div class="box"></div>
<script type="text/javascript">
var div=document.querySelector('div');
var timer=setInterval(function () {
if(div.offsetLeft >= 100) {
//停止动画本质是停止计时器
clearInterval(timer);
}
div.style.left=div.offsetLeft + 3 + 'px';//offsetLeft获取元素位置
},100);
</script>
</body>
</html>
动画函数简单封装
函数需要传递两个参数,动画对象和移动到的距离
为了防止过多定时器开启执行,我们可以先清除以前的定时器,只保留当前的一个定时器执行
只需要在函数里的第一句加上清除定时器语句就可以
clearInterval(obj.timer);
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title></title>
<style type="text/css">
.box {
position: absolute;
left: 0;
width: 100px;
height: 120px;
background-color: pink;
}
</style>
</head>
<body>
<div class="box"></div>
<script type="text/javascript">
//函数封装 obj对象 target 目标位置
function animate(obj,target) {
clearInterval(obj.timer);
obj.timer=setInterval(function () {
if(obj.offsetLeft >= target) {
//停止动画本质是停止计时器
clearInterval(obj.timer);
}
obj.style.left=obj.offsetLeft + 3 + 'px';//offsetLeft获取元素位置
},100);
}
var div=document.querySelector('div');
//调用函数
animate(div,300);
</script>
</body>
</html>
缓动动画原理
缓动动画就是让元素运动速度有所变化,最常见的就是让速度慢慢停下来
思路:
1.让盒子每次移动的距离慢慢变小,速度就会慢慢降下来
2.核心算法:(目标值-现在的位置)/10 作为每次移动的距离步长
3.停止条件是:让当前盒子位置等于目标位置就停止计时器
缓动动画基本代码实现
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title></title>
<style type="text/css">
.box {
position: absolute;
left: 0;
width: 100px;
height: 120px;
background-color: pink;
}
</style>
</head>
<body>
<button class="btn300">300</button>
<button class="btn500">500</button>
<div class="box"></div>
<script type="text/javascript">
//函数封装 obj对象 target 目标位置
function animate(obj,target) {
obj.timer=setInterval(function () {
var step=(target-obj.offsetLeft) / 10;
//把步长值改为整数 如果大于0往大的取 如果小于0 往小的取
step=step > 0 ? Math.ceil(step) : Math.floor(step);
if(obj.offsetLeft == target) {
//停止动画本质是停止计时器
clearInterval(obj.timer);
}
obj.style.left=obj.offsetLeft + step + 'px';//offsetLeft获取元素位置
},15);
}
var div=document.querySelector('div');
var btn300=document.querySelector('.btn300');
var btn500=document.querySelector('.btn500');
//调用函数
btn300.addEventListener('click',function() {
animate(div,300);
})
btn500.addEventListener('click',function() {
animate(div,500);
})
//animate(div,300);
</script>
</body>
</html>
动漫函数添加回调函数
回调函数原理:
函数可以作为一个参数,将这个函数作为参数传到另一个函数里面,当那个函数执行完之后,再执行传进去的这个函数.这个过程就叫做回调.
回调函数写的位置:定时器结束的位置
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title></title>
<style type="text/css">
.box {
position: absolute;
left: 0;
width: 100px;
height: 120px;
background-color: pink;
}
</style>
</head>
<body>
<button class="btn300">300</button>
<button class="btn500">500</button>
<div class="box"></div>
<script type="text/javascript">
//函数封装 obj对象 target 目标位置
function animate(obj,target,callback) {
obj.timer=setInterval(function () {
var step=(target-obj.offsetLeft) / 10;
//把步长值改为整数 如果大于0往大的取 如果小于0 往小的取
step=step > 0 ? Math.ceil(step) : Math.floor(step);
if(obj.offsetLeft == target) {
//停止动画本质是停止计时器
clearInterval(obj.timer);
//回调函数写到定时器结束里面
if(callback) {
//调用函数
callback();
}
}
obj.style.left=obj.offsetLeft + step + 'px';//offsetLeft获取元素位置
},15);
}
var div=document.querySelector('div');
var btn300=document.querySelector('.btn300');
var btn500=document.querySelector('.btn500');
//调用函数
btn300.addEventListener('click',function() {
animate(div,300);
})
btn500.addEventListener('click',function() {
animate(div,500,function(){
div.style.backgroundColor = "RED";
});
})
//animate(div,300);
</script>
</body>
</html>
最后
以上就是真实豆芽为你收集整理的动画函数使用的全部内容,希望文章能够帮你解决动画函数使用所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复