自适应图片大小的弹出窗口


Posted in Javascript onJuly 27, 2006

很多时候我们需要提供这样的功能给访问者:当访问者点击页面中的缩略图时,其对应的全尺寸图片将显示在一个新的弹出窗口中供访问者查看。

实现此功能的最简单作法是用以下HTML代码创建一个图像链接:

<a href="fullsize.jpg" target="_blank"><img src="small.jpg"></a> 

其中<a>标记的href属性指定全尺寸图片的URL,target属性设置为_blank指定在新窗口中显示该图片;<img>标记的src属性指定缩略图的URL。

如果我们想对显示全尺寸图片的窗口的外观进行某些控制(比如希望弹出窗口的高度、宽度能与全尺寸图片的大小匹配时),则可调用 window.open 方法,该方法接收三个参数,分别指定要打开文件的URL,窗口名及窗口特性,在窗口特性参数中可指定窗口的高度、宽度,是否显示菜单栏、工具栏等。以下代码将显示全尺寸图片在一个没有工具栏、地址栏、状态栏、菜单栏,宽、高分别为400、350的窗口中:
<a href="fullsize.jpg" onClick="window.open(this.href,'', 'height=350,width=400,toolbar=no,location=no,status=no,menubar=no');return false"><img src="small.jpg"></a>

这里就提出了个问题,如果所有全尺寸图片都具有统一的大小(比如都是400x350),那么以上代码适用于所有的缩略图片链接(只是href属性指向的全尺寸图片文件不同)。但如果全尺寸图片的大小并不统一,还用以上代码则我们需要先取得每幅全尺寸图片的大小,然后在window.open方法的窗口特性参数中一一设置height和width为正确的值,在图片数量较多的情况下,这显然效率太低了。那么是否有一劳永逸的方法,即让弹出窗口能自动适应要显示图片的大小?通过研究,发现可以使用 DHTML 中的 Image 对象来达到我们的目的,Image 对象可动态装载指定的图片,通过读取其 width 和 height 属性即能获得装入图片的大小,以此来设置弹出窗口的大小,即可实现自适应图片大小的弹出窗口了。下面即是实现代码:
<script language="JavaScript" type="text/JavaScript">
<!--
var imgObj;
function checkImg(theURL,winName){
// 对象是否已创建
if (typeof(imgObj) == "object"){
// 是否已取得了图像的高度和宽度
if ((imgObj.width != 0) && (imgObj.height != 0))
// 根据取得的图像高度和宽度设置弹出窗口的高度与宽度,并打开该窗口
// 其中的增量 20 和 30 是设置的窗口边框与图片间的间隔量
OpenFullSizeWindow(theURL,winName, ",width=" + (imgObj.width+20) + ",height=" + (imgObj.height+30));
else
// 因为通过 Image 对象动态装载图片,不可能立即得到图片的宽度和高度,所以每隔100毫秒重复调用检查
setTimeout("checkImg('" + theURL + "','" + winName + "')", 100)
}
}

function OpenFullSizeWindow(theURL,winName,features) {
var aNewWin, sBaseCmd;
// 弹出窗口外观参数
sBaseCmd = "toolbar=no,location=no,status=no,menubar=no,scrollbars=no,resizable=no,";
// 调用是否来自 checkImg 
if (features == null || features == ""){
// 创建图像对象
imgObj = new Image();
// 设置图像源
imgObj.src = theURL;
// 开始获取图像大小
checkImg(theURL, winName)
}
else{
// 打开窗口
aNewWin = window.open(theURL,winName, sBaseCmd + features);
// 聚焦窗口
aNewWin.focus();
}
}
//-->
</script>

使用时将上面的代码放在网页文档的<head></head>标记对中,然后在链接的点击事件中调用OpenFullSizeWindow函数,如<a href="fullsize.jpg" onClick="OpenFullSizeWindow(this.href,'','');return false"><img src="small.jpg"></a>即可。

以上代码在IE 5.x-6.0中测试通过。

