js"无缝"滚动原理(解决IE与"火狐"的差异)
来源:互联网 发布:吃鸡网络延迟检测 编辑:程序博客网 时间:2024/05/16 01:33
闲话少说了。首先要介绍一下的是DHTML中的offsetWidth、scrollLeft(我做的是左滚动,所以就以这两个为例,其它方向的都差不多的了)
offsetWidth简单来就就是对象的宽度,如
这样在js中,document.getElementById("obj").offsetWidth所得到的就是120。scrollLeft是对象相对左边的滚动的位置。
滚动原理:主要是利用js控制包含滚动对象的“外对象”(我都不知该怎样表达了)的scrollLeft来实现。另外配合CSS中overflow:hidden实现陷藏滚动条的效果。具体点说就是:在CSS中,当对象内部的内容超出对象本身的宽度或高度时,可以用overflow来控制是否允许滚动或自动适应(注意:这里是关键。如果不允许滚动,那么什么“无缝”都是空谈的了)。所以我们要滚动一些对象(如几张图片)时,我们就可以在这些对象的外面加上一个比它们总的宽度或高度要小的对象,这样,就可以利用overflow来实现滚动了。
下面是我所画的一个原理图(点击查看大图):
网上很多的例子是这样实现的(这里有一个我从网上抄来改造测试用的)有兴趣的可以查看它的源程序。
它的主要原理是:先复制一个内对象,然后两个对象一起滚动,当内对象1滚动完后,滚动位置又回来原来的位置,又开始滚动内对象1。这样看起来,就好象对象在不断的滚动(即所谓的无缝滚动,其实细心留意,会发现当内对象1又开始滚动时,中间会有一个小小的跳动)。
关键代码如下:
内对象2.innerHTML=内对象1.innerHTML; //复制内对象
if(内对象2.offsetWidth-外对象.scrollLeft<=0)
外对象.scrollLeft-=内对象1.offsetWidth;//重新滚动内对象1
但通常这样写在“火狐”里能不断滚动,在IE里却都是滚动一阵就不动了,为什么呢?因为在IE中scrollLeft包括了滚动条的宽度,而“火狐”中却不包括。所以内对象2.offsetWidth-外对象.scrollLeft<=0在IE中这个条件通常都是不能满足的,因为IE中,滚动到右滚动条的左侧scrollLeft就会“停”了,不信可以看一个实例(http://knowmore.blogbus.com/files/11769931210.html )。
如何解决这个问题呢?主要是设一个变量与scrollLeft一起增长,当变量与scrollLeft不相等时,就说明已经滚动到尽头了,把scrollLeft和变量设置成到初始状态,内对象1就又可以滚动了!(具体实例)
本来想更具体一点分析的,无奈表达能力欠佳,加上在公司里空闲时间以不多,所以只好凑合着写了出来。希望有点用。
- js"无缝"滚动原理(解决IE与"火狐"的差异)
- js"无缝"滚动原理(解决IE与"火狐"的差异)
- JS无缝滚动[适合火狐 IE ]
- 兼容ie和火狐的js无缝八向滚动特效代码
- js无缝图片滚动代码,利用强大的JQUERY,兼容IE、火狐等主流浏览器
- (代码收藏)向上下左右不间断无缝滚动图片的效果(兼容火狐和IE)
- 向上下左右不间断无缝滚动图片的效果(兼容火狐和IE)
- JS向上下左右不间断无缝滚动图片代码(兼容IE火狐)
- js在火狐和IE浏览器的差异
- JS在火狐和IE下的差异
- IE、火狐和谷歌关于一些JS的差异
- 火狐与IE的7个JavaScript差异
- JS的无缝滚动
- 向上下左右不间断无缝滚动图片的效果(兼容火狐和IE)
- 文字+图片无缝滚动 兼容ie 360 火狐 谷歌 [花20积分买的]
- 向上下左右不间断无缝滚动图片的效果(兼容火狐和IE)
- JS在IE和火狐中的差异
- JS在IE和火狐中的差异
- 中国经济稳中求进又是一年
- js中类似explode的方法
- 有待试用,查看是谁锁住了我的数据库
- Spring源代码分析-Persist--JdbcTemplate
- iframe导航
- js"无缝"滚动原理(解决IE与"火狐"的差异)
- org.apache.jasperException:the absolute uri:http://kava.sun.com/jsp/jstl/c
- OReilly JavaScript The Good Parts 关于变量的使用
- JVM编译时和运行时,内存的分配
- servlet配置详解
- 指令解析
- 数据结构学习(十一)——二叉树的操作
- SQL 聚合函数和空结果集对@@Rowcount的影响
- zip文档中的例子