在主页上更改图像

时间:2011-08-04 17:19:10

标签: javascript coldfusion

我需要在coldfusion主页上每24小时随机更改图像及相关标题。我有大约50个图像和标题,我不想每天手动执行此操作。你能指点我任何javascript源代码的例子吗?感谢。

我还希望能够使用灯箱放大图片。有人可以告诉我如何修改代码来做到这一点吗?

4 个答案:

答案 0 :(得分:2)

我会将其作为服务器端解决方案。

在Application范围中创建一个带有时间戳的对象(或结构)会很容易。加载页面时,将时间戳与当前时间进行比较。

如果不到24小时(或任何限制),只需使用应用程序范围对象中的信息。

如果超过24小时,请运行该过程以选择图像和标题,将其加载到对象中,并将时间戳记录到当前时间。

答案 1 :(得分:1)

脚本可以根据当天下载不同的图像。例如,在123年的一年中脚本下载123%50 - > 23.jpg图片

document.getElementById("image_id").src = parseInt(currentTime.getTime()/(1000*60*60*24))%50+".jpg";

图像每天都会改变,而不是随机改变,但我认为这个解决方案已经足够了

答案 2 :(得分:1)

给它一个(需要应用程序范围),将它放在APPLICATION.cfc的onRequestStart方法中

<cfscript>
    if( NOT structKeyExists(APPLICATION, 'homePageImage') ) {
        APPLICATION.homePageImage = structNew();
    }
    if( 
        NOT structKeyExists( APPLICATION.homePageImage, 'imageDate' )  
        OR NOT structKeyExists( APPLICATION.homePageImage, 'imageSrc')
        OR NOT isDate( APPLICATION.homePageImage.imageDate )
        OR DateDiff( "h", NOW(), APPLICATION.homePageImage.imageDate ) GT 1
    ) {
        APPLICATION.homePageImage.imageSrc = APPLICATION.Utils.getRandomImage( "/images/captions" );
        APPLICATION.homePageImage.imageDate = NOW();
    }
</cfscript>

接下来,您需要在某处定义函数getRandomImage(类似于Utils.cfc,然后将其存储在Application.Utils中以实现可重用性)

<cffunction name="getRandomImage" returntype="string" access="public" output="false">
    <cfargument name="directory" required="true" hint="this is the directory to select a random image from" />
    <!--- Always define a local struct to keep your variable under control --->
    <cfset var LOCAL = structNew() /> 

    <cfif NOT directoryExists( expandPath( ARGUMENTS.directory ) )>
        <cfthrow message="Directory #arguments.directory# does not exist." />
    </cfif>

    <cfdirectory action="list" name="LOCAL.imageList" type="file" directory="#expandPath( ARGUMENTS.directory )#" />
    <!--- the ceiling part will stop you from getting 0 --->
    <cfset LOCAL.targetFile = Ceiling( randRange(0, LOCAL.imageList.recordCount) ) /> 

    <cfset LOCAL.targetFileName = ARGUMENTS.directory & "/" & LOCAL.imageList.name[ LOCAL.targetFile ] />

    <cfreturn LOCAL.targetFileName />
</cffunction>

最后,在你的页面上

<cfoutput>
    <img src="#APPLICATION.homePageImage.ImageSrc#" />
</cfoutput>

答案 3 :(得分:0)

你真的不应该在服务器端做那些事情。如果您不打算添加图像,则可以发送当前日期时间(如果您不信任客户端计算机时间),并将其余部分保留为javascript。

oImages = [
  {time: '2011-01-01', img: 'path/to/image.ext', caption: "image caption"},
  ... more images ...
];

在页面加载时,您只需创建图像标记并根据服务器时间传递源:

window.onload = function(){
  for(i in oImages){
   if(oImages[i].time == "coldfusion_time") oTodayImage = oImages[i];
  }
  oImg = document.creatElement("img");
  oImg.setAttribute("title", oTodayImage.caption);
  oImg.setAttribute("src", oTodayImage.img);
  document.body.appenChild(oImg);
};

您只需输出服务器时间而不是if statement中的“coldfusion_time”,并硬编码javascript数组对象或输出coldfusion所需的内容。