源码网商城,靠谱的源码在线交易网站 我的订单 购物车 帮助

源码网商城

兼容多浏览器的字幕特效Marquee的通用js类

  • 时间:2020-03-17 08:54 编辑: 来源: 阅读:
  • 扫一扫,手机访问
摘要:兼容多浏览器的字幕特效Marquee的通用js类
Marquee.js 参数说明:   demo  字幕区域标签(div)的ID;  demo1/demo2  显示内容标签(div或td)的ID   demo1为原始内容,demo2是它的拷贝;   direction 字幕方向(up,down,left,right) ;  delay 字幕播放的延迟时间(毫秒);  step 字幕播放的步长(即pix,步长越小,如step=1,滚动越平滑) function Marquee (demo, demo1, demo2, direction, delay, step) {  direction = direction.toLowerCase();  if(((direction == "up" || direction == "down") && ($(demo1).offsetHeight > $(demo).offsetHeight)) || ((direction == "left" || direction == "right") && ($(demo1).offsetWidth > $(demo).offsetWidth)))  {   $(demo2).innerHTML = $(demo1).innerHTML;   if(direction == "down")    $(demo).scrollTop = 2 * $(demo1).offsetHeight - $(demo).offsetHeight;   if(direction == "right")    $(demo).scrollLeft = 2 * $(demo1).offsetWidth - $(demo).offsetWidth;  }  else   return;  var flag = true;  var speed = delay == null? 1 : parseInt(delay);  var amount = step == null? 1 : parseInt(step);  var Marquee = function ()  {   switch(direction)   {    case "up":     if($(demo2).offsetTop - $(demo).scrollTop <= 0)      $(demo).scrollTop -= $(demo1).offsetHeight;     else      $(demo).scrollTop += amount;     break;    case "down":     if($(demo1).offsetTop - $(demo).scrollTop >= 0)      $(demo).scrollTop += $(demo2).offsetHeight;     else      $(demo).scrollTop -= amount;     break;    case "left":     if($(demo2).offsetWidth - $(demo).scrollLeft <= 0)      $(demo).scrollLeft -= $(demo1).offsetWidth;     else      $(demo).scrollLeft += amount;     break;    case "right":     if($(demo).scrollLeft <= 0)      $(demo).scrollLeft += $(demo2).offsetWidth;     else      $(demo).scrollLeft -= amount;     break;    default:break;   }  }  var timer = setInterval(Marquee,speed);  var play = function ()  {   if(flag)   {    clearInterval(timer);    timer = setInterval(Marquee, speed);   }  }  $(demo).onmouseover = function ()  {   if(flag)    clearInterval(timer);  }  $(demo).onmouseout = function ()  {   if(flag)    timer = setInterval(Marquee, speed);  }  this.delay = function (s)  {   speed = s == null? 50 : parseInt(s);   play();  }  this.step = function (s)  {   amount = s == null? 1 : parseInt(s);   play();  }  this.start = function ()  {   if(!flag)   {    flag = true;    play();   }  }  this.stop = function ()  {   if(flag)   {    flag = false;    clearInterval(timer);   }  }  this.direction = function (s)  {   s = s.toLowerCase();   if( s == direction )    return;   if(s == "down" && direction == "up" )    direction = s;   if(s == "up" && direction == "down")    direction = s;   if(s == "right" && direction == "left")    direction = s;   if(s == "left" && direction == "right")    direction = s;   if (s == direction)    play();  } }  上面js里用到的$或$F,如果你用过prototype.js的话,把它添加进去就行了; 否则你需要先引用下面的js文件: Ruby.js  (从prototype.js里截过来的 呵呵) function Ruby () { } if (!Array.prototype.push) {    Array.prototype.push = function() {        var startLength = this.length;        for (var i = 0; i < arguments.length; i++)        this[startLength + i] = arguments[i];       return this.length;    }  } $ = function () {   var elements = new Array();    for (var i = 0; i < arguments.length; i++) {      var element = arguments[i];      if (typeof element == ''string'')        element = document.getElementById(element);      if (arguments.length == 1)        return element;      elements.push(element);    }    return elements; } $F = function () {  if(arguments.length == 1)   return document.getElementById(arguments[0]).value;  else  {   var elements = new Array();   for(var i = 0;i< arguments.length; i++)   {    elements.push(document.getElementById(arguments[i]).value);   }   return elements;  } }  到这里,js文件已经搞定了,开始写HTML代码: (1)先添加css样式,如果你不想滚动字幕里的内容被无故撑大的话(有时候) <style> .wrap{word-break:break-all;overflow:hidden} </style> (2)添加js文件  -->用了prototype.js的更好,替换掉Ruby.js   :) <script src="Ruby.js"></script> <script src="Marquee.js"></script> (3)添加字幕区域内容 1. 向上或向下滚动     <div id="d1" style="overflow:hidden;height:200px;width:90px">    <div id="d11" width="100%" class="wrap">     =顶部=<br>动感地带资费攻略1 动感地带资费攻略2<br>=底部=    </div>    <div id="d12" width="100%" class="wrap"></div>   </div>   <script>var obj1 = new Marquee("d1","d11","d12","up");</script> 由于字幕d1的height=200,而d11的内容高度不足200,故字幕默认不会滚动,要实现滚动的话,只需d11的height>200就行了,故只需在d11的里面再放个空div就行了,让它的height=200; 如果d11的内容高度大于了200px,则字幕区域d1将无间断滚动 2. 向左或向右滚动 <div id="d2" style="overflow:hidden;width:500">   <table>    <tr>     <td id="d21">      <nobr>       [开始]动感地带资费攻略1 动感地带资费攻略2 动感地带资费攻略3 动感地带资费攻略4 动感地带资费攻略5 动感地带资费攻略6 动感地带资费攻略7 动感地带资费攻略8 动感地带资费攻略9 动感地带资费攻略10 动感地带资费攻略11 动感地带资费攻略12 动感地带资费攻略13 动感地带资费攻略14 动感地带资费攻略15 动感地带资费攻略16 动感地带资费攻略17 动感地带资费攻略18 动感地带资费攻略19 动感地带资费攻略20[结束]       </nobr>     </td>     <td id="d22"></td>    </tr>   </table>  </div>  <script>var obj2 = new Marquee("d2","d21","d22","left");</script> 实现原理同上,至于为什么这里要用table而不用div,是因为div在默认情况只能判断height,而不能判断width,而table却恰恰相反,上面用到的nobr标签也是必需的,防止字幕自动换行! 附:  更改延迟播放速度 obj2.delay(50); 或 obj2.delay("50");   更改播放步长  obj2.step(50); 或 obj2.step("50");   停止播放 obj2.stop();  继续播放 obj2.start();   更改播放方向(同类型方向)  obj2.direction("right");
  • 全部评论(0)
联系客服
客服电话:
400-000-3129
微信版

扫一扫进微信版
返回顶部