亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

JavaScript 圖像動(dòng)畫的小demo

 更新時(shí)間:2012年05月23日 22:18:31   作者:  
深夜沒睡著,起來翻了翻《JavaScript權(quán)威指南》這本書,看了下圖形動(dòng)畫的demo,學(xué)習(xí)學(xué)習(xí)了
復(fù)制代碼 代碼如下:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" >
<head>
<title>圖形動(dòng)畫</title>
<style type="text/css">
.de{ font-size:30px; text-decoration:none; font-family:微軟雅黑; color:#ccc;}
.de:hover{ color:#933;}
</style>
<script type="text/javascript">
/**
* ImageLoop.js: An ImageLoop class for performing image animations
*
* Constructor Arguments:
* imageId: the id of the <img> tag which will be animated
* fps: the number of frames to display per second
* frameURLs: an array of URLs, one for each frame of the animation
*
* Public Methods:
* start(): start the animation (but wait for all frames to load first)
* stop(): stop the animation
*
* Public Properties:
* loaded: true if all frames of the animation have loaded,
* false otherwise
*/
function ImageLoop(imageId, fps, frameURLs) {
// Remember the image id. Don't look it up yet since this constructor
// may be called before the document is loaded.
this.imageId = imageId;
// Compute the time to wait between frames of the animation
this.frameInterval = 1000 / fps;
// An array for holding Image objects for each frame
this.frames = new Array(frameURLs.length);

this.image = null; // The <img> element, looked up by id
this.loaded = false; // Whether all frames have loaded
this.loadedFrames = 0; // How many frames have loaded
this.startOnLoad = false; // Start animating when done loading?
this.frameNumber = -1; // What frame is currently displayed
this.timer = null; // The return value of setInterval()

// Initialize the frames[] array and preload the images
for (var i = 0; i < frameURLs.length; i++) {
this.frames[i] = new Image(); // Create Image object
// Register an event handler so we know when the frame is loaded
this.frames[i].onload = countLoadedFrames; // defined later
this.frames[i].src = frameURLs[i]; // Preload the frame's image
}

// This nested function is an event handler that counts how many
// frames have finished loading. When all are loaded, it sets a flag,
// and starts the animation if it has been requested to do so.
var loop = this;
function countLoadedFrames() {
loop.loadedFrames++;
if (loop.loadedFrames == loop.frames.length) {
loop.loaded = true;
if (loop.startOnLoad) loop.start();
}
}

// Here we define a function that displays the next frame of the
// animation. This function can't be an ordinary instance method because
// setInterval() can only invoke functions, not methods. So we make
// it a closure that includes a reference to the ImageLoop object
this._displayNextFrame = function () {
// First, increment the frame number. The modulo operator (%) means
// that we loop from the last to the first frame
loop.frameNumber = (loop.frameNumber + 1) % loop.frames.length;
// Update the src property of the image to the URL of the new frame
loop.image.src = loop.frames[loop.frameNumber].src;
};
}

/**
* This method starts an ImageLoop animation. If the frame images have not
* finished loading, it instead sets a flag so that the animation will
* automatically be started when loading completes
*/
ImageLoop.prototype.start = function () {
if (this.timer != null) return; // Already started
// If loading is not complete, set a flag to start when it is
if (!this.loaded) this.startOnLoad = true;
else {
// If we haven't looked up the image by id yet, do so now
if (!this.image) this.image = document.getElementById(this.imageId);
// Display the first frame immediately
this._displayNextFrame();
// And set a timer to display subsequent frames
this.timer = setInterval(this._displayNextFrame, this.frameInterval);
}
};

/** Stop an ImageLoop animation */
ImageLoop.prototype.stop = function () {
if (this.timer) clearInterval(this.timer);
this.timer = null;
};

</script>
<script type="text/javascript">
function de() {
var animation = new ImageLoop("loop", 1, ["img/img_01.jpg", "img/img_02.jpg",]);
var sta = document.getElementById("sta");
var stp = document.getElementById("stp");
sta.onclick = function () {
animation.start();
}
stp.onclick = function () {
animation.stop();
}
}
window.onload = function () {
de();
}
</script>
</head>
<body>
<img src="img/img_01.jpg" id="loop" alt="" title="" />
<a href="#" class="de" id="sta">Start</a>
<a href="#" class="de" id="stp">Stop</a>
</body>
</html>

相關(guān)文章

  • js獲取鼠標(biāo)位置雜談附多瀏覽器兼容代碼

    js獲取鼠標(biāo)位置雜談附多瀏覽器兼容代碼

    最近在搞一個(gè)AJAX的小功能,目的是用浮動(dòng)div框顯示當(dāng)前鼠標(biāo)下控件的詳細(xì)信息,其中獲得鼠標(biāo)位置這塊害得我走了很多冤枉路,因?yàn)閴焊鶝]有想到我下面提到的第二點(diǎn)的區(qū)別,所以我的頁面出來總是找不到我之前定義的那個(gè)div
    2008-11-11
  • async/await實(shí)現(xiàn)Promise.all()的方式

    async/await實(shí)現(xiàn)Promise.all()的方式

    Promise.all() 方法接收一個(gè) promise 的 iterable 類型的輸入,并且只返回一個(gè)Promise實(shí)例,并且輸入的所有 promise 的 resolve 回調(diào)的結(jié)果是一個(gè)數(shù)組,對(duì)async/await實(shí)現(xiàn)Promise.all()相關(guān)知識(shí)感興趣的朋友一起看看吧
    2022-12-12
  • 總結(jié)兩個(gè)Javascript的哈稀對(duì)象的一些編程技巧

    總結(jié)兩個(gè)Javascript的哈稀對(duì)象的一些編程技巧

    總結(jié)兩個(gè)Javascript的哈稀對(duì)象的一些編程技巧...
    2007-04-04
  • JavaScript高級(jí)函數(shù)應(yīng)用之分時(shí)函數(shù)實(shí)例分析

    JavaScript高級(jí)函數(shù)應(yīng)用之分時(shí)函數(shù)實(shí)例分析

    這篇文章主要介紹了JavaScript高級(jí)函數(shù)應(yīng)用之分時(shí)函數(shù),結(jié)合實(shí)例形式分析了javascript通過合理分時(shí)函數(shù)應(yīng)用避免瀏覽器卡頓或假死的相關(guān)操作技巧,需要的朋友可以參考下
    2018-08-08
  • 用document.documentElement取代document.body的原因分析

    用document.documentElement取代document.body的原因分析

    ll建議用document.documentElement代替document.body
    2009-11-11
  • 如何利用Typescript封裝本地存儲(chǔ)

    如何利用Typescript封裝本地存儲(chǔ)

    這篇文章主要給大家介紹了關(guān)于如何利用Typescript封裝本地存儲(chǔ)的相關(guān)資料,文中通過實(shí)例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2022-01-01
  • 基于JS實(shí)現(xiàn)一個(gè)可拖拽的容器布局組件

    基于JS實(shí)現(xiàn)一個(gè)可拖拽的容器布局組件

    這篇文章主要為大家詳細(xì)介紹了如何基于JavaScript實(shí)現(xiàn)一個(gè)可拖拽的容器布局組件,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2023-12-12
  • Bootstrap CSS使用方法

    Bootstrap CSS使用方法

    這篇文章主要為大家詳細(xì)介紹了Bootstrap中CSS的使用方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2016-12-12
  • 表單元素值獲取方式j(luò)s及java方式的簡單實(shí)例

    表單元素值獲取方式j(luò)s及java方式的簡單實(shí)例

    下面小編就為大家?guī)硪黄韱卧刂但@取方式j(luò)s及java方式的簡單實(shí)例。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2016-10-10
  • js日期時(shí)間格式化的方法實(shí)例

    js日期時(shí)間格式化的方法實(shí)例

    這篇文章主要給大家介紹了關(guān)于js日期時(shí)間格式化的相關(guān)資料,文中分別介紹了利用原生js以及Moment.js庫處理日期時(shí)間格式化的方法,需要的朋友可以參考下
    2021-07-07

最新評(píng)論