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


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 相关文章推荐
用Javascript同时提交多个Web表单的方法
Dec 26 Javascript
js数据验证集合、js email验证、js url验证、js长度验证、js数字验证等简单封装
May 15 Javascript
js replace正则表达式应用案例讲解
Jan 17 Javascript
jQuery遍历之next()、nextAll()方法使用实例
Nov 08 Javascript
JavaScript File API实现文件上传预览
Feb 02 Javascript
Javascript基础_嵌入图像的简单实现
Jun 14 Javascript
JS实现字符串中去除指定子字符串方法分析
May 17 Javascript
浅谈HTTP 缓存的那些事儿
Oct 17 Javascript
移动端自适应flexible.js的使用方法(不用三大框架,仅写一个单html页面使用)推荐
Apr 02 Javascript
微信小程序实现消息框弹出动画
Apr 18 Javascript
如何实现vue的tree组件
Dec 03 Vue.js
JavaScript利用html5新方法操作元素类名详解
Nov 27 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访问Google Search API的方法
2015/03/05 PHP
php版微信公众平台回复中文出现乱码问题的解决方法
2016/09/22 PHP
Laravel实现表单提交
2017/05/07 PHP
js option删除代码集合
2008/11/12 Javascript
js DOM模型操作
2009/12/28 Javascript
jquery使用remove()方法删除指定class子元素
2015/03/26 Javascript
js实现同一个页面多个渐变效果的方法
2015/04/10 Javascript
Jquery轮播效果实现过程解析
2016/03/30 Javascript
分享JS代码实现鼠标放在输入框上输入框和图片同时更换样式
2016/09/01 Javascript
js实现StringBuffer的简单实例
2016/09/02 Javascript
详解JS几种变量交换方式以及性能分析对比
2016/11/25 Javascript
javascript ASCII和Hex互转的实现方法
2016/12/27 Javascript
微信小程序 欢迎页面的制作(源码下载)
2017/01/09 Javascript
jQuery操作复选框(CheckBox)的取值赋值实现代码
2017/01/10 Javascript
AngularJS中的缓存使用
2017/01/11 Javascript
快速使用node.js进行web开发详解
2017/04/26 Javascript
javascript高仿热血传奇游戏实现代码
2018/02/22 Javascript
在Vue-cli里应用Vuex的state和mutations方法
2018/09/16 Javascript
Python新手实现2048小游戏
2015/03/31 Python
Python 列表排序方法reverse、sort、sorted详解
2016/01/22 Python
python 读写中文json的实例详解
2017/10/29 Python
Python两个字典键同值相加的几种方法
2019/03/05 Python
Python函数的参数常见分类与用法实例详解
2019/03/30 Python
Python实现的文轩网爬虫完整示例
2019/05/16 Python
Django框架使用内置方法实现登录功能详解
2019/06/12 Python
Python 使用指定的网卡发送HTTP请求的实例
2019/08/21 Python
Python爬虫requests库多种用法实例
2020/05/28 Python
python rolling regression. 使用 Python 实现滚动回归操作
2020/06/08 Python
opencv 图像腐蚀和图像膨胀的实现
2020/07/07 Python
城市轨道专业个人求职信范文
2013/09/23 职场文书
教师党员承诺书
2014/03/25 职场文书
成绩报告单家长评语
2014/12/30 职场文书
酒吧七夕情人节宣传语
2015/11/24 职场文书
立秋之描写立秋的作文(五年级)
2019/08/08 职场文书
Python包管理工具pip的15 个使用小技巧
2021/05/17 Python
PyTorch 如何检查模型梯度是否可导
2021/06/05 Python