`
jickcai
  • 浏览: 246782 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

js 滚动

阅读更多

转载: http://www.popub.net/script/MSClass.html

 

<!--
/*MSClass (Class Of Marquee Scroll通用不间断滚动JS封装类) Ver 1.65*\

 制作时间:2006-08-29 (Ver 0.5)
 发布时间:2006-08-31 (Ver 0.8)
 更新时间:2007-12-28 (Ver 1.65)
 更新说明: + 加入功能 * 修正、完善
    1.65.071228
        * 横向、纵向滚动格式调整 (解决横向滚动换行的问题,无需特殊设置)
        * 彻底解决由于IE问题导致上下滚动页面留白的问题 (本次更新主要解决此问题,感谢天上的书生参与测试)
    1.6.070131
        + 禁止鼠标控制暂停或继续 (将第9个参数设置为-1或者动态赋值将ScrollSetp设置为-1)
        + 判断是否可以滚动 (若内容区域小于显示区域,则自动取消滚动)
        + 跳过初始化错误 (避免引起其它滚动的停止)
        + 默认值 (除容器ID必选外,其他参数均可根据情况进行选择设置)
        + 参数动态赋值 (方向可用英文表示top|up|bottom|down|left|right,使其更直观、方便)
        * 文字滚动不准确 (本次更新主要目的解决此Bug,感谢周珺参与测试)
    1.4.061211
        + 鼠标悬停改变滚动方向 (鼠标悬停控制左右滚动)
        * 由于文档下载过慢而导致获取的高度/宽度不准确
        * 浏览器兼容问题 (IE、FF、Opera、NS、MYIE)
    1.2.060922
        + 指定范围间歇滚动
        * 程序调整
        * 连续间歇滚动停止的错误
    1.0.060901
        + 向下、向右滚动
        + 开始等待时间
        + 连续滚动
        * 调整时间单位
        * 滚动误差
        * 随机死循环
        * 加强性能
        * 程序优化
    0.8.060829
          翻屏不间断向上、向左滚动

 演示地址:http://www.popub.net/script/MSClass.html
 下载地址:http://www.popub.net/script/MSClass.js

 应用说明:页面包含<script type="text/javascript" src="MSClass.js"></script>
   
    创建实例:
        //参数直接赋值法
        new Marquee("marquee")
        new Marquee("marquee","top")
        ......
        new Marquee("marquee",0,1,760,52)
        new Marquee("marquee","top",1,760,52,50,5000)
        ......
        new Marquee("marquee",0,1,760,104,50,5000,3000,52)
        new Marquee("marquee",null,null,760,104,null,5000,null,-1)

        //参数动态赋值法
        var marquee1 = new Marquee("marquee")    *此参数必选
        marquee1.Direction = "top";    或者    marquee1.Direction = 0;
        marquee1.Step = 1;
        marquee1.Width = 760;
        marquee1.Height = 52;
        marquee1.Timer = 50;
        marquee1.DelayTime = 5000;
        marquee1.WaitTime = 3000;
        marquee1.ScrollStep = 52;
        marquee1.Start();

    参数说明:
        ID        "marquee"    容器ID        (必选)
        Direction    (0)        滚动方向    (可选,默认为0向上滚动) 可设置的值包括:0,1,2,3,"top","bottom","left","right" (0向上 1向下 2向左 3向右)
        Step        (1)        滚动的步长    (可选,默认值为2,数值越大,滚动越快)
        Width        (760)        容器可视宽度    (可选,默认值为容器初始设置的宽度)
        Height        (52)        容器可视高度    (可选,默认值为容器初始设置的高度)
        Timer        (50)        定时器        (可选,默认值为30,数值越小,滚动的速度越快,1000=1秒,建议不小于20)
        DelayTime    (5000)        间歇停顿延迟时间(可选,默认为0不停顿,1000=1秒)
        WaitTime    (3000)        开始时的等待时间(可选,默认或0为不等待,1000=1秒)
        ScrollStep    (52)        间歇滚动间距    (可选,默认为翻屏宽/高度,该数值与延迟均为0则为鼠标悬停控制,-1禁止鼠标控制)

 使用建议:
        1、建议直接赋予容器的显示区域的宽度和高度,如(<div id="marquee" style="width:760px;height:52px;">......</div>)
        2、建议为容器添加样式overflow = auto,如(<div id="marquee" style="width:760px;height:52px;overflow:auto;">......</div>)
        3、为了更准确的获取滚动区域的宽度和高度,请尽可能将各滚动单位直接赋予正确宽高度
        4、对于TABLE标记的横向滚动,需要对TABLE添加样式display = inline,如(<div id="marquee" style="width:760px;height:52px;overflow:auto;"><table style="display:inline">......</table></div>)
        5、对于翻屏滚动或间歇滚动,要注意各滚动单位间的间距,同时需要对容器的可视高度和可视宽度做好准确的设置,对于各滚动单位间的间距可以通过设置行间距或者单元格的高宽度来进行调整
        6、对于LI自动换行的问题暂时没有更好的解决办法,建议将其转换成表格(TABLE)的形式来达到同等的效果
        7、针对横向滚动的文字段落,如果最末端是以空格" "结束的,请将空格" "转换成"&nbsp;"
        8、鼠标悬停滚动思想源自Flash,所以有一定的局限性(容器内仅允许用图片<img>或者带链接的图片<a><img></a>的形式,并需要禁止其自动换行)

 感  谢:
    天上的书生(QQ:30370740) (IE页面留白的Bug) 2007/12/22
    周珺 zhoujun#yuchengtech.com (文字滚动跳行的bug) 2007/01/31
    自本程序发布以来,收到不少朋友的邮件,提出了很多意见和建议,感谢大家的支持!

\***程序制作/版权所有:崔永祥(333) E-Mail:zhadan007@21cn.com 网址:http://www.popub.net***/


function Marquee()
{
    this.ID = document.getElementById(arguments[0]);
    if(!this.ID)
    {
        alert("您要设置的\"" + arguments[0] + "\"初始化错误\r\n请检查标签ID设置是否正确!");
        this.ID = -1;
        return;
    }
    this.Direction = this.Width = this.Height = this.DelayTime = this.WaitTime = this.CTL = this.StartID = this.Stop = this.MouseOver = 0;
    this.Step = 1;
    this.Timer = 30;
    this.DirectionArray = {"top":0 , "up":0 , "bottom":1 , "down":1 , "left":2 , "right":3};
    if(typeof arguments[1] == "number" || typeof arguments[1] == "string")this.Direction = arguments[1];
    if(typeof arguments[2] == "number")this.Step = arguments[2];
    if(typeof arguments[3] == "number")this.Width = arguments[3];
    if(typeof arguments[4] == "number")this.Height = arguments[4];
    if(typeof arguments[5] == "number")this.Timer = arguments[5];
    if(typeof arguments[6] == "number")this.DelayTime = arguments[6];
    if(typeof arguments[7] == "number")this.WaitTime = arguments[7];
    if(typeof arguments[8] == "number")this.ScrollStep = arguments[8];
    this.ID.style.overflow = this.ID.style.overflowX = this.ID.style.overflowY = "hidden";
    this.ID.noWrap = true;
    this.IsNotOpera = (navigator.userAgent.toLowerCase().indexOf("opera") == -1);
    if(arguments.length >= 7)this.Start();
}

Marquee.prototype.Start = function()
{
    if(this.ID == -1)return;
    if(this.WaitTime < 800)this.WaitTime = 800;
    if(this.Timer < 20)this.Timer = 20;
    if(this.Width == 0)this.Width = parseInt(this.ID.style.width);
    if(this.Height == 0)this.Height = parseInt(this.ID.style.height);
    if(typeof this.Direction == "string")this.Direction = this.DirectionArray[this.Direction.toString().toLowerCase()];
    this.HalfWidth = Math.round(this.Width / 2);
    this.HalfHeight = Math.round(this.Height / 2);
    this.BakStep = this.Step;
    this.ID.style.width = this.Width + "px";
    this.ID.style.height = this.Height + "px";
    if(typeof this.ScrollStep != "number")this.ScrollStep = this.Direction > 1 ? this.Width : this.Height;
    var templateLeft = "<table cellspacing='0' cellpadding='0' style='border-collapse:collapse;display:inline;'><tr><td noWrap=true style='white-space: nowrap;word-break:keep-all;'>MSCLASS_TEMP_HTML</td><td noWrap=true style='white-space: nowrap;word-break:keep-all;'>MSCLASS_TEMP_HTML</td></tr></table>";
    var templateTop = "<table cellspacing='0' cellpadding='0' style='border-collapse:collapse;'><tr><td>MSCLASS_TEMP_HTML</td></tr><tr><td>MSCLASS_TEMP_HTML</td></tr></table>";
    var msobj = this;
    msobj.tempHTML = msobj.ID.innerHTML;
    if(msobj.Direction <= 1)
    {
        msobj.ID.innerHTML = templateTop.replace(/MSCLASS_TEMP_HTML/g,msobj.ID.innerHTML);
    }
    else
    {
        if(msobj.ScrollStep == 0 && msobj.DelayTime == 0)
        {
            msobj.ID.innerHTML += msobj.ID.innerHTML;
        }
        else
        {
            msobj.ID.innerHTML = templateLeft.replace(/MSCLASS_TEMP_HTML/g,msobj.ID.innerHTML);
        }
    }
    var timer = this.Timer;
    var delaytime = this.DelayTime;
    var waittime = this.WaitTime;
    msobj.StartID = function(){msobj.Scroll()}
    msobj.Continue = function()
                {
                    if(msobj.MouseOver == 1)
                    {
                        setTimeout(msobj.Continue,delaytime);
                    }
                    else
                    {    clearInterval(msobj.TimerID);
                        msobj.CTL = msobj.Stop = 0;
                        msobj.TimerID = setInterval(msobj.StartID,timer);
                    }
                }

    msobj.Pause = function()
            {
                msobj.Stop = 1;
                clearInterval(msobj.TimerID);
                setTimeout(msobj.Continue,delaytime);
            }

    msobj.Begin = function()
        {
            msobj.ClientScroll = msobj.Direction > 1 ? msobj.ID.scrollWidth / 2 : msobj.ID.scrollHeight / 2;
            if((msobj.Direction <= 1 && msobj.ClientScroll <= msobj.Height + msobj.Step) || (msobj.Direction > 1 && msobj.ClientScroll <= msobj.Width + msobj.Step))            {
                msobj.ID.innerHTML = msobj.tempHTML;
                delete(msobj.tempHTML);
                return;
            }
            delete(msobj.tempHTML);
            msobj.TimerID = setInterval(msobj.StartID,timer);
            if(msobj.ScrollStep < 0)return;
            msobj.ID.onmousemove = function(event)
                        {
                            if(msobj.ScrollStep == 0 && msobj.Direction > 1)
                            {
                                var event = event || window.event;
                                if(window.event)
                                {
                                    if(msobj.IsNotOpera)
                                    {
                                        msobj.EventLeft = event.srcElement.id == msobj.ID.id ? event.offsetX - msobj.ID.scrollLeft : event.srcElement.offsetLeft - msobj.ID.scrollLeft + event.offsetX;
                                    }
                                    else
                                    {
                                        msobj.ScrollStep = null;
                                        return;
                                    }
                                }
                                else
                                {
                                    msobj.EventLeft = event.layerX - msobj.ID.scrollLeft;
                                }
                                msobj.Direction = msobj.EventLeft > msobj.HalfWidth ? 3 : 2;
                                msobj.AbsCenter = Math.abs(msobj.HalfWidth - msobj.EventLeft);
                                msobj.Step = Math.round(msobj.AbsCenter * (msobj.BakStep*2) / msobj.HalfWidth);
                            }
                        }
            msobj.ID.onmouseover = function()
                        {
                            if(msobj.ScrollStep == 0)return;
                            msobj.MouseOver = 1;
                            clearInterval(msobj.TimerID);
                        }
            msobj.ID.onmouseout = function()
                        {
                            if(msobj.ScrollStep == 0)
                            {
                                if(msobj.Step == 0)msobj.Step = 1;
                                return;
                            }
                            msobj.MouseOver = 0;
                            if(msobj.Stop == 0)
                            {
                                clearInterval(msobj.TimerID);
                                msobj.TimerID = setInterval(msobj.StartID,timer);
                            }
                        }
        }
    setTimeout(msobj.Begin,waittime);
}

Marquee.prototype.Scroll = function()
{
    switch(this.Direction)
    {
        case 0:
            this.CTL += this.Step;
            if(this.CTL >= this.ScrollStep && this.DelayTime > 0)
            {
                this.ID.scrollTop += this.ScrollStep + this.Step - this.CTL;
                this.Pause();
                return;
            }
            else
            {
                if(this.ID.scrollTop >= this.ClientScroll)
                {
                    this.ID.scrollTop -= this.ClientScroll;
                }
                this.ID.scrollTop += this.Step;
            }
        break;

        case 1:
            this.CTL += this.Step;
            if(this.CTL >= this.ScrollStep && this.DelayTime > 0)
            {
                this.ID.scrollTop -= this.ScrollStep + this.Step - this.CTL;
                this.Pause();
                return;
            }
            else
            {
                if(this.ID.scrollTop <= 0)
                {
                    this.ID.scrollTop += this.ClientScroll;
                }
                this.ID.scrollTop -= this.Step;
            }
        break;

        case 2:
            this.CTL += this.Step;
            if(this.CTL >= this.ScrollStep && this.DelayTime > 0)
            {
                this.ID.scrollLeft += this.ScrollStep + this.Step - this.CTL;
                this.Pause();
                return;
            }
            else
            {
                if(this.ID.scrollLeft >= this.ClientScroll)
                {
                    this.ID.scrollLeft -= this.ClientScroll;
                }
                this.ID.scrollLeft += this.Step;
            }
        break;

        case 3:
            this.CTL += this.Step;
            if(this.CTL >= this.ScrollStep && this.DelayTime > 0)
            {
                this.ID.scrollLeft -= this.ScrollStep + this.Step - this.CTL;
                this.Pause();
                return;
            }
            else
            {
                if(this.ID.scrollLeft <= 0)
                {
                    this.ID.scrollLeft += this.ClientScroll;
                }
                this.ID.scrollLeft -= this.Step;
            }
        break;
    }
}
//-->

  • gd.rar (7.9 KB)
  • 下载次数: 5
分享到:
评论

相关推荐

    js滚动延时加载

    JavaScript滚动延时加载,也称为懒加载(Lazy Loading),是一种优化网页性能的技术。它主要应用于大量数据或图像的页面,通过只在用户滚动到可视区域时才加载相关内容,从而减少初次加载页面时的数据量,提高页面...

    New js 滚动条

    JavaScript滚动条是一个重要的前端开发话题,它涉及到网页用户体验的优化和界面交互的增强。传统的HTML滚动条虽然功能基本,但其样式和交互性往往不能满足现代网页设计的需求。因此,"New js 滚动条"通常是利用...

    极好用又方便的js滚动条源码

    首先,js滚动条源码通常是通过JavaScript编程语言实现的自定义滚动条解决方案。相比于浏览器默认的滚动条样式,自定义滚动条可以提供更美观、更具交互性的体验。开发者可以调整滚动条的宽度、颜色、形状等属性,使之...

    JS滚动条属性值

    JS滚动条属性值,取得滚动条各种数据值,简单处理JS操作滚动条

    js滚动集合(图片滚动,文字滚动)

    对于初学者,可以参考压缩包中的示例代码,逐步理解并实践JavaScript滚动效果的实现过程。对于有经验的开发者,这些实例也能提供灵感,帮助快速构建自定义的滚动功能。 总的来说,“js滚动集合”是一个实用的资源,...

    js滚动最新消息demo代码

    通过这个js滚动最新消息的demo,开发者可以学习到JavaScript在实际项目中的应用,了解如何结合DOM操作、事件处理、动画和响应式设计来创建交互式用户体验。同时,这也是提升JavaScript技能和深入理解前端开发的好...

    js滚动条实现dhtmlxSlider

    本教程将详细介绍如何使用dhtmlxSlider来实现JavaScript滚动条。 首先,dhtmlxSlider不仅限于滚动条,它还支持创建滑块组件,可以用于数值选择、音量控制、进度条等场景。其主要特点包括高度可定制的外观、多种操作...

    js滚动插件

    JavaScript滚动插件是一种用于网页动态滚动效果的工具,它能够为网页添加丰富的视觉效果,提升用户体验。在网页设计中,滚动效果通常是必不可少的元素,它可以让用户以更自然的方式浏览内容,尤其是对于长页面和单页...

    javascript滚动条

    JavaScript滚动条是一个重要的前端开发话题,它涉及到网页用户体验和页面交互设计。JavaScript允许开发者对浏览器的默认滚动行为进行自定义,以实现更加丰富和个性化的界面效果。在本项目中,"javascript滚动条"可能...

    纯js滚动条美化插件scrollBot

    总的来说,ScrollBot是一个强大的纯JavaScript滚动条美化工具,它提供了一种灵活、可定制的解决方案,让开发者能够为网站创造出独特且美观的滚动体验。通过深入理解ScrollBot的配置选项和使用方法,你可以进一步提升...

    javascript 滚动特效

    JavaScript滚动特效是一种常见的网页交互设计,它通过JavaScript代码来实现页面元素的动态滚动效果,比如导航菜单、新闻滚动、图片轮播等。这种特效能够提升用户体验,使网站更具活力和吸引力。JavaScript滚动特效...

    js滚动淡入浅出的效果

    在本主题中,“js滚动淡入浅出的效果”是指利用JavaScript技术实现的一种网页滚动时元素逐渐显现的视觉特效。这种效果通常通过调整元素的透明度或高度来实现,给用户带来平滑、自然的浏览体验。 1. **JavaScript...

    JS滚动字幕

    本文将深入解析如何利用JavaScript(简称JS)来创建滚动字幕,并结合给定的代码示例进行详细说明。 #### 原理概述 滚动字幕的基本原理是通过不断改变`&lt;div&gt;`元素的`scrollTop`属性,使内部内容看起来像是在上下...

    js滚动案例

    在这个"js滚动案例"中,我们关注的是如何利用JavaScript实现网页滚动效果。通过提供的文件1.html、2.html、2.js和1.js,我们可以探讨以下几个关键知识点: 1. **DOM操作**: - JavaScript能够通过Document Object ...

    JS滚动效果,首页滚动显示

    在本主题中,"JS滚动效果,首页滚动显示"是指利用JavaScript技术实现网站首页内容随着用户滚动页面时动态显示的效果。这种效果可以提升用户体验,使得信息展示更加流畅且吸引注意力。 在首页滚动显示中,常见的应用...

    一款效果很不错的JS滚动条

    标题中的“一款效果很不错的JS滚动条”指的是一个JavaScript实现的滚动条插件或库,它提供了优于浏览器默认滚动条的视觉效果和交互体验。在网页设计中,滚动条是必不可少的元素,尤其是在内容丰富的页面上,它帮助...

    简单JS随滚动条滚动导航

    【标题】"简单JS随滚动条滚动导航"所涉及的知识点主要集中在JavaScript的事件监听、DOM操作以及CSS样式实现上。这种类型的导航栏通常用于网页设计中,它能随着用户滚动页面而改变位置,始终保持在可见区域,为用户...

    商城产品图js滚动放大效果 支持IE6

    综上所述,这个压缩包提供了一个兼容IE6的商城产品图JavaScript滚动放大效果的完整解决方案,包括前端展示的HTML、CSS以及JavaScript代码,还有相关的使用说明和图片资源。开发者可以通过学习和使用这些资源,为自己...

    js 滚动效果封装库

    MSClass 通用不间断滚动JS封装类 的使用说明: 该Js类可设置各种形式的滚动效果,可随意将您的产品图片、新闻等内容设置为滚动。 上下左右、整屏、间歇式、延时滚动==效果均可实现。兼容所有主流浏览器。。。。

    JS最简单的滚动新闻,兼容IE6及其他主流浏览器

    总的来说,这个JS滚动新闻的实现展示了如何使用JavaScript和HTML5来创建一个跨浏览器的动态效果,同时考虑了向后兼容性,特别是对于老版本的IE6。对于初学者和有经验的开发者来说,都是一个很好的学习案例,可以帮助...

Global site tag (gtag.js) - Google Analytics