09-JavaScript 定时器 往复动画、滚动动画示例
定时器
1、制作动画
2、异步操作(等一下再执行)
3、函数缓冲与节流
类型及语法:
setTimeout 只执行一次的定时器
clearTimeout 关闭只执行一次的定时器
setInterval 反复执行的定时器
clearInterval 关闭反复执行的定时器
var time1 = setTimeout(myalert,2000);
var time2 = setInterval(myalert,2000);
clearTimeout(time1);
clearInterval(time2);
function myalert(){
alert("ok!");
}
<script> function myalert(){alert('ok!')} // 只执行一次的定时器,第一个参数是函数名,也可用匿名函数,第二个参数是时间,单位是毫秒,不写单位 var time1 = setTimeout(myalert,1000) // 关闭定时器 clearTimeout(time1) // 定义反复执行的定时器 var time2 = setInterval(myalert,1000) // 关闭定时器 clearInterval(time2) </script>
定时器动画:
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Document</title> <script> window.onload = function(){ var abox = document.getElementById("box"); ileft = 0; /* var timer = setInterval(moving,30); function moving(){ ileft += 3; abox.style.left = ileft + 'px'; } */ var timer = setInterval(function(){ ileft += 3; abox.style.left = ileft + 'px'; if(ileft>700){ clearInterval(timer); } },30); } </script> <style> .box{ width:200px; height:200px; background-color:gold; position:absolute; //盒子定位,left值才会生效,让定时器改变left值就生成动画 left:0; top:100px; } </style> </head> <body> <div class="box" id="box"></div> </body> </html>
往复运动动画示例:
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Document</title> <script> window.onload = function(){ var abox = document.getElementById("box"); var ileft = 0; var speed = 3; var timer = setInterval(function(){ ileft += speed; abox.style.left = ileft + 'px'; if(ileft>700){speed = -3;} if(ileft<0){speed = 3} },30) } </script> <style> .box{ width:200px; height:200px; background-color:gold; position: absolute; top:50px; left:0; } </style> </head> <body> <div class="box" id="box"></div> </body> </html>
无缝滚动动画:
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Document</title> <style> *{ margin:0; padding:0; } .list_con{ width:1000px; height:200px; border:1px solid #000; margin:10px auto 0; background-color:#f0f0f0; position:relative; overflow:hidden; } .list_con ul{ list-style:none; width:2000px; height:200px; position: absolute; left:0; top:0; } .list_con li{ width:180px; height: 180px; float:left; margin:10px 10px; } .btn_con{ position:relative; } .left,.right{ width:30px; height:30px; background-color:gold; position:absolute; left:100px; top:80px; font-size:30px; color:#000; text-align:center; cursor:pointer; border-radius:15px; opacity:0.5; line-height: 30px; } .left{ left:100px; top:80px; } .right{ left:1150px; top:80px; } </style> <script> window.onload = function(){ var oDiv = document.getElementById("slide"); var oUl = oDiv.getElementsByTagName("ul")[0]; var iLeft = 0; var iSpeed = -2 // 将ul里面的内容复制一份,整个ul里面包含了10个li: oUl.innerHTML = oUl.innerHTML + oUl.innerHTML; // 当ul向左滚动到第5个li时,瞬间将整个ul拉回到初始位置 function moving(){ iLeft += iSpeed; oUl.style.left = iLeft + 'px'; if(iLeft<-1000){iLeft=0} } var timer = setInterval(moving,30); } </script> </head> <body> <div class="btn_con"> <div class="left" id="btn01"><</div> <div class="right" id="btn02">></div> </div> <div class="list_con" id="slide"> <ul> <li><a href="#"><img src="images/goods02.jpg" alt=""></a></li> <li><a href="#"><img src="images/goods02.jpg" alt=""></a></li> <li><a href="#"><img src="images/goods02.jpg" alt=""></a></li> <li><a href="#"><img src="images/goods02.jpg" alt=""></a></li> <li><a href="#"><img src="images/goods02.jpg" alt=""></a></li> </ul> </div> </body> </html>
无缝滚动动画改进,点击左边箭头向左滚动,点右边的向右滚动:
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Document</title> <style> *{ margin:0; padding:0; } .list_con{ width:1000px; height:200px; border:1px solid #000; margin:10px auto 0; background-color:#f0f0f0; position:relative; overflow:hidden; } .list_con ul{ list-style:none; width:2000px; height:200px; position: absolute; left:0; top:0; } .list_con li{ width:180px; height: 180px; float:left; margin:10px 10px; } .btn_con{ position:relative; } .left,.right{ width:30px; height:30px; background-color:gold; position:absolute; left:100px; top:80px; font-size:30px; color:#000; text-align:center; cursor:pointer; border-radius:15px; opacity:0.5; line-height: 30px; } .left{ left:100px; top:80px; } .right{ left:1150px; top:80px; } </style> <script> window.onload = function(){ var oDiv = document.getElementById("slide"); var oBtn01 = document.getElementById("btn01"); var oBtn02 = document.getElementById("btn02"); // 通过标签获取元素,获取的选择集,加上下标才能获取到元素: var oUl = oDiv.getElementsByTagName("ul")[0]; var iLeft = 0; var iSpeed = -2 // 将ul里面的内容复制一份,整个ul里面包含了10个li: oUl.innerHTML = oUl.innerHTML + oUl.innerHTML; // 当ul向左滚动到第5个li时,瞬间将整个ul拉回到初始位置 function moving(){ iLeft += iSpeed; oUl.style.left = iLeft + 'px'; if(iLeft<-1000){iLeft=0} // 当ul在起始位置向右滚动时,瞬间将整个ul拉回到往左的第5个ul的位置 if(iLeft>0){iLeft = -1000} } var timer = setInterval(moving,30); oBtn01.onclick = function(){iSpeed = -2;} oBtn02.onclick = function(){iSpeed = 2;} } </script> </head> <body> <div class="btn_con"> <div class="left" id="btn01"><</div> <div class="right" id="btn02">></div> </div> <div class="list_con" id="slide"> <ul> <li><a href="#"><img src="images/goods02.jpg" alt=""></a></li> <li><a href="#"><img src="images/goods02.jpg" alt=""></a></li> <li><a href="#"><img src="images/goods02.jpg" alt=""></a></li> <li><a href="#"><img src="images/goods02.jpg" alt=""></a></li> <li><a href="#"><img src="images/goods02.jpg" alt=""></a></li> </ul> </div> </body> </html>
无缝滚动动画改进,鼠标放上去时动画暂停:
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Document</title> <style> *{ margin:0; padding:0; } .list_con{ width:1000px; height:200px; border:1px solid #000; margin:10px auto 0; background-color:#f0f0f0; position:relative; overflow:hidden; } .list_con ul{ list-style:none; width:2000px; height:200px; position: absolute; left:0; top:0; } .list_con li{ width:180px; height: 180px; float:left; margin:10px 10px; } .btn_con{ position:relative; } .left,.right{ width:30px; height:30px; background-color:gold; position:absolute; left:100px; top:80px; font-size:30px; color:#000; text-align:center; cursor:pointer; border-radius:15px; opacity:0.5; line-height: 30px; } .left{ left:100px; top:80px; } .right{ left:1150px; top:80px; } </style> <script> window.onload = function(){ var oDiv = document.getElementById("slide"); var oBtn01 = document.getElementById("btn01"); var oBtn02 = document.getElementById("btn02"); // 通过标签获取元素,获取的选择集,加上下标才能获取到元素: var oUl = oDiv.getElementsByTagName("ul")[0]; var iLeft = 0; var iSpeed = -2 var iNowSpeed = 0; // 将ul里面的内容复制一份,整个ul里面包含了10个li: oUl.innerHTML = oUl.innerHTML + oUl.innerHTML; // 当ul向左滚动到第5个li时,瞬间将整个ul拉回到初始位置 function moving(){ iLeft += iSpeed; oUl.style.left = iLeft + 'px'; if(iLeft<-1000){iLeft=0} // 当ul在起始位置向右滚动时,瞬间将整个ul拉回到往左的第5个ul的位置 if(iLeft>0){iLeft = -1000} } var timer = setInterval(moving,30); oBtn01.onclick = function(){iSpeed = -2;} oBtn02.onclick = function(){iSpeed = 2;} // 鼠标移入时,iSpeed = 0,用iNowSpeed记录原来的速度值 oDiv.onmouseover = function(){ iNowSpeed = iSpeed; iSpeed = 0} //鼠标移开时, 恢复原来速度: oDiv.onmouseout = function(){ iSpeed = iNowSpeed; } } </script> </head> <body> <div class="btn_con"> <div class="left" id="btn01"><</div> <div class="right" id="btn02">></div> </div> <div class="list_con" id="slide"> <ul> <li><a href="#"><img src="images/goods02.jpg" alt=""></a></li> <li><a href="#"><img src="images/goods02.jpg" alt=""></a></li> <li><a href="#"><img src="images/goods02.jpg" alt=""></a></li> <li><a href="#"><img src="images/goods02.jpg" alt=""></a></li> <li><a href="#"><img src="images/goods02.jpg" alt=""></a></li> </ul> </div> </body> </html>

浙公网安备 33010602011771号