1.思考:页面上有一个宽高都为100px的盒子,若是想点击此盒子,让它的宽变成300px,应该怎么作 ?css
思路一:选择用js的点击事件作,给盒子添加类名,并在类名中写对应的css样式。html
<!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>
将思路二封装成函数,使的每一个元素均可以使用。例如还改变盒子的高度值,能够改变传入的参数值。this
<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到0code
<!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>