一聚教程网:一个值得你收藏的教程网站

最新下载

热门教程

基于Marquee.js插件实现的跑马灯效果示例

时间:2017-03-07 编辑:简简单单 来源:一聚教程网

本文实例讲述了基于Marquee.js插件实现的跑马灯效果。分享给大家供大家参考,具体如下:

1、Marquee.js文件

 代码如下复制代码

/****************************************************************

- Marquee.js

- 参数:

- ID:滚动对象(必须)

- Direction:滚动方向("top": 0, "up": 0, "bottom": 1, "down": 1, "left": 2, "right": 3)

- Step:步伐

- Width:宽度

- Height:高度

- Timer:影响步伐滚动速度

- DelayTime:延时时间

- WaitTime:初始化时的等待时间

- ScrollStep:卷页步伐

*****************************************************************/

functionMarquee(obt) {

  if(obt ==null|| obt =="") {

    return;

  }

  this.ID = document.getElementById(obt.ID);

  if(!this.ID) {

    alert("初始化错误\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(typeofobt.Direction =="number"&& obt.Direction)this.Direction = obt.Direction;

  if(typeofobt.Direction =="string"&& obt.Direction)this.Direction =this.DirectionArray[obt.Direction.toString().toLowerCase()];

  if(typeofobt.Step =="number"&& obt.Step)this.Step = obt.Step;

  if(typeofobt.Width =="number"&& obt.Width)this.Width = obt.Width;

  if(typeofobt.Height =="number"&& obt.Height)this.Height = obt.Height;

  if(typeofobt.Timer =="number"&& obt.Timer)this.Timer = obt.Timer;

  if(typeofobt.DelayTime =="number"&& obt.DelayTime)this.DelayTime = obt.DelayTime;

  if(typeofobt.WaitTime =="number"&& obt.WaitTime)this.WaitTime = obt.WaitTime;

  if(typeofobt.ScrollStep =="number"&& obt.ScrollStep)this.ScrollStep = obt.ScrollStep;

  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);

  this.Start();

}

Marquee.prototype.Start =function() {

  if(this.ID == -1)return;

  if(this.Width == 0)this.Width = parseInt(this.ID.style.width);

  if(this.Height == 0)this.Height = parseInt(this.ID.style.height);

  if(this.Timer < 20)this.Timer = 20;

  if(this.WaitTime < 800)this.WaitTime = 800;

  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(typeofthis.ScrollStep !="number")this.ScrollStep =this.Direction > 1 ?this.Width :this.Height;

  vartemplateLeft ="

MSCLASS_TEMP_HTMLMSCLASS_TEMP_HTML

";

  vartemplateTop ="

MSCLASS_TEMP_HTML
MSCLASS_TEMP_HTML

";

  varmsobj =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);

    }

  }

  vartimer =this.Timer;

  vardelaytime =this.DelayTime;

  varwaittime =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. 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) {

        varevent = 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) {

    case0:

      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;

    case1:

      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;

    case2:

      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;

    case3:

      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;

  }

}

2、脚本调用

 代码如下复制代码

window.onload =function() {

  newMarquee({ ID:"scrollNews", Direction:"top", Step: 2, Width: 0, Height: 80, Timer: 50, DelayTime: 1000, WaitTime: 1000, ScrollStep: 80 });

}

热门栏目