如何每天在午夜12点旋转图像?
我需要每天12点从一组5-10张图像中旋转一张图像。我该如何使用JavaScript或者jQuery甚至PHP来做到这一点?
解决方案
回答
如果我们正在运行linux系统,则可以设置Cron作业;如果我们在Windows上,则可以使用Windows任务计划程序
回答
也许我不明白这个问题。
如果我们只想更改映像,请编写批处理文件/ cron作业并每天运行。
如果要在星期一显示特定的图像,而在星期二显示不同的图像,请执行以下操作:
<?php switch(date('w')) { case '1': //Monday break; case '2': //Tuesday: break; ... } ?>
回答
我会在午夜后首次访问时进行操作。
回答
在基本级别上,我们要做的是定义一个图像名称数组,然后从给定的时间点开始计算天数,然后对图像数量进行模(除后除以余数)并访问该数组中的索引并设置图片,例如(未经测试的代码)
var images = new Array("image1.gif", "image2.jpg", "sky.jpg", "city.png"); var dateDiff = new Date() - new Date(2008,01,01); var imageIndex = Math.Round(dateDiff/1000/60/60/24) % images.length; document.GetElementById('imageId').setAttribute('src', images[imageIndex]);
请记住,任何客户端解决方案都将使用客户端的日期和时间,因此,如果午夜的定义意味着我们所在的时区,那么我们将需要使用PHP在服务器上执行类似的操作。
回答
我们有两个选择。
- 在JavaScript中,如果我们有7张以上的图片,则基本上可以根据星期几或者每月的某天选择一张图片。以图像数组的长度为模的月份中的某天,应该让我们选择正确的数组元素。
- 我们需要更加有状态的东西来跟踪正在发生的事情...使用SQL可以跟踪何时使用图像并从旋转列表中进行选择。我们还可以使用PHP维护的文本文件来跟踪有序列表。
过去的做法是让cron工作旋转图像,但是最近我会避免这种情况。
回答
那取决于我们如何依次,随机地旋转它们?
有很多选择。我们可以确定要在PHP中使用的图像,并动态更改<img>元素以指向正确的位置。如果我们已经在动态生成页面,则最好。
我们始终可以指向一个URL,该URL是一个PHP文件,它确定要显示的图像,然后执行302重定向。如果我们有不想产生动态生成开销的静态页面,这会更好。
不要使图像URL本身提供不同的图像。我们将无缘无故地提高缓存命中率,并在应为静态资源的情况下产生不必要的开销。
马丁,在本文中"旋转"是指"定期更改",而不是"绕轴旋转"。
回答
它取决于(TM)我们要实现的目标。只想显示一个"随机"图像?也许以下javascript代码段可以入门:
var date = new Date(); var day = date.getDate(); // thats the day of month, use getDays() for day of week document.getElementById('someImage').src = '/images/foo/bar_' + (day % 10) + '.gif';
回答
它甚至不必在cron中:
<?php // starting date for rotation $startDate = '2008-09-15'; // array of image filenames $images = array('file1.jpg','file2.jpg',...); $stamp = strtotime($startDate); $days = (time() - $stamp) / (60*60*24); $imageFilename = $images[$days % count($images)] ?> <img src="<?php echo $imageFilename; ?>"/>
回答
编辑:我完全把这个问题误读为"不使用javascript / PHP"。因此,请忽略此响应。我不会删除它,以防万一有人疯狂到想要使用此方法。
如果没有Javascript,PHP或者任何其他形式的脚本语言,则很难做到这一点。好吧,实际上,它只是非常人为设计的,因为即使使用最基本的JS / PHP,它也是微不足道的。
无论如何,要真正回答问题,我想使用普通HTML做到这一点的唯一方法是设置一个可在午夜运行的shell脚本。该脚本只会重命名文件。使用cron(在linux上)或者Windows Task Scheduler并使用类似如下的脚本来执行此操作:(遵循狡猾的伪代码,转换为我们喜欢的任何方式)。
let number_of_files = 5 rename current.jpg to number_of_files.jpg for (x = 2 to number_of_files) rename x.jpg to (x-1).jpg rename 1.jpg to current.jpg
在HTML中,只需执行以下操作:
<img src="path/to/current.jpg" />
每天,current.jpg都应该更改为新的内容。如果我们使用任何类型的缓存控件,请确保对其进行更改,以使其不会被缓存超过几个小时。
回答
我假设"旋转图像"是指"更改使用中的图像",而不是"围绕轴的旋转变换"-一种简单的方法是拥有一个哈希表,该哈希表将日模X映射到图像名称。
$imgs = array("kitten.jpg", "puppy.gif","Bob_Dole.png"); $day_index = 365 * date("Y") + date("Z") ... <img src="<? $imgs[$day_index % count($imgs)] ?>" />
(对不起,如果我语法错误,我不太了解PHP)
回答
设置图像目录。
选择七个图像并将其命名为0.jpg,1.jpg,2.jpg,3.jpg,4.jpg,5.jpg,6.jpg,
将mootools Javascript框架与ID为" rotatingimage"的HTML中的图片标记一起使用:
var d=new Date(); var utc = d.getTime() + (d.getTimezoneOffset() * 60000); var offset = -10; // set this to your locale's UTC offset var desiredTime = utc + (3600000*offset); new dd = new Date(desiredTime); $('rotatingimage').setProperty('src', dd.getDay() + '.jpg');
回答
这是一个每天从目录中选择一个随机图像的解决方案,这可能比这里发布的其他解决方案更容易,因为将所有内容添加到轮播中所要做的就是上传它,而不是编辑数组或者名称文件以任意方式。
function getImageOfTheDay() { $myDir = "path/to/images/"; // get a unique value for the day/year. // 15th Jan 2008 -> 10152008. 3 Feb -> 10342008, 31 Dec -> 13662008 $day = sprintf("1%03d%d", date('z'), date('Y')); // you could of course get gifs/pngs as well. // i'm just doing this for simplicity $jpgs = glob($myDir . "*.jpg"); mt_srand($day); return $jpgs[mt_rand(0, count($jpgs) - 1)]; }
唯一的是,有可能连续两天看到同一张图片,因为这是随机选择的。如果我们想按字母顺序顺序获取它们,则可以使用它。 (仅更改最后两行)
function getImageOfTheDay() { $myDir = "path/to/images/"; $day = sprintf("1%03d%d", date('z'), date('Y')); $jpgs = glob($myDir . "*.jpg"); return $jpgs[$day % count($jpgs)]; }
回答
已经以多种方式描述了如何旋转图像。如何检测何时触发轮换取决于我们在做什么(请澄清,人们可以提供更好的答案)。
选项包括:
- 在"午夜后首次访问"时触发旋转。假设某种启动事件(例如,用户访问权限)
- 使用操作系统调度功能来触发旋转(在* nix上为cron,在Windows上为at / task调度程序)
- 编写代码以检查时间并旋转
选项3的风险是,编码不佳的解决方案可能会占用过多的资源。