Reputation: 1
I'm using this script for collapsible divs...
Everything's working fine but I need to add an image for show/hide state. When the div is showing the header displays an "open" arrow...when closed it displays a "closed" arrow. Any help is really appreciated!! Thanks :)
Here's the JS...
var timerlen = 5;
var slideAniLen = 250;
var timerID = new Array();
var startTime = new Array();
var obj = new Array();
var endHeight = new Array();
var moving = new Array();
var dir = new Array();
function slidedown(objname){
if(moving[objname])
return;
if(document.getElementById(objname).style.display != "none")
return; // cannot slide down something that is already visible
moving[objname] = true;
dir[objname] = "down";
startslide(objname);
}
function slideup(objname){
if(moving[objname])
return;
if(document.getElementById(objname).style.display == "none")
return; // cannot slide up something that is already hidden
moving[objname] = true;
dir[objname] = "up";
startslide(objname);
}
function startslide(objname){
obj[objname] = document.getElementById(objname);
endHeight[objname] = parseInt(obj[objname].style.height);
startTime[objname] = (new Date()).getTime();
if(dir[objname] == "down"){
obj[objname].style.height = "1px";
}
obj[objname].style.display = "block";
timerID[objname] = setInterval('slidetick(\'' + objname + '\');',timerlen);
}
function slidetick(objname){
var elapsed = (new Date()).getTime() - startTime[objname];
if (elapsed > slideAniLen)
endSlide(objname)
else {
var d =Math.round(elapsed / slideAniLen * endHeight[objname]);
if(dir[objname] == "up")
d = endHeight[objname] - d;
obj[objname].style.height = d + "%";
}
return;
}
function endSlide(objname){
clearInterval(timerID[objname]);
if(dir[objname] == "up")
obj[objname].style.display = "none";
obj[objname].style.height = endHeight[objname] + "%";
delete(moving[objname]);
delete(timerID[objname]);
delete(startTime[objname]);
delete(endHeight[objname]);
delete(obj[objname]);
delete(dir[objname]);
return;
}
function toggleSlide(objname){
if(document.getElementById(objname).style.display == "none"){
// div is hidden, so let's slide down
slidedown(objname);
}else{
// div is not hidden, so slide up
slideup(objname);
}
}
Upvotes: 0
Views: 772
Reputation: 3897
var button = document.getElementById('button_div_id)
function slidedown(objname){
button.style.background = 'image/path.jpg
put the same in your slideup, just set the path to the image you want.
or write a function like this...
function toggle_visibility() {
var d = document.getElementById('slidedown');
var u = document.getElementById('slideup');
if(d.style.display == 'block') {
d.style.display = 'none';
u.style.display = 'block'
}
else {
d.style.display = 'block';
u.style.display = 'none';
}
}
and have each image div floated so that when one dissapears, the other will take it's place. you'll need to have the slideup set to
display: none;
and slidedown to
display: block;
and then if you put put the function in the onclick for the tag, it should do what you want it to. so...
<div id="slideup" onclick="toggle_visibility();">
Upvotes: 1