最终效果如下:
背景知识:
setInterval(code,millisec),已miliseec(以毫秒计)为周期,循环执行code。直到遇到clearInterval。
clearInterval() 方法可取消由 setInterval() 设置的 timeout。
实现思路:
设置两个值,nextWidth和finalWidth
利用setInterval()在20毫秒(可另设)内将图片的宽度和高度同时乘1.05(放大)或者同时乘0.95(缩小),当图片的宽度大于nextWidth(放大的情况)或者小于nextWidth(缩小的情况)时,调用clearInterval停止timeout。当用户继续点击按钮时,继续执行函数。当图片的宽度大于finalWidth(放大的情况)或者图片的宽度小于finalWidth(缩小的情况)时,弹出警告,提示用户图片已不能继续放大或缩小。
注:可通过调整setInterval中的执行周期和每次图片宽度高度增加的倍数,来实现更顺畅的过渡效果。
以放大为例,编写js代码。
var finalWidth=img.width*1.5; //定义在函数外部,因为这个值时固定的,不能随着函数的执行变化。
function maxfun(){
var nextWidth=img.width*1.2;
var maxtimer=setInterval(function(){
if(img.width<nextWidth){
if(img.width<finalWidth){
img.width=img.width*1.05;
img.width=img.width*1.05;
}
else{
alert("图片已放大最大");
clearInterval(maxtimer);
}
}
else{
clearInterval(maxtimer);
}
},20);
}
实现缩小的功能与放大类似。
完整的html和js代码如下:
<!DOCTYPE html >
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>图片的缩放</title>
<script type="text/javascript">
window.onload=function(){
var maxbtn=document.getElementById('maxbtn');
var img=document.getElementById('img');
maxbtn.onclick=function(){
maxfun();
}
var finalWidth=img.width*1.5;
function maxfun(){
var nextWidth=img.width*1.2;
var maxtimer=setInterval(function(){
if(img.width<nextWidth){
if(img.width<finalWidth){
img.width=img.width*1.02;
img.height=img.height*1.02;
}
else{
alert("已放到最大");
clearInterval(maxtimer);
}
}
else{
clearInterval(maxtimer);
}
},20);
}
var minbtn=document.getElementById('minbtn');
minbtn.onclick=function(){
minfun();
}
var finalWidth2=img.width*0.5;
function minfun(){
var nextWidth=img.width*0.8;
var mintimer=setInterval(function(){
if(img.width>nextWidth){
if(img.width>finalWidth2){
img.width=img.width*0.99;
img.height=img.height*0.99;
}
else{
alert("已经缩到最小");
clearInterval(mintimer);
}
}
else{
clearInterval(mintimer);
}
},20);
}
}
</script>
</head>
<body>
<img src="http://img.mukewang.com/53577ee900016c2102080260.jpg" id="img" /><br/><br/>
<input type="button" id="maxbtn" value="放大" />
<input type="button" id="minbtn" value="缩小" />
</body>
</html>
测试环境: IE11、chrome 56.0.2914.87(64bit)、safari 5.1.7(7534.57.2)