淺析js 文字滾動效果
更新時間:2010年05月22日 21:59:58 作者:
文字滾動顯示,是網(wǎng)頁企業(yè)公告,文字鏈廣告常用的一種效果,說不定在什么時候你就能看到它。
這種效果在今后的web發(fā)展中是不是常用或者是否依然被設(shè)計師們所青睞,從技術(shù)層面看并不是最重要的,了解它的實現(xiàn)原理,對自身前端技術(shù)的提高,會有很大的幫助,世間萬物,萬變不離其宗,掌握了它的運行規(guī)律,你才不會被其花花外表所迷惑,甚至你可以在掌握其規(guī)律的前提下,運行相關(guān)技術(shù),創(chuàng)造出新的效果來。下面看看它的實現(xiàn)過程:
1.html
<div class="box" id="marqueebox0">
<ul>
<li style="background:#f8e2ac;">第一行</li>
<li style="background:#f5f5f5;">第二行</li>
<li style="background:#ffe6ec;">第三行</li>
</ul>
</div>
2.css
.box{
width:150px;
height:25px;
line-height:25px;
border:#bbb 1px solid;
overflow:hidden;
}
.box ul{margin:0; padding:0}
.box li{
height:25px;
line-height:25px;
font-size:12px;
text-align:center;
list-style-type:none;
}
3.js
function startmarquee(lh,speed,delay,index){
/*
函數(shù)startmarquee的參數(shù):
lh:文字一次向上滾動的距離或高度;
speed:滾動速度;
delay:滾動停頓的時間間隔;
index:可以使封裝后的函數(shù)應(yīng)用于頁面當中不同的元素;
*/
var t;
var p=false;
var o=document.getElementById("marqueebox"+index);
//獲取文檔中的滾動區(qū)域?qū)ο螅x值給變量o;
o.innerHTML+=o.innerHTML; //對象中的實際內(nèi)容被復(fù)制了一份,包含了兩個ul,當然li標簽也
由原來的3行,變?yōu)?行;復(fù)制的目的在于給文字不間斷向上滾動提供過渡。
o.onmouseover=function(){p=true}
//鼠標滑過,停止?jié)L動;
o.onmouseout=function(){p=false}
//鼠標離開,開始滾動;p是true還是false直接影響到下面start()函數(shù)的執(zhí)行;
o.scrollTop = 0;
//文字內(nèi)容頂端與滾動區(qū)域頂端的距離,初始值為0;
function start(){
t=setInterval(scrolling,speed); //每隔一段時間,setInterval便會執(zhí)行一次
scrolling函數(shù);speed越大,滾動時間間隔越大,滾動速度越慢;
if(!p){ o.scrollTop += 1;}
//滾動停止或開始,取決于p傳來的布爾值;
}
function scrolling(){
if(o.scrollTop%lh!=0){
//如果不被整除,即一次上移的高度達不到lh,則內(nèi)容會繼續(xù)往上滾動;
o.scrollTop += 1;
if(o.scrollTop>=o.scrollHeight/2) o.scrollTop = 0;
//對象o中的內(nèi)容之前被復(fù)制了一次,所以它的滾動高度,其實是原來內(nèi)容的兩倍高度;
當內(nèi)容向上滾動到scrollHeight/2的高度時,全部3行文字已經(jīng)顯示了一遍,至此整塊內(nèi)容
scrollTop歸0;再等待下一輪的滾動,從而達到文字不間斷向上滾動的效果;
}else{
clearInterval(t);
//否則清除t,暫停滾動
setTimeout(start,delay);
//經(jīng)過delay間隔后,啟動start() 再連續(xù)滾動
}
}
setTimeout(start,delay);
//第一次啟動滾動;setTimeout會在一定的時間后執(zhí)行函數(shù)start(),且只執(zhí)行一次
}
//傳遞參數(shù)
startmarquee(25,30,3000,0);
//帶停頓效果
startmarquee(25,40,0,1);
//不間斷連續(xù)
以下為全部代碼:
[Ctrl+A 全選 注:引入外部Js需再刷新一下頁面才能執(zhí)行]
1.html
復(fù)制代碼 代碼如下:
<div class="box" id="marqueebox0">
<ul>
<li style="background:#f8e2ac;">第一行</li>
<li style="background:#f5f5f5;">第二行</li>
<li style="background:#ffe6ec;">第三行</li>
</ul>
</div>
2.css
復(fù)制代碼 代碼如下:
.box{
width:150px;
height:25px;
line-height:25px;
border:#bbb 1px solid;
overflow:hidden;
}
.box ul{margin:0; padding:0}
.box li{
height:25px;
line-height:25px;
font-size:12px;
text-align:center;
list-style-type:none;
}
3.js
復(fù)制代碼 代碼如下:
function startmarquee(lh,speed,delay,index){
/*
函數(shù)startmarquee的參數(shù):
lh:文字一次向上滾動的距離或高度;
speed:滾動速度;
delay:滾動停頓的時間間隔;
index:可以使封裝后的函數(shù)應(yīng)用于頁面當中不同的元素;
*/
var t;
var p=false;
var o=document.getElementById("marqueebox"+index);
//獲取文檔中的滾動區(qū)域?qū)ο螅x值給變量o;
o.innerHTML+=o.innerHTML; //對象中的實際內(nèi)容被復(fù)制了一份,包含了兩個ul,當然li標簽也
由原來的3行,變?yōu)?行;復(fù)制的目的在于給文字不間斷向上滾動提供過渡。
o.onmouseover=function(){p=true}
//鼠標滑過,停止?jié)L動;
o.onmouseout=function(){p=false}
//鼠標離開,開始滾動;p是true還是false直接影響到下面start()函數(shù)的執(zhí)行;
o.scrollTop = 0;
//文字內(nèi)容頂端與滾動區(qū)域頂端的距離,初始值為0;
function start(){
t=setInterval(scrolling,speed); //每隔一段時間,setInterval便會執(zhí)行一次
scrolling函數(shù);speed越大,滾動時間間隔越大,滾動速度越慢;
if(!p){ o.scrollTop += 1;}
//滾動停止或開始,取決于p傳來的布爾值;
}
function scrolling(){
if(o.scrollTop%lh!=0){
//如果不被整除,即一次上移的高度達不到lh,則內(nèi)容會繼續(xù)往上滾動;
o.scrollTop += 1;
if(o.scrollTop>=o.scrollHeight/2) o.scrollTop = 0;
//對象o中的內(nèi)容之前被復(fù)制了一次,所以它的滾動高度,其實是原來內(nèi)容的兩倍高度;
當內(nèi)容向上滾動到scrollHeight/2的高度時,全部3行文字已經(jīng)顯示了一遍,至此整塊內(nèi)容
scrollTop歸0;再等待下一輪的滾動,從而達到文字不間斷向上滾動的效果;
}else{
clearInterval(t);
//否則清除t,暫停滾動
setTimeout(start,delay);
//經(jīng)過delay間隔后,啟動start() 再連續(xù)滾動
}
}
setTimeout(start,delay);
//第一次啟動滾動;setTimeout會在一定的時間后執(zhí)行函數(shù)start(),且只執(zhí)行一次
}
//傳遞參數(shù)
startmarquee(25,30,3000,0);
//帶停頓效果
startmarquee(25,40,0,1);
//不間斷連續(xù)
以下為全部代碼:
[Ctrl+A 全選 注:引入外部Js需再刷新一下頁面才能執(zhí)行]
相關(guān)文章
簡單幾行JS Code實現(xiàn)IE郵件轉(zhuǎn)發(fā)新浪微博
大概就是說我們可以用window.external.menuArguments這個對象獲取到內(nèi)部的信息,如window,document這些常用的對象2013-07-07
關(guān)于微信小程序中使用wx.getLocation獲取當前詳細位置并計算距離
這篇文章主要介紹了關(guān)于微信小程序中使用wx.getLocation獲取當前詳細位置并計算距離,wx.getLocation只能夠獲取經(jīng)緯度,不能夠拿到詳細地址,這里使用騰訊地圖的api,需要的朋友可以參考下2023-04-04
JavaScript中EventBus實現(xiàn)對象之間通信
這篇文章主要介紹了JavaScript中EventBus實現(xiàn)對象之間通信,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-10-10
基于JavaScript Array數(shù)組方法(新手必看篇)
下面小編就為大家?guī)硪黄贘avaScript Array數(shù)組方法(新手必看篇)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2016-08-08
javascript開發(fā)隨筆二 動態(tài)加載js和文件
js無非就是script標簽引入頁面,但當項目越來越大的時候,單頁面引入N個js顯然不行,合并為單個文件減少了請求數(shù),但請求的文件體積卻很大2011-11-11
JavaScript高級程序設(shè)計 閱讀筆記(十五) 瀏覽器中的JavaScript
Window對象對操作瀏覽器窗口非常有用,開發(fā)者可以移動或調(diào)整瀏覽器窗口的大小2012-08-08

