vladijazz
09-25-2008, 12:20 AM
Hi! I'm wondering if somebody here could help me please. I'm trying to develope the image slideshow using PHP and JavaScript. The idea is that the PHP file gets random images from the folder, i'm using session to prevent repeating the same image and then JavaScript generates the fade slideshow using that PHP file. I've come up with the solution to use two img tags in the HTML page, so JavaScript then swap them around and play with opacity, but unfortunately couldn't make it work. Everything I have tried in JavaScript didn't work properly. I'd be grateful for any help and advice guys. Thank you.
My PHP code:
<?php
class images {
var $images = Array();
var $imgDir = 'images/';
function getImages() {
$images = Array();
if ($dir = opendir($this->imgDir)) {
while(($file = readdir($dir)) !== false) {
if(preg_match('#(\.jpg$)|(\.png$)|(\.jpeg$)|(\.gif$)#i', $file)) $images[] = $file;
}
closedir($dir);
}
return $images;
}
function getNextImage() {
if (($images = $this->getImages()) !== false) {
session_start();
if (!isset($_SESSION['image'], $images[$_SESSION['image']])) {
$index = mt_rand(0, count($images)-1);
} else {
$index = $_SESSION['image'] == count($images)-1 ? 0 : $_SESSION['image']+1;
}
$_SESSION['image'] = $index;
return $images[$index];
}
return false;
}
function outputImage() {
if (($file = $this->getNextImage()) !== false) {
header('Cache-Control: no-cache, must-revalidate'); // HTTP/1.1
header('Expires: Wed, 9 Dec 1981 07:00:00 GMT'); // Date in the past
header('Content-type: image/jpg');
readfile($this->imgDir.$file);
exit();
}
}
}
$img = new images();
$img->outputImage();
?>
My HTML page:
<html>
<head>
<title>Images</title>
<link rel="stylesheet" type="text/css" href="css/style.css" />
<script type="text/javascript" src="javascript/slideshow2.js" language="javascript"></script>
</head>
<body onload="startSlideShow();">
<h1>Images</h1>
<div id="imageWrap">
<div id="images">
<img id="sampleImgFade" src="images.php" alt="images" style="filter:progid:DXImageTransform.Microsoft.alpha(opacity=0);-moz-opacity:0;-khtml-opacity:0;" width="800" height="600" onload="coverLoaded(this);" />
<img id="sampleImg" src="images.php" width="800" height="600" alt="images" onload="mainLoaded();" />
</div>
</div>
</body>
</html>
CSS code:
#imageWrap {
clear: both;
}
#images {
position: relative;
clear: both;
}
#sampleImgFade {
position: absolute;
top: 0px;
left: 0px;
}
JavaScript code which doesn't work properly(just to show in which direction I'm going):
var img;
var loaded = new Array();
loaded['start'] = true;
loaded['main'] = false;
loaded['cover'] = true;
var fade = 0;
var i = 0;
function getImage() {
img = new image();
img.src = "images.php";
}
function coverLoaded(obj) {
loaded['cover'] = true;
setOpacity(obj, 100);
window.setTimeout("startFade", 5000);
}
function mainLoaded() {
loaded['main'] = true;
if (loaded['start'] && loaded['cover'] && loaded['main']) startFade();
}
function startFade() {
loaded['start'] = false;
loaded['main'] = false;
loaded['cover'] = false;
fade = window.setInterval("fadeIn()", 50);
}
function fadeIn() {
var obj = document.getElementById("sampleImgFade");
var opacity = getOpacity(obj);
if (opacity > 0) {
setOpacity(obj, opacity-5);
} else {
window.clearInterval(fade);
document.getElementById("sampleImg").src = "images.php?u="+i++;
}
}
function getOpacity(obj) {
if (obj.filters) {
return obj.filters.item("DXImageTransform.Microsoft.Alpha").Opacity;
} else if (obj.style.MozOpacity) { // mozilla
return obj.style.MozOpacity*100;
} else if (obj.style.KhtmlOpacity) { // konquerer
return obj.style.KhtmlOpacity;
} else { // not supported
return 0;
}
}
function setOpacity(obj, opacity) {
if (obj.filters) {
obj.filters.item("DXImageTransform.Microsoft.Alpha").Opacity = opacity;
} else if (obj.style.MozOpacity) { // mozilla
obj.style.MozOpacity = opacity/100;
} else if (obj.style.KhtmlOpacity) { // konquerer
obj.style.KhtmlOpacity = opacity;
}
}
My PHP code:
<?php
class images {
var $images = Array();
var $imgDir = 'images/';
function getImages() {
$images = Array();
if ($dir = opendir($this->imgDir)) {
while(($file = readdir($dir)) !== false) {
if(preg_match('#(\.jpg$)|(\.png$)|(\.jpeg$)|(\.gif$)#i', $file)) $images[] = $file;
}
closedir($dir);
}
return $images;
}
function getNextImage() {
if (($images = $this->getImages()) !== false) {
session_start();
if (!isset($_SESSION['image'], $images[$_SESSION['image']])) {
$index = mt_rand(0, count($images)-1);
} else {
$index = $_SESSION['image'] == count($images)-1 ? 0 : $_SESSION['image']+1;
}
$_SESSION['image'] = $index;
return $images[$index];
}
return false;
}
function outputImage() {
if (($file = $this->getNextImage()) !== false) {
header('Cache-Control: no-cache, must-revalidate'); // HTTP/1.1
header('Expires: Wed, 9 Dec 1981 07:00:00 GMT'); // Date in the past
header('Content-type: image/jpg');
readfile($this->imgDir.$file);
exit();
}
}
}
$img = new images();
$img->outputImage();
?>
My HTML page:
<html>
<head>
<title>Images</title>
<link rel="stylesheet" type="text/css" href="css/style.css" />
<script type="text/javascript" src="javascript/slideshow2.js" language="javascript"></script>
</head>
<body onload="startSlideShow();">
<h1>Images</h1>
<div id="imageWrap">
<div id="images">
<img id="sampleImgFade" src="images.php" alt="images" style="filter:progid:DXImageTransform.Microsoft.alpha(opacity=0);-moz-opacity:0;-khtml-opacity:0;" width="800" height="600" onload="coverLoaded(this);" />
<img id="sampleImg" src="images.php" width="800" height="600" alt="images" onload="mainLoaded();" />
</div>
</div>
</body>
</html>
CSS code:
#imageWrap {
clear: both;
}
#images {
position: relative;
clear: both;
}
#sampleImgFade {
position: absolute;
top: 0px;
left: 0px;
}
JavaScript code which doesn't work properly(just to show in which direction I'm going):
var img;
var loaded = new Array();
loaded['start'] = true;
loaded['main'] = false;
loaded['cover'] = true;
var fade = 0;
var i = 0;
function getImage() {
img = new image();
img.src = "images.php";
}
function coverLoaded(obj) {
loaded['cover'] = true;
setOpacity(obj, 100);
window.setTimeout("startFade", 5000);
}
function mainLoaded() {
loaded['main'] = true;
if (loaded['start'] && loaded['cover'] && loaded['main']) startFade();
}
function startFade() {
loaded['start'] = false;
loaded['main'] = false;
loaded['cover'] = false;
fade = window.setInterval("fadeIn()", 50);
}
function fadeIn() {
var obj = document.getElementById("sampleImgFade");
var opacity = getOpacity(obj);
if (opacity > 0) {
setOpacity(obj, opacity-5);
} else {
window.clearInterval(fade);
document.getElementById("sampleImg").src = "images.php?u="+i++;
}
}
function getOpacity(obj) {
if (obj.filters) {
return obj.filters.item("DXImageTransform.Microsoft.Alpha").Opacity;
} else if (obj.style.MozOpacity) { // mozilla
return obj.style.MozOpacity*100;
} else if (obj.style.KhtmlOpacity) { // konquerer
return obj.style.KhtmlOpacity;
} else { // not supported
return 0;
}
}
function setOpacity(obj, opacity) {
if (obj.filters) {
obj.filters.item("DXImageTransform.Microsoft.Alpha").Opacity = opacity;
} else if (obj.style.MozOpacity) { // mozilla
obj.style.MozOpacity = opacity/100;
} else if (obj.style.KhtmlOpacity) { // konquerer
obj.style.KhtmlOpacity = opacity;
}
}