您的位置: 首页 > 技术文档 > 网页制作 > 不间断滚动图片Javascript特效讲解
焦点图片轮换第三季——iFocus 回到列表 IE 下 href 的 BUG
 不间断滚动图片Javascript特效讲解

作者:yaohaixiao 时间: 2008-11-14 文档类型:原创 来自:蓝色理想

第 1 页 不间断滚动图片Javascript特效讲解 [1]
第 2 页 不间断滚动图片Javascript特效讲解 [2]
第 3 页 不间断滚动图片Javascript特效讲解 [3]
第 4 页 不间断滚动图片Javascript特效讲解 [4]

我很久前在YAHOO上扣的代码,兼容性很好,在Windows下的主流浏览器中可以正常运行。

演示地址index.html

代码下载scrollpic.rar

大家先不要急着下载代码,你随时都可以下,我们来分析下代码(代码中我已经写了很详细的注释),要之其所以然,在解读别人的代码中学习提高自己,然后可以灵活运用,这个才是我将这个效果贴出来的主要目的,代码如下:

scrollver.js

scrollVertical.prototype.scrollArea=null;      // 滚动的区域
scrollVertical.prototype.scrollMsg=null;       // 要滚动的内容
scrollVertical.prototype.unitHeight=0;         // 单独一行滚动内容的高度(程序中通过过的要滚动行的一个节点的offsetHeight获得)
scrollVertical.prototype.msgHeight=0;          // 整个滚动内容的高度
scrollVertical.prototype.copyMsg=null;         // 复制滚动内容(程序中使用复制scrollMsg.innerHTML来获得的)
scrollVertical.prototype.scrollValue=0;        // 滚动的值
scrollVertical.prototype.scrollHeight=0;       // 滚动高度
scrollVertical.prototype.isStop=true;          // 停止滚动
scrollVertical.prototype.isPause=false;        // 暂停滚动
scrollVertical.prototype.scrollTimer=null;     // 滚动计时器
scrollVertical.prototype.speed=2000;           // (默认)滚动的时间间隔2秒
/**
* @method isMoz - 判断是否为Mozilla系列浏览器
*/
scrollVertical.prototype.isMoz = function(){
    return navigator.userAgent.toLowerCase().indexOf('gecko') > 0;
};
/**
* @method play - 滚动信息的处理方法(函数)
* @param {Object} o - 滚动类
*/
scrollVertical.prototype.play = function(o){
    var s_msg = o.scrollMsg;
    var c_msg = o.copyMsg;
    var s_area = o.scrollArea;
    var msg_h = o.msgHeight;
   
    var anim = function(){
        // 如果已经开始计时(间隔时间执行向上滚动),
        // 就停止它(以免无限制执行,耗系统资源)。
        if (o.scrollTimer) {
            clearTimeout(o.scrollTimer);
        }
        // 如果暂停了滚动(鼠标放到了滚动层上)
        // 开始以10毫秒的时间间隔运行滚动   
        if (o.isPause) {
            o.scrollTimer = setTimeout(anim, 10);
            return;
        }
        // 当显示完所有信息后(这时滚动的距离就等于要滚动信息的高度msg_h)
        // 这时又重新开始滚动,将滚动距离清零
        if (msg_h - o.scrollValue <= 0) {
            o.scrollValue = 0;
        }
        else {
            o.scrollValue += 1;
            o.scrollHeight += 1;
        }
        // 根据浏览器的不同,处理滚动
        if (o.isMoz) { // Mozilla引擎浏览器
            s_area.scrollTop = o.scrollValue;
        }
        else { // 其余的浏览器则使用控制CSS样式处理滚动
            s_msg.style.top = -1 * o.scrollValue + "px";
            c_msg.style.top = (msg_h - o.scrollValue) + "px";
        }
        // 滚动高度等于显示滚动区域高度时(滚动完一行,一行内容全部显示)
        // 暂停4秒中,然后再开始执行下依次滚动。
        if (o.scrollHeight % s_area.offsetHeight == 0) {
            o.scrollTimer = setTimeout(anim, o.speed);
        }
        else {
            // 在两行内容之间过度滚动时,每10豪秒上升1px
            o.scrollTimer = setTimeout(anim, 10);
        }
    };
    // 执行滚动
    anim();
};
/**
* scrollVertical 垂直滚动的构造函数
* @param {Object} disp   -  必须  显示滚动区域的DOM节点(或节点ID)
* @param {Object} msg    -  必须  被显示的信息的DOM节点(或节点ID)
* @param {string} tg     -  可选  以什么标记为一行的标签名称(tagName)
*/
function scrollVertical(disp, msg, tg){
    // 给在之前定义的this.scrollArea付值
    if (typeof(disp) == 'string') {
        // 如果disp给的是节点的ID,通过document.getElementById获取该节点
        // 然后付值给this.scrollArea
        this.scrollArea = document.getElementById(disp);
    }
    else {
        // 如果是DOM节点,直接付给this.scrollArea
        this.scrollArea = disp;
    }
    // 以给this.scrollArea相同的方法给this.scrollMsg付值
    if (typeof(msg) == 'string') {
        this.scrollMsg = document.getElementById(msg);
    }
    else {
        this.scrollMsg = msg;
    }
   
    // 为了开发方便,
    // 不用一直写this.scrollMsg这么常的名字,
    // 将两个对象付给局部变量
    var s_msg = this.scrollMsg;
    var s_area = this.scrollArea;
   
    // 如果没有给定一行的识别标签,
    // 默认将li标签认为是一行的标签
    // 所以上面介绍的,tag参数是可选的
    if (!tg) {
        var tg = 'li';
    }
   
    // 获取单行的高度
    // 获取到第一(s_msg.getElementsByTagName(tg)[0])tg(一行的标签)的高度,作为单行的高度
    this.unitHeight = s_msg.getElementsByTagName(tg)[0].offsetHeight;
    // 获取整个信息框的高度
    // 公式为 单行高度(unitHeight)*行数(s_msg.getElementsByTagName(tg).length,显示信息中包含多少个tg(行)标签)
    this.msgHeight = this.unitHeight * s_msg.getElementsByTagName(tg).length;
    /*
     * 复制要显示的信息:
     * 连续滚动的实现其实就是通过复制信息,
     * 并将复制的信添加到原始信息后
     * 当原始信息滚动显示完成,就接着滚动显示复制的信息
     * 但给人的错觉是,我们看到信息连续不断的显示
     */
    // 创建复制内容节点
    var copydiv = document.createElement('div');
    // 这个地方感觉有点嵌妥
    // 直接使用element.id的方式,不过看上去,主流的浏览器都支持
    // 标准的DOM Core方法:
    // copydiv.setAttribute('id',s_area.id + "_copymsgid")
    copydiv.id = s_area.id + "_copymsgid";
    // 复制原始的信息
    // 将原始的信息s_msg中的内容,直接用innerHTML写到
    copydiv.innerHTML = s_msg.innerHTML;
    // 设置复制信息节点的高度
    copydiv.style.height = this.msgHeight + "px";
    // 将复制节点添加到原始接点(scrollMsg)后
    // 其实实现的方法就是将复制信息节点(copydiv)添家到显示区域的节点(scrollArea)中
    s_area.appendChild(copydiv);
   
    this.copyMsg = copydiv;
    // 开始执行滚动方法
    this.play(this);
}

