2010-05-03 80 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