摘要:前言最近寫了一個(gè)文字跑馬燈的項(xiàng)目需求,剛開始用寫,能夠完成需求。代碼部分預(yù)覽實(shí)現(xiàn)文字跑馬燈小結(jié)的方式能夠完美的滿足子需求點(diǎn)和自需求點(diǎn)。
前言
最近寫了一個(gè)文字跑馬燈的項(xiàng)目需求,剛開始用js寫,能夠完成需求。后面想著換種方式(分別是html和css)來實(shí)現(xiàn)同一個(gè)需求,以減少性能消耗。
首先,需求分析:
需求點(diǎn)1.判斷文字的長度和容器的長度,如果文字長度大于容器長度則開始滾動(dòng),否則不滾動(dòng);
需求點(diǎn)2.判斷滾動(dòng)滾動(dòng)的結(jié)束,在結(jié)束的時(shí)間點(diǎn)觸發(fā)事件(比如: 增減樣式等操作);
一、JS實(shí)現(xiàn)思路:
1.判斷文字的長度和容器的長度,如果文字長度大于容器長度,則開始滾動(dòng),否則不滾動(dòng)。(offsetWidth)
2.獲取滾動(dòng)條到元素左邊的距離,遞歸滾動(dòng),直到滾動(dòng)后的距離等于文字的長度退出遞歸。(scrollLeft)
如果不熟悉offsetWidth,scrollLeft,您可以點(diǎn)擊這里offsetWidth、scrollLeft
效果圖
注釋: 文字抖動(dòng)現(xiàn)象是因?yàn)殇浿茣r(shí)間過長,ps制作gif文件只能是500幀以下,通過降低幀率才出現(xiàn)了文字抖動(dòng)。
代碼部分
預(yù)覽Demo:JS實(shí)現(xiàn)文字跑馬燈
小結(jié)
js的方式能夠完美的滿足子需求點(diǎn)1和自需求點(diǎn)2。
判斷文字和容器的長度可以通過offsetWidth來判斷。如果文字長度大于容器長度,則開始滾動(dòng)。
window.onload=function checkScrollLeft(){ // 判斷文字長度是否大于盒子長度 if(boxWidth >= textWidth){ return false} content.innerHTML += content.innerHTML document.querySelector(".text").classList.add("padding") // 更新 textWidth = document.querySelector(".text").offsetWidth // 開始滾動(dòng) 觸發(fā)事件 toScrollLeft() }
判斷滾動(dòng)的結(jié)束根據(jù)滾動(dòng)條到元素左邊的距離和文字的長度判斷,如果滾動(dòng)條到元素左邊的距離等于文字的長度,則結(jié)束滾動(dòng)。
function toScrollLeft(){ // 如果文字長度大于滾動(dòng)條距離,則遞歸拖動(dòng) if(textWidth > box.scrollLeft){ box.scrollLeft++ setTimeout("toScrollLeft()", 18); } else{ // 滾動(dòng)結(jié)束 觸發(fā)事件 } }二、HTML實(shí)現(xiàn)
效果圖:
代碼部分:
非常簡(jiǎn)潔的代碼~、~
marquee的API
雖然marquee標(biāo)簽的api十分豐富,但是該標(biāo)簽在MDN上是這樣描述的:
This feature is obsolete. Although it may still work in some browsers, its use is discouraged since it could be removed at any time. Try to avoid using it.
元素已經(jīng)過時(shí),請(qǐng)不要再使用。盡管一些瀏覽器仍然支持它,但它不是必須的。此外,使用這個(gè)元素基本上是你可以對(duì)你的用戶做最糟糕的事情之一,所以請(qǐng)不要這樣做。
所以,根據(jù)咱們IT圈內(nèi)的緊跟文檔標(biāo)準(zhǔn)的原則,對(duì)marquee標(biāo)簽,我們?cè)陧?xiàng)目中請(qǐng)盡量不要使用
三、CSS實(shí)現(xiàn)效果圖
代碼部分
預(yù)覽Demo: CSS實(shí)現(xiàn)文字跑馬燈
小結(jié)
CSS能滿足子需求點(diǎn)1,能夠判斷什么時(shí)候開始滾動(dòng)。
window.onload=function checkScrollLeft(){ // 判斷文字長度是否大于盒子長度 if(textWidth > wrapWidth) { // 開始滾動(dòng) 觸發(fā)事件 text.style.paddingRight = "300px" cont.style.left = "-870px" } }
同時(shí),也能滿足子需求點(diǎn)2,判斷滾動(dòng)的結(jié)束。
// 滾動(dòng)結(jié)束 document.addEventListener("transitionend", function (){ console.log("end") }, false)結(jié)語
回顧需求
需求點(diǎn)1.判斷文字的長度和容器的長度,如果文字長度大于容器長度則開始滾動(dòng),否則不滾動(dòng);
需求點(diǎn)2.判斷滾動(dòng)滾動(dòng)的結(jié)束,在結(jié)束的時(shí)間點(diǎn)觸發(fā)事件(比如: 增減樣式等操作);
實(shí)現(xiàn)方式的優(yōu)劣對(duì)比
js實(shí)現(xiàn)跑馬燈效果 | html實(shí)現(xiàn)跑馬燈效果 | css實(shí)現(xiàn)跑馬燈效果 | |
---|---|---|---|
需求點(diǎn)1 | ?? | ? | ?? |
需求點(diǎn)2 | ?? | ? | ?? |
兼容性 | ?? | ? | ? |
如果需要滿足需求,js和css都能夠?qū)崿F(xiàn)。但是考慮到兼容性,css在ios9以下,安卓4.4以下不支持,其他好的解決方案在考慮中。如果你有好的解決方案,歡迎在下方留言與我交流~
另外,css用作單純的展示效果用還是能優(yōu)先考慮的,比如下方的css無縫滾動(dòng)
效果圖
代碼部分
預(yù)覽Demo css無縫滾動(dòng)動(dòng)畫
所以,工具本身沒有優(yōu)劣之分,什么時(shí)候用什么工具。我們要有清晰的思路。
-------------------------華麗的分割線--------------------
關(guān)于我
我的github主頁(點(diǎn)擊進(jìn)入)
我的公眾號(hào)(點(diǎn)擊進(jìn)入)
我的掘金主頁(點(diǎn)擊進(jìn)入)
我的簡(jiǎn)書主頁(點(diǎn)擊進(jìn)入)
參考
w3c最新標(biāo)準(zhǔn)
HTML_制作滾動(dòng)字幕_marquee標(biāo)簽
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/98986.html
摘要:前言最近寫了一個(gè)文字跑馬燈的項(xiàng)目需求,剛開始用寫,能夠完成需求。代碼部分預(yù)覽實(shí)現(xiàn)文字跑馬燈小結(jié)的方式能夠完美的滿足子需求點(diǎn)和自需求點(diǎn)。 前言 最近寫了一個(gè)文字跑馬燈的項(xiàng)目需求,剛開始用js寫,能夠完成需求。后面想著換種方式(分別是html和css)來實(shí)現(xiàn)同一個(gè)需求,以減少性能消耗。 首先,需求分析: 需求點(diǎn)1.判斷文字的長度和容器的長度,如果文字長度大于容器長度則開始滾動(dòng),否則不滾動(dòng);...
摘要:效果預(yù)覽按下右側(cè)的點(diǎn)擊預(yù)覽按鈕在當(dāng)前頁面預(yù)覽,點(diǎn)擊鏈接全屏預(yù)覽。可交互視頻教程此視頻是可以交互的,你可以隨時(shí)暫停視頻,編輯視頻中的代碼。 showImg(https://segmentfault.com/img/bVbfmGm?w=400&h=303); 效果預(yù)覽 按下右側(cè)的點(diǎn)擊預(yù)覽按鈕在當(dāng)前頁面預(yù)覽,點(diǎn)擊鏈接全屏預(yù)覽。 https://codepen.io/zhang-ou/pen/...
摘要:效果預(yù)覽按下右側(cè)的點(diǎn)擊預(yù)覽按鈕在當(dāng)前頁面預(yù)覽,點(diǎn)擊鏈接全屏預(yù)覽。可交互視頻教程此視頻是可以交互的,你可以隨時(shí)暫停視頻,編輯視頻中的代碼。 showImg(https://segmentfault.com/img/bVbfmGm?w=400&h=303); 效果預(yù)覽 按下右側(cè)的點(diǎn)擊預(yù)覽按鈕在當(dāng)前頁面預(yù)覽,點(diǎn)擊鏈接全屏預(yù)覽。 https://codepen.io/zhang-ou/pen/...
閱讀 2672·2021-11-18 10:02
閱讀 3437·2021-09-22 15:50
閱讀 2365·2021-09-06 15:02
閱讀 3584·2019-08-29 16:34
閱讀 1751·2019-08-29 13:49
閱讀 1281·2019-08-29 13:29
閱讀 3643·2019-08-28 18:08
閱讀 2944·2019-08-26 11:52