我在脚本的注释中已经说了这个效果的实现原理,而实现一个效果的关键就是在于运用setTimeout方法和clearTimeout方法。

出处:蓝色理想
责任编辑:moby

上一页 下一页 不间断滚动图片Javascript特效讲解 [2]

◎进入论坛网页制作WEB标准化版块参加讨论,我还想发表评论

相关文章 更多相关链接
焦点图片轮换第三季——iFocus
JavaScript的陷阱
用javascript修复浏览器中头痛问题
Javascript利用闭包循环绑定事件
理解"渐进增强"
作者文章
WEB前端开发经验总结 Ⅰ
关于Javascript的内存泄漏问题
Ajax标签导航实例详解
XMLHTTPRequest的属性和方法简介
Ajax标签导航效果
热门搜索:CSS Fireworks 设计比赛 网页制作 web标准 用户体验 UE photoshop Dreamweaver Studio8 Flash 手绘 CG
站点最新 站点最新列表
全兼容的纯CSS级联菜单要点浅析
CSS Sprites 图片整合技术
雅安,一场中式旅行
热烈祝贺"醒狮杯"圆满结束
菊花宝典大赏大奖教程《阳台》
交互设计师怎样和产品团队合作
Photoshop打造个性潮流音乐海报
简单解读面包屑
CSS盒模型
Apple与Microsoft网站可用性研究
栏目最新 栏目最新列表
safari 4 新特性
Photoshop制作精美高光流线字
IE下img多余5像素空白解决方法
XHTML1.0与HTML兼容指引16条
JavaScript优化细节
全兼容的纯CSS级联菜单要点浅析
CSS Sprites 图片整合技术
Photoshop打造个性潮流音乐海报
CSS盒模型
45度地图编辑器及游戏开发心得
>> 分页 首页 前页 后页 尾页 页次:1/41个记录/页 转到 页 共4个记录

蓝色理想版权申明:除部分特别声明不要转载,或者授权我站独家播发的文章外,大家可以自由转载我站点的原创文章,但原作者和来自我站的链接必须保留(非我站原创的,按照原来自一节,自行链接)。文章版权归我站和作者共有。

转载要求:转载之图片、文件,链接请不要盗链到本站,且不准打上各自站点的水印,亦不能抹去我站点水印。

特别注意:本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有,文章若有侵犯作者版权,请与我们联系,我们将立即删除修改。

本文现有 1 条评论 评分:- llllllllllllllllllll + 评分人数: 1 ,平均分: 5.00


bing8 Publish at 2008-11-17 15:10:37 评分5
谢谢分享
您的评论
用户名:  口令:
说明:输入正确的用户名和密码才能参与评论。如果您不是本站会员,你可以注册 为本站会员。
注意:文章中的链接、内容等需要修改的错误,请用报告错误,以利文档及时修改。
不评分 1 2 3 4 5
注意:请不要在评论中含与内容无关的广告链接,违者封ID
请您注意:
·不良评论请用报告管理员,以利管理员及时删除。
·尊重网上道德,遵守中华人民共和国的各项有关法律法规
·承担一切因您的行为而直接或间接导致的民事或刑事法律责任
·本站评论管理人员有权保留或删除其管辖评论中的任意内容
·您在本站发表的作品,本站有权在网站内转载或引用
·参与本评论即表明您已经阅读并接受上述条款
推荐文档 | 打印文档 | 评论文档 | 报告错误  
专业书推荐 更多内容
《Web标准设计》
《美工神话》
《Flash短片轻松学》
Illustrator CS3质感绘画表现技法
大师之路--Photoshop 完全解析
《用户体验要素》
HTML与CSS入门经典(第7版)
作品集 更多内容

GenNext网站 Flower DISCUZ!论坛模板设计 Station UI Avatar WESBROOK 用CSS写的Michael Ja 马自达sns社区