原生js實(shí)現(xiàn)公告滾動(dòng)效果
本文實(shí)例為大家分享了js實(shí)現(xiàn)公告滾動(dòng)展示的具體代碼,供大家參考,具體內(nèi)容如下
1.html結(jié)構(gòu)
<body> <div id="notice" class="notice"> <ul id="noticeList"> <li>我是公告1</li> <li>我是公告2</li> <li>我是公告3</li> <li>我是公告4</li> </ul> </div> </body>
2.css樣式
<style type="text/css">
body,
div,
ul,
li {
margin: 0;
padding: 0;
}
ul,
li {
list-style: none;
}
.notice {
width: 300px;
height: 30px;
border: 1px solid black;
text-align: center;
overflow: hidden;
}
li {
padding: 3px;
}
</style>
3.js行為
<script type="text/javascript">
window.onload = function() {
var notice = document.getElementById("notice");
var noticeList = document.getElementById("noticeList");
// 獲取ul下第一個(gè)li元素,好計(jì)算li的高度,因?yàn)楹竺鏉L動(dòng)的時(shí)候每次要滾動(dòng)一個(gè)高度,這里li都是一樣高的,
// 所以獲取第一個(gè)的高度就行了,不然要遍歷獲取每一個(gè)li的高度。
var noticeFirstItem = noticeList.querySelector("li");
// 獲取li的高度,這里獲取的是offsetHeight,關(guān)于js各種高度的定義可以注意以下
var scrollHeight = noticeFirstItem.offsetHeight;
// 是否可以進(jìn)行動(dòng)畫
var opt = {
animated: true,
interval: 1000
};
notice.onclick = function() {
// 動(dòng)畫之前首先重置
// noticeFirstItem.style.transition = "";
noticeFirstItem.style.marginTop = 0;
if (opt.animated) {
opt.animated = false;
animate(noticeList, scrollHeight, opt);
}
};
};
// 動(dòng)畫函數(shù),obj——要產(chǎn)生動(dòng)畫的對(duì)象,sHeight——每次要滾動(dòng)的距離,interval——多久滾動(dòng)一次
function animate(obj, sHeight, option) {
// 當(dāng)滾到最后一條公告的時(shí)候就不用動(dòng)畫了。
var stopHeight = sHeight - obj.scrollHeight;
var marginTopNum = 0;
var timer = setInterval(function() {
marginTopNum -= sHeight;
obj.style.marginTop = marginTopNum + "px";
obj.style.transition = "margin-top 1.5s ease";
// 注意這里的比較符號(hào),前面得到的高度都進(jìn)行四舍五入了
if (marginTopNum <= stopHeight) {
clearInterval(timer);
// option.animated = true;
}
}, option.interval);
}
</script>
4.運(yùn)行結(jié)果

動(dòng)畫在進(jìn)行中時(shí)注意控制不能進(jìn)行其他動(dòng)畫!
結(jié)束語:不要把動(dòng)畫想得很難,當(dāng)你想實(shí)現(xiàn)復(fù)雜的動(dòng)畫時(shí),比如jquery的animate方法,你可以先實(shí)現(xiàn)針對(duì)一個(gè)屬性的動(dòng)畫,然后再想辦法擴(kuò)展到多個(gè)屬性(即以對(duì)象方式去傳參,然后遍歷對(duì)象中的每個(gè)樣式屬性,然后給每個(gè)樣式屬性添加動(dòng)畫)。以前都是用js去實(shí)現(xiàn)每一幀每一幀的移動(dòng),即在肉眼無法反應(yīng)過來的時(shí)間里產(chǎn)生移動(dòng),這樣就能產(chǎn)生連續(xù)移動(dòng)的效果,現(xiàn)在css3出來了,可以方便的利用css3來實(shí)現(xiàn)過渡效果了,而不用復(fù)雜的js來實(shí)現(xiàn)了。這個(gè)真的太棒了。
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
JavaScript輸入郵箱自動(dòng)提示實(shí)例代碼
這篇文章主要介紹了JavaScript輸入郵箱自動(dòng)提示實(shí)例代碼,有需要的朋友可以參考一下2014-01-01
Layui Form 自定義驗(yàn)證的實(shí)例代碼
今天小編就為大家分享一篇Layui Form 自定義驗(yàn)證的實(shí)例代碼,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2019-09-09
JavaScript?進(jìn)階問題列表(各種js代碼段108-155)
從基礎(chǔ)到進(jìn)階,測(cè)試你有多了解?JavaScript,刷新你的知識(shí),或者幫助你的?coding?面試!?:muscle:?:rocket:?我每周都會(huì)在這個(gè)倉庫下更新新的問題2024-11-11
JavaScript正則表達(dá)式小結(jié)(test|match|search|replace|split|exec)
這篇文章主要介紹了JavaScript正則表達(dá)式小結(jié)(test|match|search|replace|split|exec)的相關(guān)資料,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友參考下吧2016-12-12
JavaScript獲取IP獲取的是IPV6 如何校驗(yàn)
項(xiàng)目中遇到了關(guān)于IPV6的一些問題,特意做一個(gè)專輯說明一下,希望能夠幫助有需要的同學(xué)!2016-06-06
Bootstrap 模態(tài)框多次顯示后臺(tái)提交多次BUG的解決方法
本篇文章主要介紹了Bootstrap 模態(tài)框多次顯示后臺(tái)提交多次BUG的解決方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-12-12

