JavaScript實(shí)現(xiàn)的原生態(tài)兼容IE6可調(diào)可控滾動文字功能詳解
本文實(shí)例講述了JavaScript實(shí)現(xiàn)的原生態(tài)兼容IE6可調(diào)可控滾動文字功能。分享給大家供大家參考,具體如下:
雖然HTML里面本身就有marquee標(biāo)簽,用來設(shè)置滾動文字(marquee標(biāo)簽在附錄【HTML比較冷門標(biāo)簽與屬性】里會有具體介紹)這個標(biāo)簽到了IE8就開始不支持,在IE6中可以設(shè)置的東西也很少,所以這東西還是用javascript來寫為好。這個小組件也是比較常見的,但是網(wǎng)上的代碼質(zhì)量還是為了很多無關(guān)緊要的小特效而增加了許多無謂的代碼。其實(shí)這東西,你只要弄得能自己向右向左滾,到了屏幕邊緣自動返回就行了,為什么要為了一些淡入淡出的華而不實(shí)的東西,而寫一大摞代碼了。下面介紹一個自己寫的利用padding-left實(shí)現(xiàn)滾動文字,因?yàn)閜adding-left這個東西在大多數(shù)瀏覽器還是沒有問題的。
一、基本目標(biāo)
如下圖,一開始文字能在15px-400px這個區(qū)域以每0.05s,5px像素的無縫滾動,當(dāng)然,改改下面的腳本,你讓我從地球滾動到外太空都沒問題,只要你告訴我地球的px和外太空的px就行了,然后設(shè)置兩個按鈕,你點(diǎn)擊“停止”它就停止,停止之后點(diǎn)擊“開始”就讓它開始,它在“開始”的狀態(tài)你點(diǎn)N下“開始”是不會出BUG的,繼續(xù)保持這個狀態(tài),它在“停止”狀態(tài),你點(diǎn)N下“停止”也是沒有問題的。

二、HTML布局
代碼如下:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>marquee</title> </head> <body> <div>sssssss</div> <div id="marquee" style="padding-left:0px;">marquee</div> <div>sssssss</div> <button onclick="return marquee_move_stop()">停止</button> <button onclick="return marquee_move_start()">開始</button> </body> </html>
思想如下圖,一圖勝千言,不說了。請自行對比代碼與圖。

