javascript 向上滚动公告、水平滚动公告(翻页效果)

来源:互联网 发布:mysql教程linux 编辑:程序博客网 时间:2024/05/29 08:16

 

2010-08-01

最近做项目时,公司要在Ext的ToolBar中添加个滚动公告栏,不但要向上滚动,而且可以向左滚动。滚动方向可以由用户选择。 

以下是在Ext平台下运行的,UICtrl.StatusBarNoNotice 返回个TextItem。可以直接添加到Toolbar的Items中,进行测试。 

Javascript代码 
  1. UICtrl.StatusBarNoNotice = function() {  
  2.   
  3.     var noticeArray = [];  
  4.     // [id,title]  
  5.     noticeArray.push(["100", "部门周例会会议通知1"]);  
  6.     noticeArray.push(["200", "部门周例会会议通知2"]);  
  7.     noticeArray.push(["300", "部门周例会会议通知3"]);  
  8.     noticeArray.push(["400", "部门周例会会议通知4"]);  
  9.     noticeArray.push(["500", "部门周例会会议通知5"]);  
  10.   
  11.     var total = noticeArray.length;// 公告数量  
  12.   
  13.     // 公告栏  
  14.     var noticeTxt = new Ext.Toolbar.TextItem({  
  15.                 id : 'noticeTxt',  
  16.                 text : noticeArray[0][1]  
  17.             });  
  18.   
  19.     if (noticeArray.length == 0)  
  20.         noticeArray.push(["-1", "今天没有公告"]);  
  21.   
  22.     /*************************************************************************** 
  23.      * 公告栏 start 
  24.      */  
  25.     var marqueeInterval = new Array();  
  26.     var marqueeId = 0;  
  27.     var marqueeDelay = 3000;// 停顿时间 (ms)  
  28.     var marqueeHeight = 16; // 公告栏高度  
  29.     var marqueeWidth = 300;// 公告栏宽度  
  30.     var dir = Sys.agentInfo.noticeScrollDir;// 滚动方向up/left up为向上滚动,left为向左滚动  
  31.     var separator = "    ●    ";  
  32.   
  33.     if (dir == "left")  
  34.         leafscroll();  
  35.     else  
  36.         upscroll();  
  37.   
  38.     /** 
  39.      * 向左滚动 
  40.      */  
  41.     function leafscroll() {  
  42.         var str = "";  
  43.         if (noticeArray[0][0] == "-1")  
  44.             return;  
  45.         for (var i = 0; i < noticeArray.length; i++) {  
  46.             str += separator;  
  47.             var item = '<a onclick="new UICtrl.ShowNoNotice('  
  48.                     + String(noticeArray[i][0]) + ')" style="cursor:pointer;">'  
  49.                     + noticeArray[i][1] + '</a>';  
  50.             str += item;  
  51.         }  
  52.   
  53.         noticeDiv = '<div id="marqueeBox" style="overflow:hidden;height:'  
  54.                 + marqueeHeight  
  55.                 + 'px;width:'  
  56.                 + marqueeWidth  
  57.                 + 'px;"><div style="float:left;width: 800%;"><div id="notice1" style="float:left;">'  
  58.                 + str + '</div><div id="notice2" style="float:left;">' + str  
  59.                 + '</div></div></div>';  
  60.         if (document.getElementById("noticeTxt")) {  
  61.             var noticeText = document.getElementById("noticeTxt");  
  62.             noticeText.innerHTML = noticeDiv;  
  63.         } else  
  64.             noticeTxt.text = noticeDiv;  
  65.   
  66.         var mytask = new Ext.TaskMgr.start({  
  67.                     run : function() {  
  68.                         var noticeText = document.getElementById("noticeTxt");  
  69.                         // noticeText.innerHTML = noticeDiv;  
  70.   
  71.                         var dir1 = Sys.agentInfo.noticeScrollDir;  
  72.                         if (dir1 == "up") {  
  73.                             noticeText.innerHTML = "";  
  74.                             Ext.TaskMgr.stop(mytask);  
  75.                             upscroll();  
  76.                             return;  
  77.                         }  
  78.                         var marqueeBox = document.getElementById("marqueeBox");  
  79.                         var notice1 = document.getElementById("notice1");  
  80.                         var notice2 = document.getElementById("notice2");  
  81.   
  82.                         if (notice2.offsetWidth - marqueeBox.scrollLeft <= 0)  
  83.                             marqueeBox.scrollLeft -= notice1.offsetWidth  
  84.                         else {  
  85.                             marqueeBox.scrollLeft++;  
  86.                         }  
  87.                         marqueeBox.onmouseover = function() {  
  88.                             Ext.TaskMgr.stop(mytask);  
  89.                         };  
  90.                         marqueeBox.onmouseout = function() {  
  91.                             Ext.TaskMgr.start(mytask);  
  92.                         };  
  93.                     },  
  94.                     interval : 10  
  95.                 });  
  96.     }  
  97.   
  98.     /** 
  99.      * 向上滚动 
  100.      */  
  101.     function upscroll() {  
  102.         var str = "<a onclick='javascript:new UICtrl.ShowNoNotice("  
  103.                 + noticeArray[0][0] + ");' style='cursor:pointer;'>"  
  104.                 + noticeArray[0][1] + "</a>";  
  105.         if (noticeArray[0][0] == "-1")  
  106.             str = noticeArray[0][1];  
  107.         else  
  108.             marqueeId++;  
  109.   
  110.         noticeDiv = '<div id="marqueeBox" style="overflow:hidden;height:'  
  111.                 + marqueeHeight + 'px;width:' + marqueeWidth + 'px;"><div>'  
  112.                 + str + '</div></div>';  
  113.   
  114.         if (document.getElementById("noticeTxt")) {  
  115.             var noticeText = document.getElementById("noticeTxt");  
  116.             noticeText.innerHTML = noticeDiv;  
  117.         } else  
  118.             noticeTxt.text = noticeDiv;  
  119.   
  120.         marqueeInterval[0] = new Ext.TaskMgr.start({  
  121.             run : function() {  
  122.                 var dir1 = Sys.agentInfo.noticeScrollDir;  
  123.   
  124.                 var noticeText = document.getElementById("noticeTxt");  
  125.   
  126.                 if (dir1 == "left") {  
  127.                     noticeText.innerHTML = "";  
  128.                     Ext.TaskMgr.stop(marqueeInterval[0]);  
  129.                     Ext.TaskMgr.stop(marqueeInterval[1]);  
  130.                     leafscroll();  
  131.                     return;  
  132.                 }  
  133.                 var marqueeBox = document.getElementById("marqueeBox");  
  134.   
  135.                 if (noticeArray[marqueeId])  
  136.                     var str = "<a onclick='javascript:new UICtrl.ShowNoNotice("  
  137.                             + noticeArray[marqueeId][0]  
  138.                             + ");' style='cursor:pointer;'>"  
  139.                             + noticeArray[marqueeId][1] + "</a>";  
  140.   
  141.                 if (noticeArray[0][0] == "-1")  
  142.                     str = noticeArray[0][1];  
  143.   
  144.                 marqueeId++;  
  145.                 if (marqueeId >= noticeArray.length)  
  146.                     marqueeId = 0;  
  147.   
  148.                 if (marqueeBox.childNodes.length == 1) {  
  149.                     var nextLine = document.createElement('DIV');  
  150.                     nextLine.innerHTML = str;  
  151.                     nextLine.style.width = marqueeWidth;  
  152.                     marqueeBox.appendChild(nextLine);  
  153.                 } else {  
  154.                     marqueeBox.childNodes[0].innerHTML = str;  
  155.                     marqueeBox.appendChild(marqueeBox.childNodes[0]);  
  156.                     marqueeBox.scrollTop = 0;  
  157.                 }  
  158.                 marqueeBox.onmouseover = function() {  
  159.                     Ext.TaskMgr.stop(marqueeInterval[0])  
  160.                 }  
  161.                 marqueeBox.onmouseout = function() {  
  162.                     Ext.TaskMgr.start(marqueeInterval[0]);  
  163.                 }  
  164.                 // /marqueeBox.onclick = function() {  
  165.                 // /new UICtrl.ShowNoNotice();  
  166.                 // /}  
  167.                 if (marqueeInterval[1])  
  168.                     Ext.TaskMgr.stop(marqueeInterval[1]);  
  169.                 marqueeInterval[1] = new Ext.TaskMgr.start({  
  170.                     run : function() {  
  171.                         var marqueeBox = document.getElementById("marqueeBox");  
  172.                         marqueeBox.scrollTop++;  
  173.                         if (marqueeBox.scrollTop % marqueeHeight == (marqueeHeight - 1)) {  
  174.                             Ext.TaskMgr.stop(marqueeInterval[1]);  
  175.                         }  
  176.                     },  
  177.                     interval : 20  
  178.                 });  
  179.             },  
  180.             interval : 3000  
  181.         });  
  182.     }  
  183.     return [noticeTxt];  
  184. }  



