js 实现无缝滚动 兼容IE和FF


Posted in Javascript onJuly 15, 2009

原理解析:
1、首先给容器设定高度或宽度,比如ul,设置ul高40px;overflow:hidden;
2、容器高度设定后,内容的高度超出40px,超过部分溢出,被隐藏,scrollTop属性可用,这一点可以用overflow:scroll来看效果;
3、改变容器的scrollTop(上下滚动)属性的值,让内容上下移动一个节点的位置(滚动的原理);
4、到滚动的高度scrollTop大于或等于要滚动节点的高度时,设置scrollTop=0,并把把子节点树中的第一个移动到最后,重新开始滚动,无间断循环滚动效果就出现了。
html 源码

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml"> 
<head> 
<title>滚动</title> 
<script type="text/javascript" src="divCycle.js" src="divCycle.js"></script> 
<style><!-- 
li{ height:20px; mar} 
--></style><style bogus="1">li{ height:20px; mar}</style> 
</head> 
<body> 
<div> 
<ul id="list" style="border:1px #ccc solid; overflow:hidden; height:40px; width:100px; margin:0; padding:0; list-style-type:none;"> 
    <li>1</li> 
<li>2</li> 
<li>3</li> 
<li>4</li> 
<li>5</li> 
<li>6</li> 
<li>7</li> 
<li>8</li> 
<li>9</li> 
<li>10</li> 
</ul> 
</div> 
<script type="text/javascript"><!-- 
new simpleScroll("list",20,40,1); 
// --></script> 
</body> 
</html>

js源码
// JavaScript Document /***** 
@author leaves chen (leaves615@gmail.com) 
@copyright 2009 
*****/ 
var pause=false; 
var scrollTimeId=null; 
var container=null; 
var lineHeight=null; 
var speed=0; 
var delay=0; 
simpleScroll=function(container1,lineHeight1,speed1,delay1){ 
    container=document.getElementById(container1); 
    lineHeight=lineHeight1; 
    speed=speed1; 
    delay=delay1; 
    //滚动效果 
    scrollexc=function(){ 
        if(pause) return ; 
        container.scrollTop+=2; 
        var lh=lineHeight||container.getElementsByTagName('li')[0].offsetHeight; 
        if(container.scrollTop%lh<=1){ 
            clearInterval(scrollTimeId); 
            fire(); 
            container.scrollTop=0; 
            setTimeout(start,delay*1000); 
        } 
    }; 
    //开始滚动 
    start=function(){ 
        var lh=lineHeight||container.getElementsByTagName('li')[0].offsetHeight; 
            if (container.scrollHeight - container.offsetHeight >= lh) 
                scrollTimeId = setInterval(scrollexc, speed); 
    }; 
    //把子节点树中的第一个移动到最后 
    fire=function(){ 
        container.appendChild(container.getElementsByTagName('li')[0]); 
    }; 
    container.onmouseover=function(){pause=true;}; 
    container.onmouseout=function(){pause=false;}; 
    setTimeout(start,delay*1000); 
};

Javascript 相关文章推荐
htm调用JS代码
Mar 15 Javascript
HTA版JSMin(省略修饰语若干)基于javascript语言编写
Dec 24 Javascript
javascript中的new使用
Mar 20 Javascript
Tab切换组件(选项卡功能)实例代码
Nov 21 Javascript
javascript修改IMG标签的src问题
Mar 28 Javascript
javascript作用域链(Scope Chain)用法实例解析
Nov 30 Javascript
ECMAScript6变量的解构赋值实例详解
Sep 19 Javascript
基于vue-ssr的静态网站生成器VuePress 初体验
Apr 17 Javascript
ES6中let 和 const 的新特性
Sep 03 Javascript
vue同步父子组件和异步父子组件的生命周期顺序问题
Oct 07 Javascript
对angular4子路由&amp;辅助路由详解
Oct 09 Javascript
在vue中使用eslint,配合vscode的操作
Nov 09 Javascript
兼容IE/Firefox/Opera/Safari的检测页面装载完毕的脚本Ext.onReady的实现
Jul 14 #Javascript
JavaScript 继承详解(四)
Jul 13 #Javascript
JavaScript 继承详解(三)
Jul 13 #Javascript
JavaScript 继承详解(二)
Jul 13 #Javascript
JavaScript 继承详解(一)
Jul 13 #Javascript
javascript dom 操作详解 js加强
Jul 13 #Javascript
jquery 学习笔记 传智博客佟老师附详细注释
Sep 12 #Javascript
You might like
极典R601SW收音机
2021/03/02 无线电
解析PHP的Yii框架中cookie和session功能的相关操作
2016/03/17 PHP
php结合mysql与mysqli扩展处理事务的方法
2016/06/29 PHP
PHP使用strrev翻转中文乱码问题的解决方法
2017/01/13 PHP
PHP 数组黑名单/白名单实例代码详解
2019/06/04 PHP
用JavaScript调用WebService的示例
2008/04/07 Javascript
javascript 常用代码技巧大收集
2009/02/25 Javascript
Jquery 常用方法经典总结
2010/01/28 Javascript
解析javascript 数组以及json元素的添加删除
2013/06/26 Javascript
thinkphp中常用的系统常量和系统变量
2014/03/05 Javascript
js动态添加表格数据使用insertRow和insertCell实现
2014/05/22 Javascript
Javascript遍历Html Table示例(包括内容和属性值)
2014/07/08 Javascript
JS实现支持Ajax验证的表单插件
2016/03/24 Javascript
基于HTML5+JS实现本地图片裁剪并上传功能
2017/03/24 Javascript
浅谈webpack打包之后的文件过大的解决方法
2018/03/07 Javascript
vue.js的computed,filter,get,set的用法及区别详解
2018/03/08 Javascript
浅谈vue.js导入css库(elementUi)的方法
2018/03/09 Javascript
深入浅析vue-cli@3.0 使用及配置说明
2019/05/08 Javascript
解决layui调用自定义方法提示未定义的问题
2019/09/14 Javascript
[45:38]DOTA2上海特级锦标赛主赛事日 - 1 胜者组第一轮#1Liquid VS Alliance第一局
2016/03/02 DOTA
Python函数定义及传参方式详解(4种)
2019/03/18 Python
用python生成与调用cntk模型代码演示方法
2019/08/26 Python
用python实现前向分词最大匹配算法的示例代码
2020/08/06 Python
Scrapy爬虫文件批量运行的实现
2020/09/30 Python
如何利用pycharm进行代码更新比较
2020/11/04 Python
HTML5页面音视频在微信和app下自动播放的实现方法
2016/10/20 HTML / CSS
StubHub新加坡:购买和出售全球活动门票
2017/03/10 全球购物
加拿大户外探险购物网站:SAIL
2020/06/27 全球购物
MIS软件工程师的面试题
2016/04/22 面试题
Static Nested Class 和 Inner Class的不同
2013/11/28 面试题
工程质量承诺书范文
2014/03/27 职场文书
财务总监岗位职责
2015/02/03 职场文书
python通配符之glob模块的使用详解
2021/04/24 Python
MySQL连接查询你真的学会了吗?
2021/06/02 MySQL
Win10/Win11 任务栏替换成经典样式
2022/04/19 数码科技
利用Redis实现点赞功能的示例代码
2022/06/28 Redis