动画效果如何实现
那么好,这次我们要讲解的就是利用dom事件和定时方法来实现一个简单的动画效果.
实现这个效果,一共分为三个步骤:
1.实现效果
2.实现点击切换位置
3.实现动画效果
样式
两个div,一个父div,一个子div,用position+relative+absolute定位实现左上角效果,两个按钮
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title></title>
<style>
#container {
width: 300px;
height: 300px;
background-color: blue;
position: relative;
}
#content {
width: 50px;
height: 50px;
background-color: red;
position: absolute;
left: 0;
top: 0;
}
</style>
</head>
<body>
<div id="container">
<div id="content"></div>
</div>
<button onclick="dianji()">setTimeout</button>
<button onclick="jidian()">setInterval</button>
</body>
</html>
dom切换位置
切换位置本质就是切换position的样式,用到的方法就是
document.getElementById("id").style.left='content'
<style>
#container {
width: 300px;
height: 300px;
background-color: blue;
position: relative;
}
#content {
width: 50px;
height: 50px;
background-color: red;
position: absolute;
left: 0;
top: 0;
}
</style>
<body>
<div id="container">
<div id="content"></div>
</div>
<button onclick="dianji()">setTimeout</button>
<button onclick="jidian()">setInterval</button>
<script>
function dianji(){
document.getElementById('content').style.left='250px'
document.getElementById('content').style.top='250px'
}
</script>
</body>
当点击的时候,我们通过dom文档对象的id的style来改变具体的样式,这里我们改的是absolute中的left和top.
定时器实现动态移动位置
setTimeout实现
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title></title>
<style>
#container {
width: 300px;
height: 300px;
background-color: blue;
position: relative;
}
#content {
width: 50px;
height: 50px;
background-color: red;
position: absolute;
left: 0;
top: 0;
}
</style>
</head>
<body>
<div id="container">
<div id="content"></div>
</div>
<button onclick="dianji()">setTimeout</button>
<button onclick="jidian()">setInterval</button>
<script>
let temp=0
function dianji(){
temp+=1;
setTimeout(()=>{
if(temp==1){
document.getElementById('content').style.left=0
document.getElementById('content').style.top=0
}
if(temp<=250){
document.getElementById('content').style.left=temp+'px'
document.getElementById('content').style.top=temp+'px'
dianji()
}else{
temp=0;
clearTimeout(temp)
}
},5)
}
</script>
</body>
</html>
setInterval定时
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title></title>
<style>
#container {
width: 300px;
height: 300px;
background-color: blue;
position: relative;
}
#content {
width: 50px;
height: 50px;
background-color: red;
position: absolute;
left: 0;
top: 0;
}
</style>
</head>
<body>
<div id="container">
<div id="content"></div>
</div>
<button onclick="dianji()">setTimeout</button>
<button onclick="jidian()">setInterval</button>
<script>
let temp = 0
function dianji() {
temp += 1;
setTimeout(() => {
if (temp <= 250) {
document.getElementById('content').style.left = temp + 'px'
document.getElementById('content').style.top = temp + 'px'
dianji()
} else {
temp = 0;
clearTimeout(temp)
}
}, 5)
}
function jidian() {
let id = setInterval(frame, 5)
function frame() {
temp += 1;
if (temp <= 250) {
document.getElementById('content').style.left = temp + 'px'
document.getElementById('content').style.top = temp + 'px'
} else {
temp = 0
clearInterval(id)
}
}
}
</script>
</body>
</html>