今天下班没有什么干,于是将上面的Ext的滚动公告功能做了一些修改。做成一个纯JS的版本。 
以下是js的版本代码: 

Html代码 
  1. <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">  
  2. <html>  
  3. <head>  
  4. <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">  
  5. <title>滚动公告(横向/纵向)</title>  
  6.   
  7. </head>  
  8. <body style="margin: 5px;">  
  9. <div>  
  10.     <button onclick="left()">横向滚动</button>  
  11.     <button onclick="up()">纵向滚动</button>  
  12. </div>  
  13. <div id="noticeBar">notice</div>  
  14. <hr>  
  15. <script type="text/javascript" language="javascript">  
  16. var noticeArray = [];  
  17. //[id,title]  
  18. noticeArray.push( [ "100", "部门周例会会议通知1" ]);  
  19. noticeArray.push( [ "200", "部门周例会会议通知2" ]);  
  20. noticeArray.push( [ "300", "部门周例会会议通知3" ]);  
  21. noticeArray.push( [ "400", "部门周例会会议通知4" ]);  
  22. noticeArray.push( [ "500", "部门周例会会议通知5" ]);  
  23.   
  24. var total = noticeArray.length;// 公告数量  
  25.   
  26. if (noticeArray.length == 0)  
  27.     noticeArray.push( [ "-1", "今天没有公告" ]);  
  28.   
  29. /*******************************************************************************  
  30. * 公告栏 start  
  31. */  
  32. var marqueeInterval = new Array();  
  33. var marqueeId = 0;  
  34. var marqueeDelay = 3000;// 停顿时间 (ms)  
  35. var marqueeHeight = 16; // 公告栏高度  
  36. var marqueeWidth = 300;// 公告栏宽度  
  37. var dir = 'left';// 滚动方向up/left up为向上滚动,left为向左滚动  
  38. var separator = "&nbsp;&nbsp;&nbsp;&nbsp;<font color='#999999'>●</font>&nbsp;&nbsp;&nbsp;&nbsp;";  
  39.   
  40. if (dir == "left")  
  41.     leafscroll();  
  42. else  
  43.     upscroll();  
  44.   
  45. /**  
  46. * 向左滚动  
  47. */  
  48. function leafscroll() {  
  49.     var str = "";  
  50.     if (noticeArray[0][0] == "-1")  
  51.         return;  
  52.     for ( var i = 0; i < noticeArray.length; i++) {  
  53.         str += separator;  
  54.         var item = '<a onclick="alert(' + String(noticeArray[i][0])  
  55.                 + ')" style="cursor:pointer;">' + noticeArray[i][1] + '</a>';  
  56.         str += item;  
  57.     }  
  58.   
  59.     noticeDiv = '<div id="marqueeBox" style="overflow:hidden;height:'  
  60.             + marqueeHeight  
  61.             + 'px;width:'  
  62.             + marqueeWidth  
  63.             + 'px;margin:5px;border:2px solid #1d953f;font-size:12px;color:red;"><div style="float:left;width: 800%;"><div id="notice1" style="float:left;">'  
  64.             + str + '</div><div id="notice2" style="float:left;">' + str  
  65.             + '</div></div></div>';  
  66.   
  67.     var noticeBar = document.getElementById("noticeBar");  
  68.     noticeBar.innerHTML = noticeDiv  
  69.   
  70.     marqueeInterval[3] = window.setInterval(LeftStartFn, 10);  
  71.   
  72.     function LeftStartFn() {  
  73.         if (dir == "up") {  
  74.             noticeBar.innerHTML = "";  
  75.             window.clearInterval(marqueeInterval[3]);  
  76.             upscroll();  
  77.             return;  
  78.         }  
  79.         var marqueeBox = document.getElementById("marqueeBox");  
  80.         var notice1 = document.getElementById("notice1");  
  81.         var notice2 = document.getElementById("notice2");  
  82.   
  83.         if (notice2.offsetWidth - marqueeBox.scrollLeft <= 0)  
  84.             marqueeBox.scrollLeft -= notice1.offsetWidth  
  85.         else {  
  86.             marqueeBox.scrollLeft++;  
  87.         }  
  88.         marqueeBox.onmouseover = function() {  
  89.             window.clearInterval(marqueeInterval[3])  
  90.         };  
  91.         marqueeBox.onmouseout = function() {  
  92.             marqueeInterval[3] = window.setInterval(LeftStartFn, 10)  
  93.         };  
  94.     }  
  95. }  
  96.   
  97. function upscroll() {  
  98.     var str = "<a onclick='javascript:new UICtrl.ShowNoNotice("  
  99.             + noticeArray[0][0] + ");' style='cursor:pointer;'>"  
  100.             + noticeArray[0][1] + "</a>";  
  101.     if (noticeArray[0][0] == "-1")  
  102.         str = noticeArray[0][1];  
  103.     else  
  104.         marqueeId++;  
  105.   
  106.     noticeDiv = '<div id="marqueeBox" style="overflow:hidden;height:'  
  107.             + marqueeHeight  
  108.             + 'px;width:'  
  109.             + marqueeWidth  
  110.             + 'px;margin:5px;border:2px solid #1d953f;font-size:12px;color:red;"><div>'  
  111.             + str + '</div></div>';  
  112.   
  113.     var noticeBar = document.getElementById("noticeBar");  
  114.     noticeBar.innerHTML = noticeDiv  
  115.   
  116.     marqueeInterval[0] = window.setInterval(upStartFn, 3000);  
  117.   
  118.     function upStartFn() {  
  119.   
  120.         if (dir == "left") {  
  121.             noticeBar.innerHTML = "";  
  122.             window.clearInterval(marqueeInterval[0]);  
  123.             window.clearInterval(marqueeInterval[1]);  
  124.             leafscroll();  
  125.             return;  
  126.         }  
  127.         var marqueeBox = document.getElementById("marqueeBox");  
  128.   
  129.         if (noticeArray[marqueeId])  
  130.             var str = "<a onclick='javascript:alert("  
  131.                     + noticeArray[marqueeId][0]  
  132.                     + ");' style='cursor:pointer;'>"  
  133.                     + noticeArray[marqueeId][1] + "</a>";  
  134.   
  135.         if (noticeArray[0][0] == "-1")  
  136.             str = noticeArray[0][1];  
  137.   
  138.         marqueeId++;  
  139.         if (marqueeId >= noticeArray.length)  
  140.             marqueeId = 0;  
  141.   
  142.         if (marqueeBox.childNodes.length == 1) {  
  143.             var nextLine = document.createElement('DIV');  
  144.             nextLine.innerHTML = str;  
  145.             nextLine.style.width = marqueeWidth;  
  146.             marqueeBox.appendChild(nextLine);  
  147.         } else {  
  148.             marqueeBox.childNodes[0].innerHTML = str;  
  149.             marqueeBox.appendChild(marqueeBox.childNodes[0]);  
  150.             marqueeBox.scrollTop = 0;  
  151.         }  
  152.         marqueeBox.onmouseover = function() {  
  153.             window.clearInterval(marqueeInterval[0])  
  154.         }  
  155.         marqueeBox.onmouseout = function() {  
  156.             marqueeInterval[0] = window.setInterval(upStartFn, 3000);  
  157.         }  
  158.   
  159.         if (marqueeInterval[1])  
  160.             window.clearInterval(marqueeInterval[1]);  
  161.         marqueeInterval[1] = window.setInterval(scrollFn, 10);  
  162.     }  
  163.   
  164.     function scrollFn() {  
  165.         var marqueeBox = document.getElementById("marqueeBox");  
  166.         marqueeBox.scrollTop++;  
  167.         if (marqueeBox.scrollTop % marqueeHeight == (marqueeHeight - 1)) {  
  168.             window.clearInterval(marqueeInterval[1]);  
  169.         }  
  170.     }  
  171. }  
  172. function left() {  
  173.     dir = 'left';  
  174. }  
  175.   
  176. function up() {  
  177.     dir = 'up';  
  178. }  
  179. </script>  
  180. </body>  
  181. </html>  

 

     

    原创粉丝点击