前端福利之jQuery文字輪播特效(轉)

閒談:離開學校那座象牙塔已經也有大半年的事件了,生活中再也不充滿了茫然只有忙碌。連續加班加點大半個月,作的活動項目終於算是告一段落了,而今天也將是考驗其真正價值的時候,如今將此次開發中遇到的問題作一下總結。css

項目背景: 此次的項目主要是作一次全國酒店人氣排名的營銷活動,主要是基於在微信中傳播,預計訪問量達到億級,併發作到2000+/s,且有很多的容錯預案,我此次主要負責前端首頁方面的展現效果。html

 

功能點:前端

文字無縫輪播(不要在乎爲何在移動端還會有這樣的需求)jquery

當一說到文字無縫滾動時,你們最早想到的是marquee,可是已經很久沒有接觸這個標籤了,w3c也不對其進行維護了,而且還有最後必須等到所有滾動完畢纔會再次滾動,而且對於rem佈局採用基於px的滾動體驗會很是的
差等等。。css3

第二個想到的是採用相似jquery實現的圖片輪播機制,能夠基本完成,可是發現不管是jquery仍是zepto文字在滾動的時候會抖動,可用性比較差。web

再就是如今用到的css3 + 少許js,採用不多的代碼就能夠實現文字不一樣長度,文字條數不定的文字無縫滾動輪播。微信

下面先看html結構併發

<div class="outer">
  <ul id="J_scroll">
    <li>1.這是第一條數據</li>
    <li>2.這是第二條數據</li>
    <li>3.這是第三條數據</li>
    <li>4.這是第四條數據</li>
    <li>5.這是第五條數據</li>
    <li>1.這是第一條數據</li> 
  </ul>
</div>

與圖片的無縫滾動同樣,也須要將第一條數據拷貝一份放在最後面佈局

其次是css的相關數據spa

.outer{ width: 122px; height: 80px; overflow: hidden; } .outer ul{ display:inline-block; height: 80px; -webkit-transform: translate3d(0, 0, 0); /* 3d渲染,開啓硬件加速 */ transform: translate3d(0, 0, 0); font-size: 0;  /* 使inline-block無默認間距 */ white-space: nowrap; /* 超出不折行 */ } .outer ul li{ display: inline-block; padding-right: 50px; -webkit-transform: translate3d(0, 0, 0); transform: translate3d(0, 0, 0); font-size: 24px; } .theanimation{ animation:theanimation 20s infinite linear; -webkit-animation:theanimation 20s infinite linear; } @keyframes theanimation{ from { transform:translateX(0%); } to { transform:translateX(-100%); } } @-webkit-keyframes theanimation{ from { -webkit-transform:translateX(0%); } to { -webkit-transform:translateX(-100%); } }

因爲IOS的一些渲染機制,最好滾動的元素內部都須要啓動硬件加速,不然會有卡頓和文字顯示不全的問題。

最後是js

$('#J_scroll').width($('#J_scroll').width() - $('#J_scroll li:first-child').innerWidth()); $('#J_scroll').addClass('theanimation');

這裏仍是寫的jquery,相信你們都能看的懂,就是讓滾動元素的寬度等於他的內部元素的總寬度減去第一個(或者最後一個)元素的寬度,這樣能保證無縫的效果。

最後要說明爲何要用js動態添加css3的類名實現滾動效果,一開始的時候我也是想直接將css3滾動特效寫在滾動的元素上,可是在iPhone上發現首次加載當前頁面的時候他不會自動滾動。

 

轉自:https://www.jb51.net/article/105332.htm

相關文章
相關標籤/搜索