三、腳本部分
這里是整個控件的核心。
<script>
//設(shè)置其滾動速度是5px/0.05s,這樣能夠?qū)崿F(xiàn)無縫滾動,不會一卡一卡的。
var speed=5;
var marqueeTimer=setInterval("marquee_move()",50);
//這個變量主要是用來下面控制滾動開始與停止的兩個函數(shù)
var isMarqueeMove=true;
//滾動的核心函數(shù)
function marquee_move(){
//這么長的代碼主要是為了把帶px的padding-left轉(zhuǎn)化為一個可以操作的數(shù)
//如padding-left:0px;經(jīng)過這一行代碼之后var marquee_x=0;
var marquee_x=parseInt(document.getElementById("marquee").style.paddingLeft.substring(0,document.getElementById("marquee").style.paddingLeft.indexOf("px")));
//如果滾過400px這個位置,那就向反方向走,反之亦然
if(marquee_x>400){
speed=-5;
}
//這里不要設(shè)置成0,可能會產(chǎn)生越界bug
if(marquee_x<15){
speed=5;
}
//文字向右滾5px
document.getElementById("marquee").style.paddingLeft=marquee_x+speed+"px";
}
//下面控制滾動開始與停止的兩個函數(shù)
//之所以要立flag,是因?yàn)閙arqueeTimer=setInterval("marquee_move()",50);多次被執(zhí)行,滾動會變得很快和無法控制
//后方的計(jì)時器不會替換到前方的計(jì)時器
function marquee_move_stop(){
if(isMarqueeMove){
clearTimeout(marqueeTimer);
isMarqueeMove=false;
}
}
function marquee_move_start(){
if(!isMarqueeMove){
marqueeTimer=setInterval("marquee_move()",50);
isMarqueeMove=true;
}
}
</script>
四、總結(jié)
1、CSS中,凡是帶-的屬性,在javascript要換成大寫,如CSS的padding-left在javascript是paddingLeft,否則會被當(dāng)成減號處理
2、利用padding-left來完成這個組件,就不用使用left要設(shè)置絕對定位,然后又要考慮這個組件怎么擺放了。
3、這個東西在瀏覽器的百分比寬度內(nèi)滾動,最好不要這樣做,畢竟javascript中取出瀏覽器的寬度可能會遇到各種各樣的兼容性問題。還是設(shè)置一個定值,這樣的代碼簡短。
附:HTML比較冷門標(biāo)簽與屬性
1.<hr>標(biāo)簽?zāi)軌蛱砑右粭l水平分隔線。單標(biāo)記標(biāo)簽,擁有屬性width,size,color,align(后接值)noshade(直接添加,如文本框的disabled,表示這條水平線是無陰影的)
2.<marquee>標(biāo)簽已經(jīng)被微軟廢除了。
微軟這個家伙在最新的IE8下已經(jīng)放棄對MARQUEE的支持了(我這里很無語,MARQUEE是微軟自己創(chuàng)造出來的,現(xiàn)在火狐都支持了,它自己不干了)
用marquee有諸多問題的。DW給你提示是警告你慎重。
如下面的代碼在IE8的滾動是存在問題的,當(dāng)圖片滾完之后會自動刷新,相當(dāng)難看,無法現(xiàn)實(shí)無縫滾動。
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>滾動</title> </head> <body> <marquee width=250px behavior="scroll"> <a rel="external nofollow" ><img src="img0.jpg" width=100 hspace=50/></a> <a rel="external nofollow" ><img src="img28.jpg" width=100px /></a> </marquee> </body> </html>
3.<strong>標(biāo)簽是強(qiáng)調(diào)標(biāo)簽,基于內(nèi)容。<b>是物理樣式。<sup><sub>雙標(biāo)記標(biāo)簽?zāi)芊謩e使字體上標(biāo)與下標(biāo)
4.©是代表版權(quán)字符©,®則是注冊商標(biāo), 是空格
5.對于圖片,其hspace屬性能夠設(shè)置圖片與圖片之間的間距。
6.<body>標(biāo)簽也是有屬性的vlink link 能夠分別設(shè)置訪問了與未訪問超鏈接的顏色,leftmargin與topmargin能夠分別規(guī)定文檔的左邊距與上邊距
7.<meta name="keywords" content="搜索關(guān)鍵詞"><meta name="description content="網(wǎng)頁描述">能分別設(shè)置被搜索引擎抓取的關(guān)鍵詞與網(wǎng)頁描述
更多關(guān)于JavaScript相關(guān)內(nèi)容感興趣的讀者可查看本站專題:《JavaScript切換特效與技巧總結(jié)》、《JavaScript查找算法技巧總結(jié)》、《JavaScript錯誤與調(diào)試技巧總結(jié)》、《JavaScript數(shù)據(jù)結(jié)構(gòu)與算法技巧總結(jié)》、《JavaScript遍歷算法與技巧總結(jié)》及《JavaScript數(shù)學(xué)運(yùn)算用法總結(jié)》
希望本文所述對大家JavaScript程序設(shè)計(jì)有所幫助。
相關(guān)文章
JavaScript使用Promise實(shí)現(xiàn)并發(fā)請求數(shù)限制
本文主要介紹了JavaScript使用Promise實(shí)現(xiàn)并發(fā)請求數(shù)限制,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2023-04-04
JS獲取下拉列表所選中的TEXT和Value的實(shí)現(xiàn)代碼
本篇文章主要是對JS獲取下拉列表所選中的TEXT和Value的實(shí)現(xiàn)代碼進(jìn)行了介紹,需要的朋友可以過來參考下,希望對大家有所幫助2014-01-01
微信小程序?qū)崿F(xiàn)圖片上傳、刪除和預(yù)覽功能的方法
這篇文章主要介紹了微信小程序?qū)崿F(xiàn)圖片上傳、刪除和預(yù)覽功能的方法,涉及微信小程序界面布局、事件響應(yīng)及圖片操作相關(guān)實(shí)現(xiàn)技巧,需要的朋友可以參考下2017-12-12
Chrome擴(kuò)展頁面動態(tài)綁定JS事件提示錯誤
開發(fā)Chrome擴(kuò)展時,頁面的popup.html中需要js的時候,直接將JS寫在動態(tài)綁定JS事件會提示錯誤,下面有個不錯的解決方法,大家可以參考下2014-02-02
使用Promise鏈?zhǔn)秸{(diào)用解決多個異步回調(diào)的問題
這篇文章主要給大家介紹了使用Promise鏈?zhǔn)秸{(diào)用解決多個異步回調(diào)問題的方法,文中給出了詳細(xì)的介紹和示例代碼,有需要的朋友可以參考借鑒,下面來一起學(xué)習(xí)學(xué)習(xí)吧。2017-01-01
Cropper.js進(jìn)階之裁剪后保存至服務(wù)器實(shí)現(xiàn)詳解
這篇文章主要為大家介紹了Cropper.js進(jìn)階之裁剪后保存至服務(wù)器實(shí)現(xiàn)示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-05-05
js從輸入框讀取內(nèi)容,比較兩個數(shù)字的大小方法
下面小編就為大家?guī)硪黄猨s從輸入框讀取內(nèi)容,比較兩個數(shù)字的大小方法。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2017-03-03

