2010-05-03 41 views
1

這與我前幾天詢問的問題非常相似,但是我的頁面代碼變得非常複雜,我需要重新訪問它。我已經使用以下代碼:設置一段時間的顯示圖像和腳本

$('#myLink').click(function() { 
    $('#myImg').attr('src', 'newImg.jpg'); 
    setTimeout(function() { $('#myImg').attr('src', 'oldImg.jpg'); }, 15000); 
}); 

要設定的時間週期(15秒)鏈接被點擊時,然後在15秒後,恢復到原來的圖像替換圖像。

但是現在,我想運行一個JavaScript代碼片段,當鏈接被點擊(除了替換圖片),並且只有當鏈接被點擊(它與第15張圖片相關)和然後讓js代碼在15秒後消失......但是我不確定如何讓jquery將js代碼發送到頁面中......基本上我只是希望jQuery將該代碼「回顯」到頁面底部雖然我在那裏15秒,但我不知道jQuery如何格式化這個「回聲」。

這個問題有意義嗎?

interval = 500; 
    imgsrc = "webcam/image.jpg"; 

    function Refresh() { 
    tmp = new Date(); 
    tmp = "?" + tmp.getTime(); 
    document.images["image1"].src = imgsrc + tmp; 
    setTimeout("Refresh()", interval); 
    } 

    Refresh(); 

這是一個攝像頭的腳本。基本上它每半秒鐘拍攝一張新照片並將其替換在頁面上。你必須原諒我,我是jquery的新手,我不知道如何讓這個腳本在jQuery環境下工作。

+0

你想*顯示*或*執行*一些JS代碼? – BalusC 2010-05-03 00:43:26

+0

我不明白。您已經擁有一個僅在鏈接被點擊時才運行的功能(上圖)。你有什麼理由不能做你需要的功能嗎?它會做什麼? – user113716 2010-05-03 00:44:19

+0

那麼,你的「按鈕」基本上打開/關閉自動刷新?點擊「開啓」應該打開它15秒,此時它會自動停止刷新(並且#myImg會回到原來的src)? – timdev 2010-05-03 01:05:04

回答

2

如果要間隔運行某些操作,請使用setInterval(),與setTimeout()類似。

如果將setInterval()分配給變量,則可以使用該變量來「清除」該變量。在你的setTimeout()函數中這樣做。

$('#myLink').click(function() { 
    // Start setInterval which runs a function every n seconds, and assign it to a variable 
    var runningInterval = setInterval(function() {...}, 500); 

    $('#myImg').attr('src', 'newImg.jpg'); 

    // After 15 seconds, clear the runningInterval, and reset the image. 
    setTimeout(function() { clearInterval(runningInterval); $('#myImg').attr('src', 'oldImg.jpg'); }, 15000); 
}); 

編輯:

好了,所以,在這裏它與你的代碼。

interval = 500; 
    imgsrc = "webcam/image.jpg"; 

    // Is this function getting called? 
    function Refresh() { 
    tmp = new Date(); 
    tmp = "?" + tmp.getTime(); 

     // You could use jQuery here, just like below. 
    document.images["image1"].src = imgsrc + tmp; 
    } 

    $('#myLink').click(function() { 
     // Start setInterval which runs your Refresh function every 0.5 seconds, and assign it to a variable 
     var runningInterval = setInterval(Refresh, interval); 

     // Display new image 
     // This line may be unnecessary if the Refresh() function is loading it anyway. 
     $('#myImg').attr('src', 'newImg.jpg'); 

     // After 15 seconds, clear the runningInterval, and reset the image. 
     setTimeout(function() { clearInterval(runningInterval); $('#myImg').attr('src', 'oldImg.jpg'); }, 15000); 

     return false; 
    }); 
+0

我試過這個,我覺得它真的很接近工作。但並不完全。我必須澄清。上面代碼中的「#myLink」是圍繞「舊圖像」的錨標籤。所以你點擊靜態圖像,並將其替換爲現場攝像頭。飼料,這是網絡攝像頭/ image.jpg ...基本上「newImg.jpg」是這個攝像頭圖像。然後在15秒後,原來的「舊圖像」靜態圖像再次出現,您可以再次點擊...等等......這是否有意義? – goddamnyouryan 2010-05-03 05:43:40

+0

那麼,只要你的'Refresh()'函數正常工作,這似乎是正確的。我會在「click」事件的底部添加一行。這就是'return false;',以便錨點不會嘗試加載頁面。有什麼具體的東西在這裏不起作用嗎?你的'Refresh()'每0.5秒調用一次嗎? – user113716 2010-05-03 11:23:38

0

這可能取決於代碼的作用。

不要以頁面源代碼來思考。根據DOM考慮。

這很可能是您要注入的JavaScript處理某種事件(它是一個事件處理程序)。因此,在初始點擊時,您想要將該函數綁定(附加)到適當的事件,然後將其解除綁定到setTimeout函數中。

如果你不想啓用/禁用某些行爲,那麼我們可以使用更多關於你的臨時javascript是如何提供更好的指導的信息。

+0

我已經發布了我在答案中使用的代碼。 – goddamnyouryan 2010-05-03 00:50:20

1

因此,像:

var original_url = ''; 
var second_url = 'http://example.com/path/to/image.jpg'; 
var delay_in_milliseconds = 15000 

function resetImage() { 
    $('#myImg').attr('src', original_url); 
} 

$(document).ready(function() { 
    original_url = $('#myImg').attr('src'); 
    $('#myImg').attr('src', second_url); 
    setTimeout(resetImage, delay_in_milliseconds) 
}); 

假設此標記:

<img id="myImg" src="another/path/to/another/image.jpg" /> 

我想我理解你的問題,但隨時,如果你認爲它需要它來修改它。

+0

我遇到的問題是我的上面(在我的問題中)javascript顯示原始圖像時正在運行,但我只希望它在顯示15秒的新圖像時運行。 – goddamnyouryan 2010-05-03 01:38:57

+0

我並不真正瞭解事件發生的順序和頻率。混亂。 :-( – artlung 2010-05-03 02:32:27

+0

)對不起,我解釋不好,這就是我需要發生的,一步一步 1)用戶進入該頁面,並且有一個靜態圖像顯示「點擊這裏查看網絡攝像機」 2)用戶點擊圖片 3)圖片被替換爲實時網絡攝像頭圖像,每隔0.5秒刷新我的問題中的第二個腳本。 4)15秒後,現場攝像頭恢復到靜態圖像說:「點擊此處查看攝像頭」 這是我婉攝像頭刷新腳本運行的15秒間隔期間是ONLY,否則就浪費了一個元素帶寬甚至沒有顯示。 對不起 – goddamnyouryan 2010-05-03 02:40:28