我正在尝试按特定顺序将一组预定网址加载到iframe中,并为每张幻灯片添加特定时间。
其中一个幻灯片(Events.php)指向每次刷新时显示随机内容的网址。我正在尝试使用随机数附加Events.php网址,以强制每次将其加载到iframe时重新加载。
<script>
var frames = Array(
getRandomUrl(), 5
);
var myUniqueTime = getUniqueTime;
/* Now every time you call getRandomUrl you should get back a unique url. */
function getRandomUrl()
{
return "http://www.example.com/Events.php?=" + myUniqueTime;
}
function ChangeSrc()
{
if (i >= len) { i = 0; } // start over
document.getElementById('myiframe').src = frames[i++];
return setTimeout('ChangeSrc()', (frames[i++]*1000));
}
/* We'll make a closure here that will make sure you don't get duplicates! */
function getUniqueTime(startingFrom)
{
startingFrom = startingFrom || (new Date().getTime());
return function()
{
return startingFrom++;
}
}
var i = 0, len = frames.length;
window.onload = ChangeSrc;
</script>
任何帮助或只是正确方向的一点将非常感谢! :)
谢谢, 标记
答案 0 :(得分:0)
Javascript循环和关闭令人困惑。而只是使用一个函数:
<script>
var frames = Array(getRandomUrl(), getRandomUrl(), getRandomUrl() );
alert(frames); //remove this - just shows you that it works
var i = 0, len = frames.length;
window.onload = ChangeSrc;
function getRandomUrl()
{
return "http://www.example.com/Events.php?=" + Math.floor(Math.random()*99999);
}
function ChangeSrc()
{
if (i >= len) { i = 0; } // start over
document.getElementById('myiframe').src = frames[i++];
setTimeout('ChangeSrc()', (frames[i++]*1000));
}
</script>
答案 1 :(得分:0)
我不太确定你是如何尝试这样做的,但是让我们尝试修改一下这段代码,看看我们是否可以让它工作。
首先,对变量声明进行一些更改。根据我收集的内容,您希望填写一个包含“&#39;值”的网址。 (对于一个事件,这只是一个字符串),你想要保存一个超时时间&#39; (也就是毫秒数)。现在,为了做到这一点,最好创建一个array
object
。在php中,这将是一个带有嵌套关联数组(又名array(array("a"=>"b"), array("c"=>"d"));
)的数字数组。在Javascript中,您使用new Array()
或[]
来启动数组,而不是php的array()
&#39;功能&#39;。同样,如果您调用object
或使用new Object();
,Javascript将创建{}
(或用php术语表示的关联数组)。
/* Update 3: Added this function here to get a random-isch number */
function getUniqueTime(startingFrom){
startingFrom = startingFrom || new Date().getTime();
return function(){
return startingFrom++;
}
}
var myUniqueTime = getUniqueTime();
/* Update 3: Added an easy way to get unique URLs and not confuse it with timings. */
var frames = [
{event: 'http://url.tld/?data=' + myUniqueTime(), timeout: 5000},
{event: 'http://url.tld/?data=' + myUniqueTime(), timeout: 10000},
{event: 'http://url.tld/?data=' + myUniqueTime(), timeout: 5000}
];
现在我们需要做的就是修改你的功能了。从帧数组中获取一个随机元素,然后让该元素返回您在键“事件”中保存的值。并且键中的那个&#39;超时&#39;。
/* Start with i negative so at the first increment it will become 0 and not 1. */
var i = -1;
function ChangeSrc(){
/* SCheck if i+1 is bigger than frames.length, if so go to 0, otherwise increment. */
i = i + 1 >= frames.length ? 0 : i + 1;
var myevent = frames[i];
console.log(myevent.event)
setTimeout(ChangeSrc, myevent.timeout);
}
window.onload = ChangeSrc;
最后一点是setTimeout
函数接受表示函数的变量,所以你只需将它传递给ChangeSrc而不调用它(所以没有()
)。并且它需要毫秒作为值,因此最好立即在变量中声明它们。
我仍然不能100%确定你在做什么,但是如果你想让字符串每次都不同,你可以使用新的Date()。getTime()而不是随机化。它与php strtotime(&#34; now&#34;)`函数完全相同,每次调用时字符串都保证不同。但也许封闭在这里很有用,所以也许试试这个:
/* We'll make a closure here that will make sure you don't get duplicates! */
function getUniqueTime(startingFrom){
startingFrom = startingFrom || new Date.getTime();
return function(){
return startingFrom++;
}
}
var myUniqueTime = getUniqueTime();
/* Now every time you call getRandomUrl you should get back a unique url. */
function getRandomUrl(){
return "http://www.example.com/Events.php?=" + myUniqueTime();
}
这有帮助吗?
我在原始答案中添加了随机数生成器。我已经尝试使用已经存在的代码来完成这项工作,但与我原来的答案可以轻松完成相比,它很难实现。我添加了一个代码段并更新了代码,以便更符合您的预期。
function getUniqueTime(startingFrom){
startingFrom = startingFrom || new Date().getTime();
return function(){
return startingFrom++;
}
}
var myUniqueTime = getUniqueTime();
var i = -1;
var frames = [
{event: 'http://url.tld/?data=' + myUniqueTime(), timeout: 5000},
{event: 'http://url.tld/?data=' + myUniqueTime(), timeout: 10000},
{event: 'http://url.tld/?data=' + myUniqueTime(), timeout: 5000}
];
function ChangeSrc(){
i = i + 1 >= frames.length ? 0 : i + 1;
var myevent = frames[i];
document.getElementById("console").innerHTML = document.getElementById("console").innerHTML + "<br />" + myevent.event + " (waiting " + myevent.timeout + "s)";
setTimeout(ChangeSrc, myevent.timeout);
}
window.onload = ChangeSrc;
&#13;
<div id="console"></div>
&#13;
答案 2 :(得分:0)
查询字符串的语法是:
?field1=value1[&field2=value2...]
您已省略field1
并正在使用:
?=value1
...其中value1
是随机数。
这可能不足以表明将其指定为新网址。
尝试这样的事情:
return "http://www.example.com/Events.php?rnd=" + Math.floor(Math.random()*99999);