点击按钮,缩放图片(img.width、img.style.width、img.offsetWidth)

前几天在慕课网上看到一个关于图片缩放的教学视频,因为当时对老师使用img.width,而不是使用img.style.width而感到奇怪,所以周末得空了,想来自己试着写出来,相关视频网址如下:http://www.imooc.com/video/1111;

最开始想着按照视频使用定时器的思路来写,但是写到后面发现使用 img.width实现不了效果,然后就按照传参的思路来写,同样使用 img.width实现不了效果,所以后面改用img.style.width;我这等小白在这问题上纠结了好久,简直是要哭晕在厕所的节奏。

一、 使用img.style.width;

HTML部分比较简单:但还是需要贴出来,以便于后面说明为什么使用img.width没有出现效果,(特别注意img标签中对其宽高的写法)

1 <div id="div" style="width: 200px;height: 164px;">
2             <img style="width: 200px;height: 164px;" src="img/child.jpg" id="img" />    
3         </div>        
4         <input type="button" name="" id="big" value="放大" />
5         <input type="button" name="" id="small" value="缩小" />

JS部分

1、使用传参的方式,因为代码比较简单,就直接贴了 ,这里使用的都是.style.width形式

复制代码
 1 window.onload = function() {2     var big = document.getElementById('big');3     var small=document.getElementById('small')    4     big.onclick = function() {5         chang(1.2,2,0.5)6     }7     small.onclick = function() {8         chang(0.8,2,0.5)9     }
10 }    
11 function chang(speed,max,min) {
12     var div= document.getElementById('div');
13     var pic = document.getElementById('img');
14     var h = pic.offsetHeight;
15     var w = pic.offsetWidth;
16     var maxH=div.offsetHeight*max;
17     var maxW=div.offsetWidth*max;    
18     var minH=div.offsetHeight*min;
19     var minW=div.offsetWidth*min;
20     if (h<=maxH&&h>=minH) {    
21         pic.style.height = h*speed+"px";
22         pic.style.width=w*speed+'px';
23     }else if(h>maxH){
24         alert('图片已放到最大')
25         pic.style.height=maxH+"px";
26         pic.style.width=maxW+"px";        
27     }else{
28         alert('图片缩到最小')
29         pic.style.height=minH+"px";
30         pic.style.width=minW+"px";        
31     }
32 }
复制代码

2、使用定时器:同样使用的使用的都是.style.width形式

复制代码
 1 window.onload = function() {2     var big = document.getElementById('big');3     var small = document.getElementById('small')4     big.onclick = function() {5             changBig()6         }7     small.onclick = function() {8         changSmall()9     }
10 var div = document.getElementById('div');
11 var pic = document.getElementById('img');
12 var endH = div.offsetHeight * 1.2;
13 var endW = div.offsetWidth * 1.2;
14 var maxH = div.offsetHeight * 2;
15 var maxW = div.offsetWidth * 2;
16 var endH1 = div.offsetHeight * 0.8;
17 var endW1 = div.offsetWidth * 0.8;
18 var minH = div.offsetHeight * 0.5;
19 var minW = div.offsetWidth * 0.5;
20     var changBig=function () {
21         if(pic.offsetHeight <endH ) {
22             if(pic.offsetHeight <maxH) {
23                 pic.style.height = pic.offsetHeight * 1.08 + 'px';
24                 pic.style.width = pic.offsetWidth * 1.08 + 'px';
25             } else {
26                 alert('图片已放到最大')
27                 clearInterval(time)
28             }
29         } else {            
30             clearInterval(time)
31         }
32         var time = setInterval('changBig()', 200)
33     }
34     var changSmall=function () {
35         if(pic.offsetHeight > endH1 ) {
36             if(pic.offsetHeight >minH) {
37                 pic.style.height = pic.offsetHeight * 0.9 + 'px';
38                 pic.style.width = pic.offsetWidth * 0.9 + 'px';
39             } else {
40                 alert('图片已缩到最小')
41                 clearInterval(time)
42             }
43         } else {            
44             clearInterval(time)
45         }
46         var time = setTimeout('changBig()', 200)
47     }
48 }
复制代码

但老师的教学视频使用的是img.width,并且也有效果啊,为什么我使用img.width就不出现效果呢,在网上找了好久也没找到什么有关的,所以后面就在控制台上输出了他们:

console.log(pic.style.height);
console.log(pic.offsetHeight);
console.log(pic.height);

结果如下:

 

发现console.log(pic.offsetHeight)与console.log(pic.height)的结果一样;之前知道pic.style.height是可读可写的,为字符串,带有单位像素,而pic.offsetHeight是可读不可写的,难道console.log(pic.height)与console.log(pic.offsetHeight)是一样的?那也不应该啊,以为pic.offsetHeight是可读不可写的,如果他们是一样的,那么老师使用img.width应该也是不能出现效果的,所以他们肯定是不同的,想来他是结合了pic.style.height和pic.offsetHeight,可读可写,同时返回的是数字;那为什么我使用img.width就是不出现效果呢,后来猜想可能是HTML书写方式的不同导致的,所以修改了img标签内宽高的写法:如下

