摘要:前言最近寫了一個文字跑馬燈的項目需求,剛開始用寫,能夠完成需求。代碼部分預覽實現文字跑馬燈小結的方式能夠完美的滿足子需求點和自需求點。
前言
最近寫了一個文字跑馬燈的項目需求,剛開始用js寫,能夠完成需求。后面想著換種方式(分別是html和css)來實現同一個需求,以減少性能消耗。
首先,需求分析:
需求點1.判斷文字的長度和容器的長度,如果文字長度大于容器長度則開始滾動,否則不滾動;
需求點2.判斷滾動滾動的結束,在結束的時間點觸發事件(比如: 增減樣式等操作);
一、JS實現思路:
1.判斷文字的長度和容器的長度,如果文字長度大于容器長度,則開始滾動,否則不滾動。(offsetWidth)
2.獲取滾動條到元素左邊的距離,遞歸滾動,直到滾動后的距離等于文字的長度退出遞歸。(scrollLeft)
如果不熟悉offsetWidth,scrollLeft,您可以點擊這里offsetWidth、scrollLeft
效果圖
注釋: 文字抖動現象是因為錄制時間過長,ps制作gif文件只能是500幀以下,通過降低幀率才出現了文字抖動。
代碼部分
預覽Demo:JS實現文字跑馬燈
小結
js的方式能夠完美的滿足子需求點1和自需求點2。
判斷文字和容器的長度可以通過offsetWidth來判斷。如果文字長度大于容器長度,則開始滾動。
window.onload=function checkScrollLeft(){ // 判斷文字長度是否大于盒子長度 if(boxWidth >= textWidth){ return false} content.innerHTML += content.innerHTML document.querySelector(".text").classList.add("padding") // 更新 textWidth = document.querySelector(".text").offsetWidth // 開始滾動 觸發事件 toScrollLeft() }
判斷滾動的結束根據滾動條到元素左邊的距離和文字的長度判斷,如果滾動條到元素左邊的距離等于文字的長度,則結束滾動。
function toScrollLeft(){ // 如果文字長度大于滾動條距離,則遞歸拖動 if(textWidth > box.scrollLeft){ box.scrollLeft++ setTimeout("toScrollLeft()", 18); } else{ // 滾動結束 觸發事件 } }二、HTML實現
效果圖:
代碼部分:
非常簡潔的代碼~、~
marquee的API
雖然marquee標簽的api十分豐富,但是該標簽在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.
元素已經過時,請不要再使用。盡管一些瀏覽器仍然支持它,但它不是必須的。此外,使用這個元素基本上是你可以對你的用戶做最糟糕的事情之一,所以請不要這樣做。
所以,根據咱們IT圈內的緊跟文檔標準的原則,對marquee標簽,我們在項目中請盡量不要使用
三、CSS實現效果圖
代碼部分
預覽Demo: CSS實現文字跑馬燈
小結
CSS能滿足子需求點1,能夠判斷什么時候開始滾動。
window.onload=function checkScrollLeft(){ // 判斷文字長度是否大于盒子長度 if(textWidth > wrapWidth) { // 開始滾動 觸發事件 text.style.paddingRight = "300px" cont.style.left = "-870px" } }
同時,也能滿足子需求點2,判斷滾動的結束。
// 滾動結束 document.addEventListener("transitionend", function (){ console.log("end") }, false)結語
回顧需求
需求點1.判斷文字的長度和容器的長度,如果文字長度大于容器長度則開始滾動,否則不滾動;
需求點2.判斷滾動滾動的結束,在結束的時間點觸發事件(比如: 增減樣式等操作);
實現方式的優劣對比
js實現跑馬燈效果 | html實現跑馬燈效果 | css實現跑馬燈效果 | |
---|---|---|---|
需求點1 | ?? | ? | ?? |
需求點2 | ?? | ? | ?? |
兼容性 | ?? | ? | ? |
如果需要滿足需求,js和css都能夠實現。但是考慮到兼容性,css在ios9以下,安卓4.4以下不支持,其他好的解決方案在考慮中。如果你有好的解決方案,歡迎在下方留言與我交流~
另外,css用作單純的展示效果用還是能優先考慮的,比如下方的css無縫滾動
效果圖
代碼部分
預覽Demo css無縫滾動動畫
所以,工具本身沒有優劣之分,什么時候用什么工具。我們要有清晰的思路。
-------------------------華麗的分割線--------------------
關于我
我的github主頁(點擊進入)
我的公眾號(點擊進入)
我的掘金主頁(點擊進入)
我的簡書主頁(點擊進入)
參考
w3c最新標準
HTML_制作滾動字幕_marquee標簽
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/114154.html
摘要:前言最近寫了一個文字跑馬燈的項目需求,剛開始用寫,能夠完成需求。代碼部分預覽實現文字跑馬燈小結的方式能夠完美的滿足子需求點和自需求點。 前言 最近寫了一個文字跑馬燈的項目需求,剛開始用js寫,能夠完成需求。后面想著換種方式(分別是html和css)來實現同一個需求,以減少性能消耗。 首先,需求分析: 需求點1.判斷文字的長度和容器的長度,如果文字長度大于容器長度則開始滾動,否則不滾動;...
摘要:效果預覽按下右側的點擊預覽按鈕在當前頁面預覽,點擊鏈接全屏預覽。可交互視頻教程此視頻是可以交互的,你可以隨時暫停視頻,編輯視頻中的代碼。 showImg(https://segmentfault.com/img/bVbfmGm?w=400&h=303); 效果預覽 按下右側的點擊預覽按鈕在當前頁面預覽,點擊鏈接全屏預覽。 https://codepen.io/zhang-ou/pen/...
摘要:效果預覽按下右側的點擊預覽按鈕在當前頁面預覽,點擊鏈接全屏預覽。可交互視頻教程此視頻是可以交互的,你可以隨時暫停視頻,編輯視頻中的代碼。 showImg(https://segmentfault.com/img/bVbfmGm?w=400&h=303); 效果預覽 按下右側的點擊預覽按鈕在當前頁面預覽,點擊鏈接全屏預覽。 https://codepen.io/zhang-ou/pen/...
閱讀 1155·2023-04-25 17:28
閱讀 3531·2021-10-14 09:43
閱讀 3954·2021-10-09 10:02
閱讀 1941·2019-08-30 14:04
閱讀 3128·2019-08-30 13:09
閱讀 3268·2019-08-30 12:53
閱讀 2896·2019-08-29 17:11
閱讀 1822·2019-08-29 16:58