关于滚动图片停在浏览器边界上的一点解决办法(个人愚见)。。

   最近开始学习javascript,想写个滚动图片的脚本来试试。

 

   想想这种脚本的模板网上应该有许多,果断百度之,果然一堆,然后复制了一个代码下来试试,大概如下(向上滚动):

 

自己拿来试了试,发现图片只滚动了一点便停住了,看这停位置强烈怀疑是停在了浏览器边界上(实验的3幅图均为240*320,浏览器IE6)。

 

在网上也查了些资料,感觉问题应该是处在scrollTop,offsetHeight等等之上。于是乎在demo2.innerHTML=demo1.innerHTML之后,添了

 

一句话进行验证:

 

document.writeln(demo.offsetTop+" "+demo1.offsetHeight+" "+demo.offsetHeight+" "+document.body.offsetHeight);

 

结果呢?

 

惊奇地发现demo1.offsetHeight值为0;

 

根据offsetHeight的定义:IE、Opera 认为 offsetHeight = clientHeight + 滚动条 + 边框。

 

怎么看都不可能为0吧!

 

想想,觉得是不是给demo1添加图片后,其本身的height并无任何变化,于是手动修改了下demo1,如下:

 

<div id="demo1" style="width:240px; height:960px ">

 

还真就能行了,图片也滚动了,demo1.offsetHeight也有值了。

 

虽然原理依然还是不太清楚,不过从程序中明显可以读出,若demo1.offsetHeight为0时,那么图片滚动到浏览器顶部时就会停住。

 

应该是在向demo1中添加图片时,其offsetHeight是不变且为0的,而手动添加height才能修改offsetHeight的值。

 

初学者的愚见,不知对否。

 

PS:从脚本中还能读出,只有当demo1的总height大于demo的height时,脚本能正常运行。

 

PS: PS: 又想了想,不对,其实PS里说的是错的.脚本中没哪个地方说了要demo1的总height要大于demo的height啊.于是,今天又试了试,发现其实

 

demo的scrollTop是有上界的,而这个上界应该是(从我的例子来看,3幅图的总height为960px,测试中我将demo的height设为1000px):

 

scrollTop的最大值=(960+960)(demo1与demo2的总height) - 1000(demo的height)=920px  

(因为控件认为只要多加920px的范围,全部图片都至少能正常显示一遍)

 

所以当scrollTop达到920时.将不再增加,图片就停住了.

 

之后我对代码又进行了一些修改,如下:

 

13行  demo2.offsetTop-demo.scrollTop<=0 改成 demo1.offsetHeight<=demo.scrollTop

(因为demo2的offsetTop还包括了边框距离)

 

 

那么,结论是,要使demo1.offsetHeight<=demo.scrollTop能够达到,至少需要:  

 

   2*demo1.height - demo.height >=demo1.height    推出 demo1.height >= demo.height; (前提:demo2是完全从demo1复制过来的)


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值