home *** CD-ROM | disk | FTP | other *** search
/ PC World 2003 April / PCWorld_2003-04_cd.bin / Novinky / interval / podklady / fridrich / 257 / newsticker.js < prev   
Text File  |  2003-02-25  |  2KB  |  78 lines

  1. var newsTicker = {};
  2.  
  3. // elm, step, speed, delay, actual, timer
  4. newsTicker.ticker = [];
  5.  
  6. newsTicker.init = function(elm, step, speed, delay) {
  7.     if (elm && (elm.tagName == "UL") && document.getElementsByTagName) {
  8.         
  9.         if (isNaN(step)) {var step = 2};
  10.         if (isNaN(speed)) {var speed = 25};
  11.         if (isNaN(delay)) {var delay = 1000};
  12.         
  13.         var message = elm.getElementsByTagName("LI");
  14.         for (var i = 0; i < message.length; i++) {
  15.             message[i].style.display = "block";
  16.             message[i].style.left = 0 - message[i].offsetWidth + "px";
  17.         }
  18.         
  19.         var tickerID = newsTicker.ticker.length;
  20.         newsTicker.ticker[tickerID] = [elm, step, speed, delay, message.length-1];
  21.         
  22.         elm.newsTickerID = tickerID;
  23.         elm.onmouseover = newsTicker.stop;
  24.         elm.onmouseout = newsTicker.start;
  25.  
  26.         newsTicker.roll(tickerID);
  27.         
  28.         return true;
  29.     }
  30.     return false;
  31. }
  32.  
  33. newsTicker.roll = function(id) {
  34.     if (!isNaN(id) && newsTicker.ticker[id]) {
  35.         
  36.         var ticker = newsTicker.ticker[id];
  37.         var message = ticker[0].getElementsByTagName("li");
  38.         var actualMessage = message[ticker[4]];
  39.  
  40.         if (parseInt(actualMessage.style.left) <= 0 - actualMessage.offsetWidth) {
  41.             ticker[4] = (ticker[4]+1 == message.length) ? 0 : ticker[4] + 1;
  42.             actualMessage = message[ticker[4]];
  43.             actualMessage.style.left = ticker[0].offsetWidth + (ticker[0].offsetWidth % ticker[1]);
  44.         }
  45.         
  46.         actualMessage.style.left = parseInt(actualMessage.style.left) - ticker[1] + "px";
  47.         
  48.         ticker[5] = setTimeout("newsTicker.roll(" + id + ")", (parseInt(actualMessage.style.left) == 0) ? ticker[3] : ticker[2]);
  49.         
  50.         return true;
  51.     }
  52.     return false;
  53. }
  54.  
  55. newsTicker.stop = function(e) {
  56.     id = newsTicker.getId(e);
  57.     clearTimeout(newsTicker.ticker[id][5]);
  58.     return (id) ? true : false;
  59. }
  60.  
  61. newsTicker.start = function(e) {
  62.     id = newsTicker.getId(e);
  63.     newsTicker.roll(id);
  64.     return (id) ? true : false;
  65. }
  66.  
  67. newsTicker.getId = function(e) {
  68.     if (!e && window.event) e = window.event;
  69.     if (!e.target) e.target = e.srcElement;
  70.     var obj = (e.currentTarget) ? e.currentTarget : e.target;
  71.     while (obj.tagName != "UL") {
  72.         obj = obj.parentNode;
  73.         if (obj.tagName == "BODY") {
  74.             return false;
  75.         }
  76.     }
  77.     return obj.newsTickerID;
  78. }