淘寶交互--熱點圖標跳動
阿新 • • 發佈:2017-09-06
elements 退出 一次 ldo 等待 傳遞 周期性 cnblogs asc
html代碼如下:
<div id="head"> <div class="navigation"> <ul class="cont"> <h2>主題市場</h2> <li><a class="hot" href="#">女裝</a></li> <li><a class="n" href="#">家電</a></li> </ul></div> <div>
js代碼如下:
/*驅動函數*/
function addLoadEvent(func) {
var oldonload = window.onload; if(typeof window.onload != ‘function‘) { window.onload = func; } else { window.onload = function() { oldonload(); func(); }; } } addLoadEvent(Jump);function Jump() {
/*獲取元素*/ var oHead = document.getElementById(‘head‘); var h3 = oHead.getElementsByClassName(‘cont‘); var aHot = oHead.getElementsByClassName(‘hot‘); var aN = oHead.getElementsByClassName(‘n‘); var arr = []; var timer = null; //定義一個空對象 //遍歷所有含有指定類名的元素,推入數組 for(var i=0; i<aHot.length; i++){ arr.push(aHot[i]); } for(var i=0; i<aN.length; i++){ arr.push(aN[i]); } h3.onmouseover = jump();
/*跳動功能函數*/ function jump() { var flag = true;
/*定時器*/ timer = setInterval (function() { if (flag) { for(var i=0; i<aHot.length; i++) { arr[i].style.background = ‘url(hot) no-repeat right 2px‘; } for(var i=aHot.length-1; i<arr.length; i++) { arr[i].style.background = ‘url(n) no-repeat right 2px‘; } flag = false; } else { for(var i=0; i<aHot.length; i++) { arr[i].style.background = ‘url(hot) no-repeat right top‘; } for(var i=aHot.length-1; i<arr.length; i++) { arr[i].style.background = ‘url(n) no-repeat right top‘; } flag = true; } },3000); } }
setTimeout
定義和用法: setTimeout()方法用於在指定的毫秒數後調用函數。
語法: setTimeout( func , timer)
參數: func:要調用的函數後要執行的 JavaScript 函數。timer:在執行代碼前需等待的毫秒數。
提示: setTimeout() 只執行 func 一次。如果要多次調用,請使用 setInterval()。
setInterval
setInterval() 方法可按照指定的周期(以毫秒計)來調用函數或計算表達式。該方法會不停地調用函數,直到調用 clearInterval() 或窗口被關閉,其返回的 ID 值可用作 clearInterval() 方法的參數。
語法: setInterval(func , timer)
參數: func 必需。要調用的函數或要執行的代碼串。millisec 必須。周期性執行或調用 code 之間的時間間隔,以毫秒計。
返回值: 一個可以傳遞給 Window.clearInterval() 從而取消對 code 的周期性執行的值。
setTimeout和setinterval的主要區別是:
setTimeout只運行一次,也就是說設定的時間到後就觸發運行指定代碼,運行完後即結束。如果運行的代碼中再次運行同樣的setTimeout命令,則可循環運行。(即 要循環運行,需函數自身再次調用 setTimeout())
setinterval是循環運行的,即每到設定時間間隔就觸發指定代碼,如果隊列中有其它函數等待執行,則等待其它函數執行完了才進行本次循環,這時,時間間隔就不是設定的時間間隔。這是真正的定時器。
setinterval使用簡單,而setTimeout則比較靈活,可以隨時退出循環,而且可以設置為按不固定的時間間隔來運行。
淘寶交互--熱點圖標跳動