課程
/前端開發(fā)
/JavaScript
/JS動畫效果
老師,你好。問一下,將鼠標(biāo)放在div上,不讓div完全變大和縮小,來回移動會產(chǎn)生div的抖動,有時候甚至?xí)艹銎聊缓苓h(yuǎn)。這種該如何解決呢?
2014-10-27
源自:JS動畫效果 4-1
正在回答
你把var aLi.timer=null;定義到for循環(huán)中,下邊清除計(jì)時器的參數(shù)改成obj.timer試試。我也遇到抖動不能變回原來的情況,下邊是我改過的代碼你看下。
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>多物體運(yùn)動</title>
<style>
*{margin: 0;padding: 0;}
ul{list-style: none;}
ul li{
width: 200px;
height: 100px;
background: yellow;
margin-bottom: 20px;
}
</style>
<script type="text/javascript">
window.onload=function(){
var aLi=document.getElementsByTagName('li');
for(var i=0;i<aLi.length;i++){
aLi[i].timer=null;
aLi[i].onmouseover=function(){
startMove(this,400); ? ? ? ? ? ?//this是當(dāng)前的li標(biāo)簽,因?yàn)闊o法判斷是那個所以用this表示當(dāng)前的標(biāo)簽。
aLi[i].onmouseout=function(){
startMove(this,200);
function startMove(obj,iTarget){
clearInterval(obj.timer);
obj.timer=setInterval(function(){
var speed=(iTarget-obj.offsetWidth)/8;
speed=speed>0?Math.ceil(speed):Math.floor(speed);
if(obj.offsetWidth==iTarget){
else{
obj.style.width=obj.offsetWidth+speed+"px";
},30)
</script>
</head>
<body>
<ul>
<li></li>
</ul>
</body>
</html>
舉報
通過本課程JS動畫的學(xué)習(xí),從簡單動畫開始,逐步深入各種動畫框架封裝
2 回答speed向上取整和向下取整
1 回答if(flag){clearInterval(obj.timer);if(fn){fn()}}
1 回答這個不是很懂
2 回答speed=speed>0?什么意思
3 回答請問大家都是怎么學(xué)習(xí)的js的,
Copyright ? 2025 imooc.com All Rights Reserved | 京ICP備12003892號-11 京公網(wǎng)安備11010802030151號
購課補(bǔ)貼聯(lián)系客服咨詢優(yōu)惠詳情
慕課網(wǎng)APP您的移動學(xué)習(xí)伙伴
掃描二維碼關(guān)注慕課網(wǎng)微信公眾號
2016-01-17
你把var aLi.timer=null;定義到for循環(huán)中,下邊清除計(jì)時器的參數(shù)改成obj.timer試試。我也遇到抖動不能變回原來的情況,下邊是我改過的代碼你看下。
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>多物體運(yùn)動</title>
<style>
*{margin: 0;padding: 0;}
ul{list-style: none;}
ul li{
width: 200px;
height: 100px;
background: yellow;
margin-bottom: 20px;
}
</style>
<script type="text/javascript">
window.onload=function(){
var aLi=document.getElementsByTagName('li');
for(var i=0;i<aLi.length;i++){
aLi[i].timer=null;
aLi[i].onmouseover=function(){
startMove(this,400); ? ? ? ? ? ?//this是當(dāng)前的li標(biāo)簽,因?yàn)闊o法判斷是那個所以用this表示當(dāng)前的標(biāo)簽。
}
aLi[i].onmouseout=function(){
startMove(this,200);
}
}
}
function startMove(obj,iTarget){
clearInterval(obj.timer);
obj.timer=setInterval(function(){
var speed=(iTarget-obj.offsetWidth)/8;
speed=speed>0?Math.ceil(speed):Math.floor(speed);
if(obj.offsetWidth==iTarget){
clearInterval(obj.timer);
}
else{
obj.style.width=obj.offsetWidth+speed+"px";
}
},30)
}
</script>
</head>
<body>
<ul>
<li></li>
<li></li>
<li></li>
</ul>
</body>
</html>