zoukankan      html  css  js  c++  java
  • 使用计时器实现图片的准确缩放

    使用计时器实现图片的准确缩放

      如果在网上我们发现图片太小,看不清该怎么办?当然是放大啊,放大有很多种方式,这里介绍其中比较简单的一种。

      我们可以通过点击按钮放大和缩小图片,每次都会按照相同的倍数,并且不会无限放大和缩小,如果达到了最值,会由相应的提示。先看以下代码:

    <!DOCTYPE html>
    <html lang="en">
    <head>
    	<meta charset="UTF-8">
    	<title>自制缩放</title>
    	<style>
    		#wrapper{
    			 500px;
    			margin: 0 auto;
    			position: relative;
    		}
    		#input{
    			position: absolute;
    			top: 0px;
    		}
    		input{
    			color:green;
    			background: white;
    		}
    	</style>
    </head>
    <body>
    	<div id="wrapper">
    		<div id="input">
    			<input  type="button" value="放大" id="enlarge"><input type="button" value="缩小" id="narrow">
    		</div>
    		<img src="4.jpg" alt="this is a picture" id="myImage">
    	</div>
    	<script>
    	window.onload=function(){
    		var image=document.getElementById("myImage");
    		var largeButton=document.getElementById("enlarge");
    		largeButton.onclick=function(){
    			larger();
    		}
    		var maxWidth=image.width*2.5;
    		var maxHeight=image.height*2.5;
    		function larger(){
    			var endHeight=image.height*1.3;
    			var endWidth=image.width*1.3;
    			var largeTimer=setInterval(function(){
    				if(image.width<endWidth){
    					if(image.width<maxWidth){
    						image.width=image.width*1.03;
    						image.height=image.height*1.03;
    					}else{
    						alert("此图片已经放到了最大。");
    						clearInterval(largeTimer);
    					}
    				}else{
    					clearInterval(largeTimer);
    				}
    			},80);
    		}
    		var smallButton=document.getElementById("narrow");
    		smallButton.onclick=function(){
    			smaller();
    		}
    		var minWidth=image.width*0.5;
    		var minHeight=image.height*0.5;
    		function smaller(){
    			var endWidth=image.width*0.7;
    			var endHeight=image.height*0.7;
    			var smallTimer=setInterval(function(){
    				if(image.width>endWidth){
    					if(image.width>minWidth){
    						image.width=image.width*0.95;
    						image.height=image.height*0.95;
    					}else{
    						alert("此图片已经缩到了最小");
    						clearInterval(smallTimer);
    					}
    				}else{
    					clearInterval(smallTimer);
    				}
    			},130);
    		}
    	}
    	</script>
    </body>
    </html>
    

      这里的JavaScript代码最需要理解的有以下几点:

    1. 使用window.onload是因为虽然我们已经把script标签放到了内容的最下面,即html页面下载完成之后在执行脚本代码,但是图片有可能未加载完全,使用window.onload()更加保险。
    2. 在页面加载完成之后会从上到下地执行script中的代码,对于声明变量则会得到固定的值,比如maxWidth maxHeight minWidth minHeight这些变量的值自始至终都是固定的,因为这些语句只执行了一遍,而函数声明内的变量在调用函数之前是不会被赋值的。
    3. 对于计时器setInterval我们必须将它赋值给一个变量,这是为了在达到我们的要求之后可以用clearInterval将计时器停止。
    4. 刚刚说到,maxWidth maxHeight minWidth minHeight这些变量的值都是固定的,因为它们所在的声明语句只被执行一遍。而对于endWidth endHeight却是动态变化的,这个需要格外注意。

    最终效果如下:

    A原始大小图片

    B放大图片

    C.放大到不能继续

    D.缩小图片

    E.缩小到不能再小图片

        

  • 相关阅读:
    fedora上部署ASP.NET——(卡带式电脑跑.NET WEB服务器)
    SQL Server 请求失败或服务未及时响应。有关详细信息,请参见事件日志或其它适合的错误日志
    8086CPU的出栈(pop)和入栈(push) 都是以字为单位进行的
    FTP 服务搭建后不能访问问题解决
    指定的 DSN 中,驱动程序和应用程序之间的体系结构不匹配
    Linux 安装MongoDB 并设置防火墙,使用远程客户端访问
    svn Please execute the 'Cleanup' command. 问题解决
    .net 操作MongoDB 基础
    oracle 使用绑定变量极大的提升性能
    尝试加载 Oracle 客户端库时引发 BadImageFormatException。如果在安装 32 位 Oracle 客户端组件的情况下以 64 位模式运行,将出现此问题。
  • 原文地址:https://www.cnblogs.com/zhuzhenwei918/p/6034512.html
Copyright © 2011-2022 走看看