1 <div id="div" style="width: 200px;height: 164px;">
2             <img src="img/child.jpg" id="img" width="200" height="164"/>    
3         </div>        
4         <input type="button" name="" id="big" value="放大" />
5         <input type="button" name="" id="small" value="缩小" />

注意img标签对其宽高属性的两种写法;

然后我把JS部分的pic.style.height改为pic.height,然后效果就出来了,代码如下:

复制代码
 1 function chang(speed,max,min) {2     var div= document.getElementById('div');3     var pic = document.getElementById('img');4     var maxH=div.offsetHeight*max;5     var maxW=div.offsetWidth*max;    6     var minH=div.offsetHeight*min;7     var minW=div.offsetWidth*min;8     if (pic.offsetHeight<=maxH&&pic.offsetHeight>=minH) {    9         pic.height = pic.height*speed;
10         pic.width=pic.width*speed;
11     }else if(pic.height>maxH){
12         alert('图片已放到最大')
13         pic.height=maxH;
14         pic.width=maxW;        
15     }else{
16         alert('图片缩到最小')
17         pic.height=minH;
18         pic.width=minW;        
19     }
20 }
复制代码

同样将用定时器写法中的pic.style.height改为pic.heigh,也出现了效果;代码就不贴出来了

之前只是怀疑pic.height与pic.offsetHeight是不相同的,那他们到底是否相同呢,然后将pic.heigh均改为pic.offsetHeight,这小效果没有了,所以这两者是、本质是不同的,只是他们的数值相同而已;

总结:

1、pic.height,pic.style.height,pic.offsetHeight三者是不同的;

2、pic.height,pic.style.height是可读可写的,pic.offsetHeight是可读不可写的;

3、pic.height与pic.offsetHeight返回的是数值,且数值相等;

4、pic.style.height返回的是字符串,带有单位PX;

5、使用pic.height还是使用pic.style.height,根据HTML中编写标签内的属性的方式而定;

最后,对于这个问题,小白的我弄了好久,写出来为了让自己影响深刻点,总结的也不全面,后面理解的深了,继续加吧。fighting!

 

转载于:https://www.cnblogs.com/xieweikai/p/6837914.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/488382.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

sql怎么继续编辑已经保存的代码_某团购CMS的GETSHELL操作代码审计

作者&#xff1a;会上树的猪合天智汇 0x00 写点废话在渗透测试中&#xff0c;获取一个webshell应该是我们不屑的追求&#xff0c;今天要通过这个CMS从代码的角度看一下可利用的getshell的方法。这一次的代码审计需要借助工具来定位可能存在的漏洞点&#xff0c;选择Seay源代码审…

测温枪的工作原理全面解析,如何测出你的温度

来源&#xff1a;世界先进制造技术论坛内容来源&#xff1a;网络测温枪&#xff0c;学名是“红外线测温仪”或者“红外线辐射测温仪”。它的原理是&#xff1a;被动吸收目标的红外辐射能量&#xff0c;从而获得物体温度数值。这次疫情&#xff0c;让这个小东西一下子&#xff0…

mysql不要放docker,Docker从入门到放弃

本文将以比较简单的的方式让大家理解docker&#xff0c;以平时常用到的测试环境为主&#xff0c;从用开始&#xff0c;慢慢理解docker。0x00 用docker进行漏洞测试0x01 docker运行busybox0x02 Docker 搭建运行apache-php环境0x03 用Dockerfile自动化构建可ssh登陆的镜像0x04 Do…

二叉树02

为了加强记忆我又写了一遍二叉树的基本代码。比上一次多了一点点功能。 1 #include<stdio.h>2 #include<iostream>3 using namespace std;4 struct Bitree{//二叉树的结构 5 int val;6 Bitree *lchild,*rchild;7 };8 void creat(Bitree * &T)//创建树 …

一个对称性解释三个宇宙学难题;引力波碰撞会发光?粘液霉菌助力寻找宇宙网 | 一周科技速览...

来源&#xff1a;返朴撰文 &#xff1a;董唯元、杨凌、顾舒晨、洪俊贤、太阁尔、姜小满目 录1. 一个对称性解释三个宇宙学难题2. 引力波碰撞会发光&#xff1f;3. 粘液霉菌助力寻找宇宙网4. 听&#xff0c;是杂质原子的声音5. 更快了&#xff01;地球的大型生态系统在崩溃6. 究…

如何用python爬虫赚早餐_如何利用python爬虫挣钱

Python爬虫是用Python编程语言实现的网络爬虫&#xff0c;主要用于网络数据的抓取和处理&#xff0c;相比于其他语言&#xff0c;Python是一门非常适合开发网络爬虫的编程语言&#xff0c;大量内置包&#xff0c;可以轻松实现网络爬虫功能。那么使用python如何赚钱呢&#xff1…

一ElasticSearch安装启动

参考官方&#xff1a;https://www.elastic.co/downloads/elasticsearch 转载于:https://www.cnblogs.com/tangyongathuse/p/6840231.html

python中表达式4+0.5值的数据类型为_python中,数字类型计算

