点击按钮,缩放图片(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…

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

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

一ElasticSearch安装启动

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

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

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

导入自定义模块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;…

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

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

脑神经计算建模揭示前额叶皮层不同类型中间神经元在信息维持中的作用

来源&#xff1a;智能的本质与未来尽管占比相对锥形神经元数量少&#xff0c;但是中间神经元在大脑皮层实现认知功能中的作用却不容小觑。中间神经元的显著特点就是种类丰富&#xff0c;因此对不同类型中间经元在特定认知功能的分工作用的探索是揭示智能机制的关键之一。中国科…

支付宝支付-刷卡支付(条码支付)

此项目已开源欢迎Start、PR、发起Issues一起讨论交流共同进步 https://github.com/Javen205/IJPay http://git.oschina.net/javen205/IJPay 在官方的产品是叫做当面付 1、什么是当面付呢&#xff1f; 简单的讲就是条码支付(刷卡支付)、扫码支付、声波支付。 【官方是这样解释的…

solr做索引时抛出异常_Solr---gt;01

Solr介绍 什么叫做全文检索呢&#xff1f;这要从我们生活中的数据说起。 我们生活中的数据总体分为两种&#xff1a;结构化数据和非结构化数据。 1、结构化数据&#xff1a;指具有固定格式或有限长度的数据&#xff0c;如数据库&#xff0c;元数据等。 2、非结构化数据&a…

新冠肺炎疫情把科研推上“云端”

来源&#xff1a;新华网美国威斯康星国家灵长类动物研究中心的戴夫奥康纳清晨收到在伦敦的一名合作伙伴发来的论文预印本。这项研究在中国完成&#xff0c;两人通过企业协同云端办公软件Slack讨论了一上午。下午2点&#xff0c;奥康纳打开高清会议系统GoToMeeting&#xff0c;和…

CSDN专訪:大数据时代下的商业存储

原文地址&#xff1a;http://www.csdn.net/article/2014-06-03/2820044-cloud-emc-hadoop摘要&#xff1a;EMC公司作为全球信息存储及管理产品方面的率先公司&#xff0c;不久前。EMC宣布收购DSSD加强和巩固了其在行业内的领导地位&#xff0c;日前我们有幸採訪到EMC中国的张安…

兵棋推演有助于我们了解哪些战争知识?

来源&#xff1a;兵推天下菲利普塞班博士是英国伦敦国王学院战争研究系的战略研究教授&#xff0c;他也是兵棋专家和兵棋设计师。在30多年的教学生涯中&#xff0c;他将兵棋融合到了课堂教学中&#xff0c;向学生展示兵棋推演对军事规划工作的实际作用。在一次访谈中&#xff0…

2020 五大技术趋势:无人驾驶发展、机器视觉崛起、区块链实用化、人类增强技术、超自动化...

来源&#xff1a;机器人创新生态__自动驾驶技术的发展_近年来&#xff0c;自动驾驶技术一直在发展&#xff0c;特斯拉、英特尔等大公司在这一领域取得了长足的进展。虽然我们还没有达到L4级或L5级自动驾驶汽车的水平&#xff0c;但我们已经很接近了。为了解释每个级别的含义&am…

基于java的qq屏幕截图工具的设计与实现论文_众包学习:Web界面众包评估的通用工具包...

论文&#xff1a;Nebeling M , Speicher M , Norrie M C . CrowdStudy: general toolkit for crowdsourced evaluation of web interfaces[C]// Acm Sigchi Symposium on Engineering Interactive Computing Systems. ACM, 2013.摘要&#xff1a;传统的可用性测试方法既费时又昂…

福布斯2020年AI领域10大预测:人工智能越来越“边缘化”!

来源&#xff1a;人工智能和大数据毫无疑问&#xff0c;人工智能&#xff08;AI&#xff09;一直是2010年代的技术主题&#xff0c;随着新的十年的来临&#xff0c;这一趋势似乎不会消失。在过去的十年中&#xff0c;人们会回想起真正可以被视为“智能”机器的时代&#xff0c;…

spss数据_职场白骨精进阶秘籍——SPSS数据分析基础

点击上方“蓝字”关注我们吧&#xff01;想做数据分析&#xff0c;不会编程怎么办&#xff1f;如何让自己的数据分析更加专业&#xff1f;职场打拼&#xff0c;如何快速提升自己的竞争力&#xff1f;著名的未来学家托夫勒在其所著的《第三次浪潮》中将“大数据”称颂为“第三次…

人工智能和自主系统在美军联合职能中的应用

来源&#xff1a;知远战略与防务研究所【知远导读】随着人工智能/自主系统技术的快速发展及其在军事领域的持续应用&#xff0c;智能化、无人化日渐成为未来战争的发展方向。美国作为世界军事发展潮流的引领者&#xff0c;正在积极探索人工智能/自主系统与联合部队作战职能的融…