天天躁日日躁狠狠躁AV麻豆-天天躁人人躁人人躁狂躁-天天澡夜夜澡人人澡-天天影视香色欲综合网-国产成人女人在线视频观看-国产成人女人视频在线观看

Javascript & DHTML 實例編程(教程)(四)初級實例篇2―動畫

上篇說了動態創建結點和刪除結點的例子,這一篇說一些如何用setInterval和setTimeout做簡單的動畫。
語法皆是window.setTimeout(fn, delay), window.setInterval(fn, delay)
fn可以是一個函數名,也可以是一個執行的字符串,但要注意的是,如果fn是一個可以執行的字符串,且有參數,如window.setInterval("myFunction(obj)",1000)將可能拋出一個異常,這個時候,通常是你要傳遞一個對象參數,我建議用這樣的一個辦法來解決,也建議使用這種方法來使用window.setTimeout和window.setInterval:

window.setInterval(function (){
myFunction(obj);},1000);

還有一種情況就是在一個"class"里,即要執行this.myFunction(obj)如何實現呢?


function jsclass() {};
jsclass.prototype.init = function (obj) {
  var self = this; //創建一個this指針的引用
  window.setInterval(function(obj) {
  self.myFunction(obj);},1000);
};
jsclass.prototype.myFunction = function (obj) {
  //TODO
};

DHTML的全局方法setInterval和setTimeout,所謂全局,即在window層,不屬于DHTML的DOM元素的方法里,這兩個有一些區別,網上也有很多說明,也就是setInterval是循環執行一個指定函數,setTimeout是只執行一次。例外說明一點,屬于window層次的,可以在前面不加window,即可以用window.setInterval也可以直接用setInterval。

它們都返回一個數字型的timerId,用于cleaverInterval/clearTimeout方法,從setInterval/setTimeout中返回。如果做過桌面應用的朋友,可以把這個setInterval和setTimeout假想成創建一個線程,而timerId則是一個線程Id,而cleaverInterval/clearTimeout方法則是消毀這個線程。也許這樣可以更好的理解這兩個方法。

(在具體的應用中,我更驅向于用setTimeout。)

知道這兩個方法的功能,先來寫一個簡單的例子:

一個一秒后彈出的alert對話框。

<script>
window.setTimeout(function () {
  alert("timeout example after 1 second");
},1000)
</script>

每一秒創建一個新DIV結點的函數
<script>
function intervalExample() {
  var div=document.createElement("div");
  div.innerHTML = "tutorial of DHTML and Javascript programming, by www.never-online.NET";
  document.body.appendChild(div);
}
window.setInterval(intervalExample,1000);
</script>

而實際應用中,setTimeout可以有一個另類一些的應用,比如相當于VB中的DoEvents函數,或者.NET桌面程序中Application.DoEvents();這樣的功能,也就是異步處理,因為DHTML沒有多線程,所以說這個功能在很多的時候是為了給用戶覺得不是在假死狀態,或者給其它的程序按照代碼的邏輯繼續執行下去而不會阻塞或者也不會跳過一段代碼執行。

舉個例子。

下段代碼是沒有加setTimeout的。運行后,錨點會馬上指向hash2

<script>
window.location.hash="hash1";
window.location.hash="hash2";
</script>

這一段是加了setTimeout的,錨點會在3秒后指向hash1,再在3秒后指向hash2
<script>
var doEventsDelay = 0;
function DoEvents (fn) {
  window.setTimeout(fn,doEventsDelay);
  doEventsDelay+=3000;
}
DoEvents(function () {
  window.location.hash="hash1";
  doEventsDelay-=3000;
}
);
DoEvents(function () {
  window.location.hash="hash2";
  doEventsDelay-=3000;
  }
);
</script>

下面我們做一個實用些的例子,比如一個動態顯示tip的動態菜單。

一、這里只講解setTimeout的方法,setInterval的請看demo里的代碼,還要注明一點(本例中有一個比較嚴重的問題是沒有解決的,這一問題我將留到以后再講解)是關于坐標的。比如將下面代碼中的sliderShow放到一個table中,就可能會發現一些問題了。:D

思路,得到一個元素,相對這個元素的作標,再根據一個tip的容器從而做一個動畫,
主要用到的就是相對元素的X,Y坐標,關于坐標的一些屬性意義,參見下圖:
/upload/200762224726499.gif

而整個動畫的思路,見下圖
http://www.never-online.<aNET/tutorial/js/sliderShow/sliderTip.png src="/d/file/itjie/JavaScriptjishu/2014-10-23/2d11a8525a268bff4fd85f3ba8ba49d3.png">注釋代碼:


[Ctrl+A 全選 注:如需引入外部Js需刷新才能執行]是否覺得上面的例子很多都是重復的勞動?如果減少一些豈不更好?:D,的確如此,上面的JS代碼有近一半都是重復的,在這里我就不把它優化了,還是留給大家做一些實質性的工作,減少上面代碼的冗余。 

JavaScript技術Javascript &amp;amp; DHTML 實例編程(教程)(四)初級實例篇2―動畫,轉載需保留來源!

鄭重聲明:本文版權歸原作者所有,轉載文章僅為傳播更多信息之目的,如作者信息標記有誤,請第一時間聯系我們修改或刪除,多謝。

主站蜘蛛池模板: 国语对白刺激真实精品 | 扒开屁股眼往里面夹东西 | 亚洲AV无码乱码国产麻豆穿越 | 好大太快了快插穿子宫了 | 免费在线观看的毛片 | 欧美日韩精品一区二区三区四区 | 护士被老头边摸边吃奶的视频 | 99久久久免费精品免费 | 国产午夜精品理论片影院 | 国产高潮国产高潮久久久久久 | 久久精品视频在线直播6 | 国产99九九久久无码熟妇 | 色拍拍噜噜噜啦啦新网站 | 无限资源网免费看 | 日韩午夜欧美精品一二三四区 | 在教室伦流澡到高潮H免费视频 | 亚洲国产精品免费观看 | 亚洲区 bt下载 | 强奷乱码中文字幕熟女免费 | 亚洲精品久久久无码一区二区 | 99久久久无码国产AAA精品 | 日本国产成人精品无码区在线网站 | 又粗又大又爽又黄的免费视频 | 777米奇影院第七色色 | 18美女腿打开无遮软件 | 97在线免费观看 | 久久黄色录像 | 18禁国产精品久久久久久麻豆 | 女人高潮被爽到呻吟在线观看 | 丝袜足控免费网站xx91 | 久久精品电影网 | 美女激清床上戏大全 | 国产精品久久久久秋霞影视 | 插曲的痛30分钟视频最新章节 | 9966在线观看免费高清电影 | WWW国产亚洲精品久久久日本 | 后入到高潮免费观看 | 牛和人交videos欧美 | 中文字幕在线不卡日本v二区 | CHINSEFUCKGAY无套 chinese野外男女free | 性啪啪chinese东北女人 |