Javascript 如何使我的横幅定期刷新到另一个随机横幅?
我有一个网站,在页面加载时显示广告横幅。我想它也改变,而有人正在查看该网站,可能在几分钟后 这是我当前使用PHP显示初始横幅的代码:Javascript 如何使我的横幅定期刷新到另一个随机横幅?,javascript,php,html,vbulletin,Javascript,Php,Html,Vbulletin,我有一个网站,在页面加载时显示广告横幅。我想它也改变,而有人正在查看该网站,可能在几分钟后 这是我当前使用PHP显示初始横幅的代码: $path = '/images/adbanners/'; $banners = array( array( 'src' => 'look.jpg', 'href' => 'http://www.example.com/look'), array( 'src' => 'see.jpg', 'href' => 'http://www
$path = '/images/adbanners/';
$banners = array(
array( 'src' => 'look.jpg',
'href' => 'http://www.example.com/look'),
array( 'src' => 'see.jpg',
'href' => 'http://www.example.com/see'),
array( 'src' => 'horse.jpg',
'href' => 'http://www.example.com'),
array( 'src' => 'scg.png',
'href' => 'https://www.example.com/scg/'),
array( 'src' => 'karen.png',
'href' => 'http://www.example.com/'karen),
);
$rnd = mt_rand(0,count($banners)-1); // Pick a random array index. They start with 0, so you have to -1.
$href = $banners[$rnd]['href']; // Link HREF
$src = $path.$banners[$rnd]['src']; // Image source
$randombanner = '<a href="'.$href.'" target="_blank" alt="example.com Sponsor!" title="example.com Sponsor!"><img border="0" src="'.$src.'" /></a>';
vB_Template::preRegister('navbar', array('randombanner' => $randombanner));
$path='/images/adbanner/;
$banners=数组(
数组('src'=>'look.jpg',
'href'=>'http://www.example.com/look'),
数组('src'=>'see.jpg',
'href'=>'http://www.example.com/see'),
数组('src'=>'horse.jpg',
'href'=>'http://www.example.com'),
数组('src'=>'scg.png',
'href'=>'https://www.example.com/scg/'),
数组('src'=>'karen.png',
'href'=>'http://www.example.com/"卡伦",,
);
$rnd=mt_rand(0,计数($banner)-1);//选择一个随机数组索引。它们以0开头,所以你必须-1。
$href=$banner[$rnd]['href'];//链接HREF
$src=$path.$banner[$rnd]['src'];//图像源
$banner='';
vB_模板::预注册('navbar',数组('randombanner'=>$randombanner));
我有一个想法,这可以通过使用JavaScript实现,但不知道从哪里开始。我不希望向站点添加jQuery之类的库,因为它还没有用于任何用途。PHP是一种服务器端语言,它的工作在页面加载时完成。然而,htmlgoodies等网站提供了一些可靠的教程,可以帮助您了解所需内容
请看本教程:使用超时。一段时间的文档在 基本上,您可以设置一个超时函数来调用您的函数,该函数在设置的毫秒数之后更改横幅
window.setTimeout(function() {
// call to function to rotate or change banner
}, ms);
这有用吗?或者您正在寻找JS中的完整示例。我建议将其他广告列表作为JSON发送,然后使用JS交换。您可以使用
setInterval
来实现这一点。如果没有jQuery,这就有点棘手了,您在站点上还有其他库吗
对于PHP,添加
$ads_json=json_encode($banners);
下面是您声明$banners数组的位置
将您的banner元素更改为具有ID,以便我们可以通过JS轻松访问它
$randombanner = '<a id="sponsor_banner" href="'.$href.'" target="_blank" alt="example.com Sponsor!" title="example.com Sponsor!"><img border="0" src="'.$src.'" /></a>';
$randombanner='';
然后添加到$randombanner html
<script>
var ads='.$ads_json.';
function swap_ad(){
var ad_el=document.getElementById("sponsor_banner");
var img=ad_el.getElementsByTagName('img')[0];
var random_ad=ads[Math.floor(Math.random()*items.length)];
ad_el.href=random_ad["href"];
img.src='.$path.'random_ad["src"];
};
window.setInterval(swap_ad,90000000);
</script>
var ads='.$ads_json';
函数交换_ad(){
var ad_el=document.getElementById(“赞助商旗帜”);
var img=ad_el.getElementsByTagName('img')[0];
var random_ad=ads[Math.floor(Math.random()*items.length)];
ad_el.href=随机广告[“href”];
img.src='.$path.'random_ad[“src”];
};
窗口设置间隔(交换间隔,90000000);
把剧本放在头上就好了。但是,将其放在元素旁边会起作用,但不确定vBulletin的限制。如果要每5分钟加载一个新的iframe,只需使用: 这将要求您在html页面上的横幅周围的
标记中添加id=“bannerId”
。您可以不用手动添加URL,也只需通过PHP注入URL,通过类似这样的方式定义全局广告
变量:
window.adverts = [
<?php
echo json_encode($banners)
?>
];
window.adverts=[
];
这会自动将$banner
变量中的所有内容放入JavaScriptadverts
变量。JS中类似于setInterval
的代码会起作用。我查看了文档中的设置超时……这不会只改变一次?@Misha可能是指至setInterval
,它是setTimeout
的重复版本。你可以查看我的答案或JAL的,以查看更详细的答案,包括setInterval
。是的,好的,我的坏的,我确实想把setInterval放进去,但我想我在考虑之前就已经打字了。设置时间间隔计时器的方法是window.setInterval。setTimeout只触发一次。很好看的家伙。嗯,看起来你和我贴的答案几乎完全一样。。。有趣的是:P@joetje590可能是因为它就是这样做的!但是我建议不要使用元素。children
,尤其是对于广告等基本功能。根据,IE(还有谁)直到第9版才支持此功能。浏览器对Element.getElementsById('img')
的支持是。@Joetje50天哪,我明白了,我不喜欢DOM方法。谢谢你的建议。在你的答案和乔伊的答案之间,我找到了答案。如果我有足够的代表,我会投你一票。谢谢你的帮助!!在你的答案和日航的答案之间,我找到了答案。如果我有足够的代表,我会投你一票。谢谢你的帮助!!没问题!顺便说一句,作为提问者,你可以通过分数下方的复选标记按钮将一个答案(你最喜欢的答案)标记为已接受。
window.adverts = [
<?php
echo json_encode($banners)
?>
];