單行新聞公告間歇垂直無縫滾動
單行垂直新聞公告效果應用非常廣泛,本站也有使用。
效果特點:
(1).單行新聞垂直滾動。
(2).滾動具有間歇暫停效果。
(3).滑鼠懸浮暫停滾動,滑鼠離開繼續滾動。
程式碼例項如下:
[HTML] 純文字檢視 複製程式碼執行程式碼<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <meta name="author" content="http://www.softwhy.com/" /> <title>螞蟻部落</title> <style type="text/css"> * { margin:0px; } ul li { height:20px; } .gonggao { height:20px; overflow:hidden } </style> <script type="text/javascript"> let ann = () => { let stopscroll = false; let gonggaoBox = document.getElementsByClassName("gonggao")[0]; let ulBox = gonggaoBox.getElementsByTagName("ul")[0]; let ulBoxH = ulBox.offsetHeight; gonggaoBox.onmouseover = () => { stopscroll = true } gonggaoBox.onmouseout = () => { stopscroll = false } let currentTop = 0; let stoptime = 0; ulBox.innerHTML = ulBox.innerHTML + ulBox.innerHTML; let init_srolltext = () => { gonggaoBox.scrollTop = 0; setInterval(scrollUp, 15); } let scrollUp = () => { if (stopscroll) return; currentTop += 1; if (currentTop == 21) { stoptime += 1; currentTop -= 1; if (stoptime == 220) { currentTop = 0; stoptime = 0; } } else { gonggaoBox.scrollTop += 1; if (ulBoxH == gonggaoBox.scrollTop) { gonggaoBox.scrollTop = 0; } } } init_srolltext(); } window.onload = function () { ann(); } </script> </head> <body> <div class="gonggao"> <ul> <li> <span><a href="#">宗旨是分享免費文字教程</a></span><em>( 2018-04-11 )</em> </li> <li> <span><a href="#">網站近期改版</a></span><em>( 2018-04-05 )</em> </li> </ul> </div> </body> </html>
上面程式碼實現了預期效果,下面介紹一下它的實現過程。
一.程式碼註釋:
[CSS] 純文字檢視 複製程式碼* { margin:0px; }
將所有元素的外邊距設定為0。
[CSS] 純文字檢視 複製程式碼ul li { height:20px; } .gonggao { height:20px; overflow:hidden }
將li元素的高度設定為20px。
外層的容器gonggao高度也恰好是20px,超出的尺寸隱藏,這樣就能恰好顯示一行公告。
[JavaScript] 純文字檢視 複製程式碼let ann = () => { //code }
呼叫此箭頭函式可以實現垂直帶有暫停的滾動功能。
[JavaScript] 純文字檢視 複製程式碼let stopscroll = false; let gonggaoBox = document.getElementsByClassName("gonggao")[0]; let ulBox = gonggaoBox.getElementsByTagName("ul")[0];
宣告變數stopscroll並初始化值為false,用來標識當前效果是否處於滾動狀態,等於false表示處於滾動狀態,等於true表示處於停止滾動狀態。
然後獲取class屬性值為gonggao的第一個元素物件,也就是這裡的div物件。
最後獲取div下的ul元素物件。
[JavaScript] 純文字檢視 複製程式碼let ulBoxH = ulBox.offsetHeight;
獲取ul元素的高度。
[JavaScript] 純文字檢視 複製程式碼gonggaoBox.onmouseover = () => { stopscroll = true } gonggaoBox.onmouseout = () => { stopscroll = false }
註冊事件處理函式,當滑鼠移到div上時,將stopscroll設定為true,停止滾動。
當滑鼠離開div時,將stopscroll設定為false,繼續滾動。
[JavaScript] 純文字檢視 複製程式碼let currentTop = 0; let stoptime = 0;
宣告兩個變數,並賦初值為0,後面會有介紹。
[JavaScript] 純文字檢視 複製程式碼ulBox.innerHTML = ulBox.innerHTML + ulBox.innerHTML;
將ul中的內容複製一份追加到原來的內容上。
比如原來有兩個li元素如下:
[HTML] 純文字檢視 複製程式碼<li> <span><a href="#">宗旨是分享免費文字教程</a></span><em>( 2018-04-11 )</em> </li> <li> <span><a href="#">網站近期改版</a></span><em>( 2018-04-05 )</em> </li>
通過複製追加之後變為:
[HTML] 純文字檢視 複製程式碼<li> <span><a href="#">宗旨是分享免費文字教程</a></span><em>( 2018-04-11 )</em> </li> <li> <span><a href="#">網站近期改版</a></span><em>( 2018-04-05 )</em> </li> <li> <span><a href="#">宗旨是分享免費文字教程</a></span><em>( 2018-04-11 )</em> </li> <li> <span><a href="#">網站近期改版</a></span><em>( 2018-04-05 )</em> </li>
於是,向上滾動的時候,就會有頭尾相接無縫的視覺效果,否則向上滾動,底部就會出現空缺。
[PHP] 純文字檢視 複製程式碼let init_srolltext = () => { gonggaoBox.scrollTop = 0; setInterval(scrollUp, 15); }
呼叫次函式開始進行滾動效果。
首先將div向上滾動的尺寸初始化為0,然後通過定時器函式每隔15毫秒呼叫一次scrollUp函式。
[JavaScript] 純文字檢視 複製程式碼let scrollUp = () => { //code }
此函式是效果的核心,下面會具體介紹。
[JavaScript] 純文字檢視 複製程式碼if (stopscroll) return;
如果stopscroll值為真,那麼直接跳出函式,也就是不滾動。
函式每執行一次,值加1,表示向上滾動了1px。
[JavaScript] 純文字檢視 複製程式碼currentTop += 1; if (currentTop == 21) { stoptime += 1; currentTop -= 1; if (stoptime == 220) { currentTop = 0; stoptime = 0; } }
首先currentTop加1,然後判斷此值是否等於21。
如果等於21,則說明已經完成一個完整的li元素上滾(li的高度是20px),然後進入暫停狀態。
stoptime變數作為一個計量,值在0-220之間,滾動都處於暫停狀態。
currentTop值減1,為了保持currentTop值在暫停期間是不變的。
最後判斷currentTop是否等於220(暫停狀態已經達到臨界時間)。
如果等於,currentTop和stoptime重置為0。
[JavaScript] 純文字檢視 複製程式碼else { gonggaoBox.scrollTop += 1; if (ulBoxH == gonggaoBox.scrollTop) { gonggaoBox.scrollTop = 0; } }
如果currentTop不等於21,也就是currentTop在執行currentTop += 1前小於20,一次完整的li滾動並未完成。
那麼繼續繼續向上滾動(gonggaoBox.scrollTop += 1)。
如果ulBoxH 等於 gonggaoBox.scrollTop,說明所有新聞公告完成一次滾動,這時候拷貝追加的第一個li處於當前位置;於是將gonggaoBox.scrollTop重置為0,這樣在視覺上實現無縫的滾動效果。
二.相關閱讀:
(1).getElementsByClassName()參閱JavaScript getElementsByClassName()一章節。
(2).getElementsByTagName()參閱JavaScript getElementsByTagName()一章節。
(3).offsetHeight參閱JavaScript offsetHeight一章節。
(4).onmouseover事件參閱JavaScript mouseover 事件一章節。
(5).onmouseout事件參閱JavaScript mouseout 事件一章節。
(6).innerHTML參閱JavaScript innerHTML 屬性一章節。
(7).scrollTop參閱JavaScript scrollTop一章節。
(8).setInterval()參閱JavaScript setInterval()一章節。
(9).箭頭函式參閱JavaScript 箭頭函式介紹一章節。
相關文章
- jQuery 圖片列表垂直間歇無縫滾動jQuery
- 新聞單條無縫間歇向上滾動(第一次分享)
- jQuery 間歇的無縫滾動jQuery
- jQuery新聞列表垂直滾動詳解jQuery
- js無縫滾動JS
- jQuery單行新聞標題向上滾動詳解jQuery
- JavaScript無縫滾動 記錄JavaScript
- js-字幕無縫滾動JS
- CSS水平無縫滾動效果CSS
- 向上無縫滾動--原理及思想
- JavaScript水平無縫滾動程式碼JavaScript
- jQuery圖片無縫滾動效果jQuery
- react無縫滾動輪播圖React
- CSS實現迴圈無縫滾動CSS
- JQuery實現圖片輪播無縫滾動jQuery
- JavaScript圖片橫向無縫滾動詳解JavaScript
- 直播系統原始碼,vue實現無縫滾動原始碼Vue
- vue無縫滾動的外掛開發填坑分享Vue
- js、jQuery實現文字上下無縫輪播、滾動效果JSjQuery
- H5移動端獲獎無縫滾動動畫實現H5動畫
- HTMl 中marquee標籤實現無縫滾動跑馬燈效果HTML
- 邏輯難理解版本的輪播圖(實現無縫滾動)
- 怎樣用原生js配合css的transition寫個無縫滾動JSCSS
- 如何開發一款 60fps 的“無縫滾動”外掛
- 如何讓VB6程式碼編輯器垂直滾動條隨滑鼠滾輪滾動
- Flutter 新聞詳情頁二——WebView和列表豎直滾動FlutterWebView
- Linux基礎命令---間歇執行命令watchLinux
- Android控制之垂直滾動廣告條ViewFLipper解析AndroidView
- Android——仿淘寶頭條垂直滾動廣告Android
- Android TextSwitcher通知公告自動上下滾動且帶點選事件Android事件
- 直播app原始碼開源,Android 滾動的公告欄APP原始碼Android
- 報表中怎樣實現滾動的公告效果
- 間歇性應用慢?被投訴不再束手無策!
- 新《公告》
- 如何解決win10無線網間歇性掉線 win10電腦間歇性斷網的方法Win10
- Vue 無限滾動元件Vue元件
- 有間隙卡片縮放/無縫CollectionViewBanner無限輪播圖View
- CSS3熱身實戰–過渡與動畫(實現炫酷下拉,手風琴,無縫滾動)CSSS3動畫