View Full Version : Overlapping Content script Delay or Onclick

01-22-2008, 11:04 AM
1) Script Title: Drop down/ Overlapping Content script

2) Script URL (on DD): http://www.dynamicdrive.com/dynamicindex5/overlapcontent.htm

3) Describe problem: I have been going nuts trying to find information about this - I am not a javascript pro.

I would like my overlapping links in my header (see www.themebath.com) to only appear once someone has clicked on them. If this is not possible, I would at least like to have a delay in the amount of time it takes from the overlapping content to appear. I feel the way the links are now will just drive my visitors nuts. Thanks for any help you can provide!

Here are the codes I used:


//Drop Down/ Overlapping Content: http://www.dynamicdrive.com
//Last updated: Dec 19th, 07': Added ability to dynamically populate a Drop Down content using an external file (Ajax feature)

var dropdowncontent={
delaybeforehide: 200, //set delay in milliseconds before content box disappears onMouseout (1000=1 sec)
disableanchorlink: true, //when user clicks on anchor link, should it be disabled?
ajaxloadingmsg: "Loading content. Please wait...", //HTML to show while ajax page is being feched
ajaxbustcache: true, //Bust cache when fetching pages?

getposOffset:function(what, offsettype){
return (what.offsetParent)? what[offsettype]+this.getposOffset(what.offsetParent, offsettype) : what[offsettype]

isContained:function(m, e){
var e=window.event || e
var c=e.relatedTarget || ((e.type=="mouseover")? e.fromElement : e.toElement)
while (c && c!=m)try {c=c.parentNode} catch(e){c=m}
if (c==m)
return true
return false

show:function(anchorobj, subobj, e){
if (!this.isContained(anchorobj, e)){
var horizontaloffset=(subobj.dropposition[0]=="left")? -(subobj.offsetWidth-anchorobj.offsetWidth) : 0 //calculate user added horizontal offset
var verticaloffset=(subobj.dropposition[1]=="top")? -subobj.offsetHeight : anchorobj.offsetHeight //calculate user added vertical offset
subobj.style.left=this.getposOffset(anchorobj, "offsetLeft") + horizontaloffset + "px"
subobj.style.top=this.getposOffset(anchorobj, "offsetTop")+verticaloffset+"px"
subobj.style.clip=(subobj.dropposition[1]=="top")? "rect(auto auto auto 0)" : "rect(0 auto 0 0)" //hide drop down box initially via clipping
subobj.startTime=new Date().getTime()
if (typeof window["hidetimer_"+subobj.id]!="undefined") //clear timer that hides drop down box?
this.slideengine(subobj, (subobj.dropposition[1]=="top")? "up" : "down")

return (1-Math.cos(percent*Math.PI)) / 2 //return cos curve based value from a percentage input

slideengine:function(obj, direction){
var elapsed=new Date().getTime()-obj.startTime //get time animation has run
if (elapsed<obj.glidetime){ //if time run is less than specified length
var distancepercent=(direction=="down")? this.curveincrement(elapsed/obj.glidetime) : 1-this.curveincrement(elapsed/obj.glidetime)
var currentclip=(distancepercent*obj.contentheight)+"px"
obj.style.clip=(direction=="down")? "rect(0 auto "+currentclip+" 0)" : "rect("+currentclip+" auto auto 0)"
window["glidetimer_"+obj.id]=setTimeout(function(){dropdowncontent.slideengine(obj, direction)}, 10)
else{ //if animation finished
obj.style.clip="rect(0 auto auto 0)"

hide:function(activeobj, subobj, e){
if (!dropdowncontent.isContained(activeobj, e)){
}, dropdowncontent.delaybeforehide)

ajaxconnect:function(pageurl, divId){
var page_request = false
var bustcacheparameter=""
if (window.XMLHttpRequest) // if Mozilla, IE7, Safari etc
page_request = new XMLHttpRequest()
else if (window.ActiveXObject){ // if IE6 or below
try {
page_request = new ActiveXObject("Msxml2.XMLHTTP")
catch (e){
page_request = new ActiveXObject("Microsoft.XMLHTTP")
catch (e){}
return false
document.getElementById(divId).innerHTML=this.ajaxloadingmsg //Display "fetching page message"
page_request.onreadystatechange=function(){dropdowncontent.loadpage(page_request, divId)}
if (this.ajaxbustcache) //if bust caching of external page
bustcacheparameter=(pageurl.indexOf("?")!=-1)? "&"+new Date().getTime() : "?"+new Date().getTime()
page_request.open('GET', pageurl+bustcacheparameter, true)

loadpage:function(page_request, divId){
if (page_request.readyState == 4 && (page_request.status==200 || window.location.href.indexOf("http")==-1)){

init:function(anchorid, pos, glidetime){
var anchorobj=document.getElementById(anchorid)
var subobj=document.getElementById(anchorobj.getAttribute("rel"))
var subobjsource=anchorobj.getAttribute("rev")
if (subobjsource!=null && subobjsource!="")
this.ajaxconnect(subobjsource, anchorobj.getAttribute("rel"))
subobj.glidetime=glidetime || 1000
anchorobj.onmouseover=function(e){dropdowncontent.show(this, subobj, e)}
anchorobj.onmouseout=function(e){dropdowncontent.hide(subobj, subobj, e)}
if (this.disableanchorlink) anchorobj.onclick=function(){return false}
subobj.onmouseout=function(e){dropdowncontent.hide(this, subobj, e)}


<script type="text/javascript" src="dropdowncontent.js">

* Drop Down/ Overlapping Content- Dynamic Drive (www.dynamicdrive.com)
* This notice must stay intact for legal use.
* Visit http://www.dynamicdrive.com/ for full source code



<div><a class="guarantee" id="ourguarantee" href="http://www.themebath.com" rel="ourguarantee2"></a></div>

<div id="ourguarantee2" style="BORDER-RIGHT: #dedddb 1px solid; PADDING-RIGHT: 10px; BORDER-TOP: #dedddb 1px solid; PADDING-LEFT: 10px; VISIBILITY: hidden; PADDING-BOTTOM: 10px; BORDER-LEFT: #dedddb 1px solid; PADDING-TOP: 10px; BORDER-BOTTOM: #dedddb 1px solid; POSITION: absolute; BACKGROUND-COLOR: white">

<table height="293" cellspacing="0" cellpadding="0" width="290" border="0">
<td><a href="return-policy.aspx"><img alt="Learn More About Our Easy Returns Policy!" src="images/Design/New/Guarantee1.gif" border="0" /></a><br /><a href="shipping-policy.aspx"><img alt="Learn More About Our Shipping Rates!" src="images/Design/New/Guarantee2.gif" border="0" /></a> </td>

01-22-2008, 11:19 AM
Please see this thread: http://www.dynamicdrive.com/forums/showthread.php?t=28507