Javascript 相关文章推荐
用js得到网页中所有的div的id
Oct 19 Javascript
jQuery学习5 jQuery事件模型
Feb 07 Javascript
jQuery EasyUI 开源插件套装 完全替代ExtJS
Mar 24 Javascript
JQuery从头学起第二讲
Jul 04 Javascript
Javascript的并行运算实现代码
Nov 19 Javascript
了解jQuery技巧来提高你的代码(个人觉得那个jquery的手册很不错)
Feb 10 Javascript
你所未知的3种Node.js代码优化方式
Feb 25 Javascript
使用AngularJS对表单提交内容进行验证的操作方法
Jul 12 Javascript
Angular中ng-repeat与ul li的多层嵌套重复问题
Jul 24 Javascript
JavaScript实现简单评论功能
Aug 17 Javascript
详解AngularJS之$window窗口对象
Jan 17 Javascript
vue props default Array或是Object的正确写法说明
Jul 30 Javascript
如何实现iframe(嵌入式帧)的自适应高度
Jul 26 #Javascript
CSS+JS构建的图片查看器
Jul 22 #Javascript
常用参考资料(手册)下载或者链接
Jul 22 #Javascript
JavaScript窗口功能指南之在窗口中书写内容
Jul 21 #Javascript
用于table内容排序
Jul 21 #Javascript
脚本收藏iframe
Jul 21 #Javascript
document.all还是document.getElementsByName?
Jul 21 #Javascript
You might like
PHP脚本的10个技巧(3)
2006/10/09 PHP
PHP弹出提示框并跳转到新页面即重定向到新页面
2014/01/24 PHP
PHP实现返回JSON和XML的类分享
2015/01/28 PHP
PHP实现文件上传和多文件上传
2015/12/24 PHP
PHP图片添加水印功能示例小结
2016/10/03 PHP
PHP二进制与字符串之间的相互转换教程
2016/10/14 PHP
PHP十六进制颜色随机生成器功能示例
2017/07/24 PHP
基于jquery的模态div层弹出效果
2010/08/21 Javascript
js AppendChild与insertBefore用法详细对比
2013/12/16 Javascript
jquery获取tr并更改tr内容示例代码
2014/02/13 Javascript
nodejs教程之入门
2014/11/21 NodeJs
JS+DIV+CSS实现仿表单下拉列表效果
2015/08/18 Javascript
jQuery 实现评论等级好评差评特效
2016/05/06 Javascript
实例讲解JavaScript中的this指向错误解决方法
2016/06/13 Javascript
浅谈js for循环输出i为同一值的问题
2017/03/01 Javascript
Bootstrap-table自定义可编辑每页显示记录数
2018/09/07 Javascript
js实现京东秒杀倒计时功能
2019/01/21 Javascript
jquery 键盘事件 keypress() keydown() keyup()用法总结
2019/10/23 jQuery
基于Vue的侧边目录组件的实现
2020/02/05 Javascript
微信小程序入门之绘制时钟
2020/10/22 Javascript
Python中Django框架利用url来控制登录的方法
2015/07/25 Python
Python语言实现获取主机名根据端口杀死进程
2016/03/31 Python
Python静态类型检查新工具之pyright 使用指南
2019/04/26 Python
python实现在函数中修改变量值的方法
2019/07/16 Python
python线程的几种创建方式详解
2019/08/29 Python
python通过文本在一个图中画多条线的实例
2020/02/21 Python
斯凯奇美国官网:SKECHERS美国
2016/08/20 全球购物
公共事业管理本科生求职信
2013/10/07 职场文书
期终自我鉴定
2014/02/17 职场文书
原材料检验岗位职责
2014/03/15 职场文书
数控专业毕业生求职信
2014/06/12 职场文书
自我检讨书怎么写
2015/05/07 职场文书
互联网创业商业模式以及赚钱法则有哪些?
2019/10/12 职场文书
详解MySQL的Seconds_Behind_Master
2021/05/18 MySQL
详解CSS伪元素的妙用单标签之美
2021/05/25 HTML / CSS
python 中的jieba分词库
2021/11/23 Python