1.思索:頁面上有一個寬高都為100px的盒子,假如想點擊此盒子,讓它的寬變成300px,應當怎麼做 ?
思緒一:挑選用js的點擊事宜做,給盒子增加類名,並在類名中寫對應的css款式。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<style>
#box{
width: 100px;
height: 100px;
background: red;
transition: 1s;
}
#box.c{
width: 300px;
}
</style>
</head>
<body>
<div id="box"></div>
<script>
var box=document.getElementById("box");
console.log(box);
box.onclick=function () {
console.log(1);
this.className="c";
}
</script>
</body>
</html>
思緒二:運用定時器做,讓盒子的寬度每20毫秒加5px。直到盒子的寬度大於或着即是300px。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<style>
#box{
width: 100px;
height: 100px;
background: red;
}
</style>
</head>
<body>
<div id="box"></div>
<script>
var box=document.getElementById("box");
box.onclick=function () {
var num=5;
var w=parseFloat(getComputedStyle(box).width);
var timer=setInterval(function () {
w+=5;
if(w>=300){
clearInterval(timer);
w=300
}
box.style.width=w+"px";
},20)
}
</script>
</body>
</html>
將思緒二封裝成函數,使的每一個元素都能夠運用。比方還轉變盒子的高度值,能夠轉變傳入的參數值。
<script>
var box=document.getElementById("box");
//Element:頁面中哪一個元素
//attr:元素的哪一個屬性
//step:每一個周期轉變若干
//target:元素的目標值
function move(element,attr,step,target) {
var now=parseFloat(getComputedStyle(element)[attr]);
var timer=setInterval(function () {
now+=step;
if(now>=target){
clearInterval(timer);
now=target
}
element.style[attr]=now+"px";
},20)
}
box.onclick=function () {
move(box,"width",5,300);
}
</script>
2.有時候需要在劃定時候完成寬的變大或許變小。
比方需要在2秒完成,盒子從寬100px到0
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<style>
#box{
width: 100px;
height: 100px;
background: red;
}
</style>
</head>
<body>
<div id="box"></div>
<script>
var box=document.getElementById("box");
//Element:頁面中哪一個元素
//attr:元素的哪一個屬性
//target:元素的目標值
//duration:持續時候
function move(element,attr,target,duration) {
var star=parseFloat(getComputedStyle(element)[attr]);//出發點
var c=target-star;//c示意總旅程
var t=duration;//所需時候
var starTime=new Date().getTime();//最先時候
var timer=setInterval(function () {
var nowTime=new Date().getTime();//如今時候
var takeTime=nowTime-starTime;//消費時候
if(takeTime>=t){
clearInterval(timer);
takeTime=t;
}
var now=c/t*takeTime+star;//旅程/時候*已消費時候+底本寬度=那一刻的寬度(跟旅程公式一樣)
element.style[attr]=now+"px";
},20)
}
box.onclick=function () {
move(box,"width",0,5000);
}
</script>
</body>
</html>