再说IMG的高度和宽度

前几天发了一段文字《关于IMG的高度和宽度》,可能是问题太简单了,鲜有回复。于是,我不得不独自考虑这个问题,下面是我思考的过程,还请各位指教。

1、可能是方法调用时机的问题

前几天的测试中,我一直以为是DOM和JavaScript的区别,导致了不能取得图片大小的问题。今晚我又分析了上次的测试代码,发现两个方法的触发时间不同:DOM的方法是在HTML解析时触发,而JavaScript的方法则是在图片加载完成后,也就是在IMG的onload事件中触发的。

于是,我将resizePicturesOfThisPost方法改在BODY的onload事件中调用,问题解决了。

ContractedBlock.gifExpandedBlockStart.gifBody Onload Event
 1None.gif<html>
 2None.gif<head>
 3ExpandedBlockStart.gifContractedBlock.gif<script language="JavaScript">dot.gif
 4InBlock.gif<!--
 5InBlock.giffunction resizePicturesOfThisPost()
 6ExpandedSubBlockStart.gifContractedSubBlock.gifdot.gif
{
 7InBlock.gif    var pics = document.getElementsByName("PicturesOfThisPost"
);
 8InBlock.gif    var
 i;
 9
InBlock.gif
10InBlock.gif    var intMaxWidth = 600
;
11InBlock.gif    var intRate = 1
;
12
InBlock.gif
13InBlock.gif    for (i = 0; i < pics.length; i++
)
14ExpandedSubBlockStart.gifContractedSubBlock.gif    dot.gif
{
15InBlock.gif        if (pics[i].width >
 intMaxWidth)
16ExpandedSubBlockStart.gifContractedSubBlock.gif        dot.gif
{
17InBlock.gif            intRate = intMaxWidth /
 pics[i].width;
18
InBlock.gif
19InBlock.gif            pics[i].width = pics[i].width *
 intRate;
20InBlock.gif            pics[i].height = pics[i].height *
 intRate;
21ExpandedSubBlockEnd.gif        }

22ExpandedSubBlockEnd.gif    }

23ExpandedSubBlockEnd.gif}

24ExpandedBlockEnd.gif//-->
25None.gif
</script>
26None.gif</head>
27None.gif
28None.gif<body onload="resizePicturesOfThisPost();">

29None.gif<img name="PicturesOfThisPost" src="" border="0" />
30None.gif</body>
31None.gif</html>
32None.gif

2、如何追加事件处理

为了节约修改页面的时间,我在index页面使用Server.Execute方法调用其他页面。也就是说,我无法在子页面中操作BODY的onload事件,那么,要怎么样才能将子页面的JavaScript函数添加到BODY的onload事件中呢?

在MSDN中有一个attachEvent方法,它的原型是:bSuccess = object.attachEvent(sEvent, fpNotify)

None.gifvar rtn = document.body.attachEvent("onload", resizePicturesOfThisPost);

从理论上分析,有了上面的代码,我就可以在子页面将resizePicturesOfThisPost加到BODY的onload事件中了。可是,意想不到的事情又发生了,这段代码没有任何作用,没有任何错误,attachEvent的返回值也是true。

3、也许是IE的BUG

从attachEvent的返回值是true可以断定,attachEvent方法调用没有错误,我想也许换个事件就好用了。google了一下之后,还是在园子里找到了解决方案:birdshome的一段文字中提到了这个问题,他说在document.body对象上的确没有效果,但是在window对象的onload事件上是正确的。

经过测试,birdshome所言非虚,为了进一步验证他的猜想,我在FireFox测试了相同的代码,无论是document.body还是window都没有效果。也许是IE和FF共同的bug,也许……

4、结论

DOM和JavaScript对象在IMG处理方面没有区别,上次的问题是因为触发时机不同造成的。关于attachEvent在document.body的onload事件无效一事,哪位有深入的研究,还请不吝赐教。

转载于:https://www.cnblogs.com/gucsnet/archive/2007/02/04/639263.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值