如何每天在午夜12点旋转图像?

时间:2020-03-05 18:54:23  来源:igfitidea点击:

我需要每天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的风险是,编码不佳的解决方案可能会占用过多的资源。