点击图片,抖动的有关问题
点击图片,抖动的问题。
不断地点击图片后,图片会慢慢的发生位移,虽然最后还是回到原来的位置,但在点击的时候,还是在移动。这个应该怎么解决? 而且每次点击,图片抖动的速度都在加快。。。 我也设置了clearInterva,但为什么还会这样?
这是代码:
<!DOCTYPE html>
<html>
<head>
<title></title>
<style>
img{
position:absolute; width:180px;top:200px; left:300px; margin:0px;
}
</style>
<script>
window.onload = function (){
var oimg = document.getElementById('img1');
var fff = oimg.offsetLeft;
oimg.onclick = function(){
shake();
}
function shake(){
var num=0;
var time = null;
var arr = [];
var por = oimg.offsetLeft;
oimg.style.left = parseInt(fff) +'px';
clearInterval(time);
for(var i=100;i>0;i-=2){
arr.push(i,-i);
}arr.push(0);
time = setInterval (function (){
oimg.style.left = por +arr[num]+'px';
num++;
if(num === arr.length){
clearInterval(time);
oimg.style.left = parseInt(fff)+'px';
}
},30);
}
}
</script>
</head>
<body>
<img src="4.jpg" id="img1"/>
</body>
</html>
------解决思路----------------------
1.var time。定义在外面。
2.clearInterval(time);
oimg.style.left = parseInt(fff) +'px';
var por = oimg.offsetLeft;
这几句的执行顺序交换一下。不然你第二次shake的起点并不是图片原始位置。
实现的效果是 当第一次shake运行没结束的时候点击图片。
立马结束第一次shake并回到初始位置开始第二次shake()。
你也可以考虑 第一次没shake()结束就不允许shake()第二次。看你自己的需求。
参见这个帖子:
http://bbs.****.net/topics/391843990
不断地点击图片后,图片会慢慢的发生位移,虽然最后还是回到原来的位置,但在点击的时候,还是在移动。这个应该怎么解决? 而且每次点击,图片抖动的速度都在加快。。。 我也设置了clearInterva,但为什么还会这样?
这是代码:
<!DOCTYPE html>
<html>
<head>
<title></title>
<style>
img{
position:absolute; width:180px;top:200px; left:300px; margin:0px;
}
</style>
<script>
window.onload = function (){
var oimg = document.getElementById('img1');
var fff = oimg.offsetLeft;
oimg.onclick = function(){
shake();
}
function shake(){
var num=0;
var time = null;
var arr = [];
var por = oimg.offsetLeft;
oimg.style.left = parseInt(fff) +'px';
clearInterval(time);
for(var i=100;i>0;i-=2){
arr.push(i,-i);
}arr.push(0);
time = setInterval (function (){
oimg.style.left = por +arr[num]+'px';
num++;
if(num === arr.length){
clearInterval(time);
oimg.style.left = parseInt(fff)+'px';
}
},30);
}
}
</script>
</head>
<body>
<img src="4.jpg" id="img1"/>
</body>
</html>
------解决思路----------------------
<!DOCTYPE html>
<html>
<head>
<title></title>
<style>
img{
position:absolute; width:180px;top:200px; left:300px; margin:0px;
}
</style>
<script>
window.onload = function (){
var oimg = document.getElementById('img1');
var fff = oimg.offsetLeft;
var time = null;
oimg.onclick = function(){
shake();
}
function shake(){
var num=0;
var arr = [];
clearInterval(time);
oimg.style.left = parseInt(fff) +'px';
var por = oimg.offsetLeft;
for(var i=100;i>0;i-=2){
arr.push(i,-i);
}arr.push(0);
time = setInterval (function (){
oimg.style.left = por +arr[num]+'px';
num++;
if(num === arr.length){
clearInterval(time);
oimg.style.left = parseInt(fff)+'px';
}
},30);
}
}
</script>
</head>
<body>
<img src="http://avatar.****.net/6/B/9/1_yiiouo.jpg" id="img1"/>
</body>
</html>
1.var time。定义在外面。
2.clearInterval(time);
oimg.style.left = parseInt(fff) +'px';
var por = oimg.offsetLeft;
这几句的执行顺序交换一下。不然你第二次shake的起点并不是图片原始位置。
实现的效果是 当第一次shake运行没结束的时候点击图片。
立马结束第一次shake并回到初始位置开始第二次shake()。
你也可以考虑 第一次没shake()结束就不允许shake()第二次。看你自己的需求。
参见这个帖子:
http://bbs.****.net/topics/391843990