使用JavaScript實(shí)現(xiàn)連續(xù)滾動字幕效果的方法
我們一般都用Marquee標(biāo)簽控制元素的滾動。但是單向的Marquee滾動是不連續(xù)的,每滾完一幕,就會出現(xiàn)一次空白。而下面介紹中的滾動則是連續(xù)的,毫不間斷。
下面為你介紹這是如何實(shí)現(xiàn)的。
為了滾動能夠“連續(xù)”,我們需要將字幕的內(nèi)容復(fù)制多遍,直到內(nèi)容的高度不小于滾動區(qū)高度的兩倍。然后我們將溢出的滾動條隱藏掉,用代碼控制滾動條向下移動(這時(shí)內(nèi)容將向上移動)。當(dāng)滾動條滾動到最下方時(shí),理論上不能再往下滾動了,于是我們立刻調(diào)整滾動條,將它向上滾動到一個(gè)和當(dāng)前畫面一樣的位置。結(jié)果我們看到的就是連續(xù)的滾動了。呵呵,說的就是這么簡單,那做起來如何呢?我們看看是如何逐步實(shí)現(xiàn)的。
<div id="marquees"> <!-- 這些是字幕的內(nèi)容,你可以任意定義 --> <a href="#">鏈接一</a> <br> <a href="#">鏈接二</a> <br> <a href="#">鏈接三</a> <br> <a href="#">鏈接四</a> <br> <!-- 字幕內(nèi)容結(jié)束 --> </div> <!-- 以下是java-script代碼 --> <script language="java-script"> <!-- marqueesHeight=200; //內(nèi)容區(qū)高度 stopscroll=false; //這個(gè)變量控制是否停止?jié)L動 with(marquees){ noWrap=true; //這句表內(nèi)容區(qū)不自動換行 style.width=0; //于是我們可以將它的寬度設(shè)為0,因?yàn)樗鼤粨未? style.height=marqueesHeight; style.overflowY="hidden"; //滾動條不可見 onmouseover=new Function("stopscroll=true"); //鼠標(biāo)經(jīng)過,停止?jié)L動 onmouseout=new Function("stopscroll=false"); //鼠標(biāo)離開,開始滾動 } //這時(shí)候,內(nèi)容區(qū)的高度是無法讀取了。下面輸出一個(gè)不可見的層"templayer",稍后將內(nèi)容復(fù)制到里面: document.write('<div id="templayer" style="position:absolute;z-index:1;visibility:hidden"></div>'); function init(){ //初始化滾動內(nèi)容 //多次復(fù)制原內(nèi)容到"templayer",直到"templayer"的高度大于內(nèi)容區(qū)高度: while(templayer.offsetHeight<marqueesHeight){ templayer.innerHTML+=marquees.innerHTML; } //把"templayer"的內(nèi)容的“兩倍”復(fù)制回原內(nèi)容區(qū): marquees.innerHTML=templayer.innerHTML+templayer.innerHTML; //設(shè)置連續(xù)超時(shí),調(diào)用"scrollUp()"函數(shù)驅(qū)動滾動條: setInterval("scrollUp()",10); } document.body.onload=init; preTop=0; //這個(gè)變量用于判斷滾動條是否已經(jīng)到了盡頭 function scrollUp(){ //滾動條的驅(qū)動函數(shù) if(stopscroll==true) return; //如果變量"stopscroll"為真,則停止?jié)L動 preTop=marquees.scrollTop; //記錄滾動前的滾動條位置 marquees.scrollTop+=1; //滾動條向下移動一個(gè)像素 //如果滾動條不動了,則向上滾動到和當(dāng)前畫面一樣的位置 //當(dāng)然不僅如此,同樣還要向下滾動一個(gè)像素(+1): if(preTop==marquees.scrollTop){ marquees.scrollTop=templayer.offsetHeight-marqueesHeight+1; } } --> </script>
這樣就完成了,感覺做起來也不難吧。
相關(guān)文章
javascript 實(shí)現(xiàn)父窗口引用彈出窗口的值的腳本
javascript 實(shí)現(xiàn)父窗口引用彈出窗口的值的腳本...2007-08-08layui自己添加圖片按鈕并點(diǎn)擊跳轉(zhuǎn)頁面的例子
今天小編就為大家分享一篇layui自己添加圖片按鈕并點(diǎn)擊跳轉(zhuǎn)頁面的例子,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧2019-09-09js實(shí)現(xiàn)帶緩動動畫的導(dǎo)航欄效果
本篇文章主要分享了js實(shí)現(xiàn)帶緩動動畫的導(dǎo)航欄效果的示例代碼。具有一定的參考價(jià)值,下面跟著小編一起來看下吧2017-01-01在javaScript中檢測數(shù)據(jù)類型的幾種方式小結(jié)
在用javaScript編程的過程中,我們經(jīng)常會遇到這樣一個(gè)問題,就是需要檢測一個(gè)數(shù)據(jù)或變量的類型,本篇文章主要介紹了在javaScript中檢測數(shù)據(jù)類型的幾種方式小結(jié),有興趣的可以了解一下。2017-03-03js網(wǎng)頁中的(運(yùn)行代碼)功能實(shí)現(xiàn)思路
網(wǎng)頁中的"運(yùn)行代碼"是一個(gè)很方便的功能,可以直接看到代碼的效果,感興趣的朋友不妨參考下,或許對你學(xué)習(xí)js有所幫助,好了花不多說切入正題2013-02-02使用bootstrap validator的remote驗(yàn)證代碼經(jīng)驗(yàn)分享(推薦)
這篇文章主要介紹了使用bootstrap validator的remote驗(yàn)證器驗(yàn)證經(jīng)驗(yàn)分享(推薦)的相關(guān)資料,本文介紹的非常詳細(xì),具有參考借鑒價(jià)值,需要的朋友可以參考下2016-09-09