说明&#xff1a;今天在看python数字类型的操作&#xff0c;在此记录下。操作过程&#xff1a;1.数字的加减乘除>>> 2 24>>> 4 - 22>>> 2 - 4-2>>> 2 * 24>>> 2 / 2 #除法的结果会返回小数的结果&#xff0c;如果是整除&#xf…

结构化数据不应该被人工智能忘之脑后 !

来源&#xff1a;Ihab Ilyas在处理非结构化数据的问题上&#xff0c;人工智能和深度学习方法一直都表现出众且广为人知&#xff0c;无论是在自然语言处理、知识库自动构建&#xff0c;还是图像视频的识别和生成应用中&#xff0c;都有很多成熟案例。然而对于结构化数据的研究&a…

php修改找不到数据类型,php – 在$_POST中找不到输入类型=图像值

只需使用var_dump()来查看$_POST中的内容&#xff1a;var_dump($_POST);您会看到,当您使用< input type “image”>提交表单时,您会得到&#xff1a;arraybuyuka_x > string 0 (length1)buyuka_y > string 0 (length1)所以,没有$_POST [‘buyuka’] – 相反,有&…

java数据类型转换和数组总结

流程控制 分支 循环语句     if...else...     if...else if...else switch(值0) { ------------值0是什么类型, case后面的值就要是什么类型       case 值1:         执行语句         break;       case 值1:         …

导入自定义模块syntaxerror: invalid syntax_技术分享 | Quill的模块机制

DevUI技术体验部是一支兼具设计视角和工程视角的团队&#xff0c;服务于华为云DevCloud平台和华为内部上百个中后台系统&#xff0c;主打产品 DevUI Design 服务于设计师和前端工程师。官方网站&#xff1a;devui.design。Ng组件库&#xff1a;ng-devui。DevUI Design&#xff…

我们对时间的理解错了吗?

来源&#xff1a; 利维坦文/Claudia Hammond译/boomchacha校对/Rachel原文/www.bbc.com/future/article/20191203-what-we-get-wrong-about-time“时间”是常见的名词。我们都熟知时间流逝的感觉&#xff1a;现在变成过去&#xff1b;今天变成昨天。你要是住在温带&#xff0c;…

php jquery validate remote,jquery插件validate里面的remote参数用法

validate验证在进行异步数据库查询验证的过程中用到了remote这个参数remote里面有url,dataType,data,type等等这几个参数&#xff0c;当data不写的时候默认是当前被验证的字段的值。传值到php文件中&#xff0c;在php文件中处理的时候&#xff0c;返回值为 “true”或者"f…

SVN使用过程中遇到的一些问题

更新svn的客户端TortoiseSVN后 &#xff0c;之前使用svn管理的文件的关联图标消失了 说明:下面的解决方法及图片来自博客&#xff1a;装了SVN&#xff0c;你的关联图标变了没有&#xff1f; 解决办法&#xff1a;在同步的文件点击右键如下图 ...现则Settings&#xff0c;出现的…

python计算线性相关系数_Python+pandas计算数据相关系数(person、Kendall、spearman)

pandas中DataFrame对象corr()方法的用法&#xff0c;该方法用来计算DataFrame对象中所有列之间的相关系数(包括pearson相关系数、Kendall Tau相关系数和spearman秩相关)。pandas相关系数-DataFrame.corr()参数详解DataFrame.corr(methodpearson, min_periods1)参数说明&#xf…

matlab设置非平坦结构元,详解MATLAB/Simulink通信系统建模与仿真图书信息

第1章 Simulink基础1.1 Simulink简介1.2 运行Simulink演示程序1.2.1 运行房屋热力学系统演示模型1.2.2 房屋热力学系统模型说明1.2.3 其他Simulink演示程序1.3 建立一个简单的Simulink模型1.4 保存Simulink模型1.5 打印及HTML报告1.5.1 打印模型1.5.2 生成模型报告1.6 打印边框…

创建Socket【Socket编程4】

java在包java.net中提供了两个类Socket和ServerSocket&#xff0c;分别用来表示双向连接的客户端和服务端。这是两个封装得非常好的类&#xff0c;使用很方便。其构造方法如下&#xff1a; Socket(InetAddress address, int port); Socket(InetAddress address, int port, bool…

python打包linux可执行文件_Linux下安装pyinstaller用于将py文件打包生成一个可执行文件...

听说pyinstaller多平台支持的比较好&#xff0c;考虑在linux(redhat 6 32-bit)上装个pyinstall,不过真的是遇到太多问题了。。。下面是安装和使用流程&#xff1a;安装使用流程1. 首先给系统装个easy_install&#xff0c; 如果装了的可以跳过这步到pypi官方网址 https://pypi.p…

oracle未找到时区,解决ORA-01882:未找到时区区域%s

和许多网友一样&#xff0c;今天遇到了ora-01882问题&#xff0c;查了matelink解决了&#xff01; 环境&#xff1a;Oracle server端版本&#xff1a;SQLgt; select * from v$version和许多网友一样&#xff0c;今天遇到了ora-01882问题&#xff0c;查了matelink解决了&#xf…