Results 1 to 4 of 4

Thread: Rich HTML Balloon Tooltip with Delay

  1. #1
    Join Date
    Oct 2007
    Posts
    4
    Thanks
    0
    Thanked 0 Times in 0 Posts

    Default Rich HTML Balloon Tooltip with Delay

    1) Script Title: Rich HTML Balloon Tooltip

    2) Script URL (on DD):
    http://www.dynamicdrive.com/dynamici...oontooltip.htm

    3) Describe problem:
    I just have started to use this tooltip and it's great. I was wondering if someone can help adding a delay when the tooltip is shown, instead when it's hidden. I've tried with the setTimeOut function with no results.

    What I need is to show the tooltip after x seconds, but only if you don't do a mouseout event.

    Thanks in advanced, and sorry if my English is no Ok
    Last edited by Cris; 10-09-2007 at 07:31 AM.

  2. #2
    Join Date
    Oct 2007
    Posts
    4
    Thanks
    0
    Thanked 0 Times in 0 Posts

    Default

    I`ve tried changing the onmouseover in the initalizetooltip function like this

    Code:
    all_links[i].onmouseover=function(e){
            var evtobj=window.event? window.event : e;
    	var t = this;
    	setTimeout(function(){displayballoontip(t,evtobj);},3000);
    }
    but it only works in firefox, not in IE6. Any help?

  3. #3
    Join Date
    Oct 2007
    Posts
    4
    Thanks
    0
    Thanked 0 Times in 0 Posts

    Default

    I've made some advances, and it works exactly as I wanted in Firefox, but there is a javascript error in IE6 in the line marked in red

    Any help will be apreciated

    Code:
    //Rich HTML Balloon Tooltip: http://www.dynamicdrive.com/dynamicindex5/balloontooltip.htm
    //Created: September 10th, 2006
    
    var disappeardelay=0  //tooltip disappear delay (in miliseconds)
    var verticaloffset=0 //vertical offset of tooltip from anchor link, if any
    var enablearrowhead=1 //0 or 1, to disable or enable the arrow image
    var arrowheadimg=["arrowdown.gif", "arrowup.gif"] //path to down and up arrow images
    var arrowheadheight=11 //height of arrow image (amount to reveal)
    
    /////No further editting needed
    
    var shown = false
    var ask = false
    
    
    var ie=document.all
    var ns6=document.getElementById&&!document.all
    verticaloffset=(enablearrowhead)? verticaloffset+arrowheadheight : verticaloffset
    
    function getposOffset(what, offsettype){
    	var totaloffset=(offsettype=="left")? what.offsetLeft : what.offsetTop;
    	var parentEl=what.offsetParent;
    	while (parentEl!=null){
    		totaloffset=(offsettype=="left")? totaloffset+parentEl.offsetLeft : totaloffset+parentEl.offsetTop;
    		parentEl=parentEl.offsetParent;
    	}
    	return totaloffset;
    }
    
    function showhide(obj, e){
    	dropmenuobj.style.left=dropmenuobj.style.top="-500px"
    
    	if (e.type=="mouseover")		obj.visibility="visible"
    }
    
    function iecompattest(){
    	return (document.compatMode && document.compatMode!="BackCompat")? document.documentElement : document.body
    }
    
    function clearbrowseredge(obj, whichedge){
    	if (whichedge=="rightedge"){
    		edgeoffsetx=0
    		var windowedge=ie && !window.opera? iecompattest().scrollLeft+iecompattest().clientWidth-15 : window.pageXOffset+window.innerWidth-15
    		dropmenuobj.contentmeasure=dropmenuobj.offsetWidth
    		if (windowedge-dropmenuobj.x < dropmenuobj.contentmeasure)
    			edgeoffsetx=dropmenuobj.contentmeasure-obj.offsetWidth
    		return edgeoffsetx
    	}
    	else{
    		edgeoffsety=0
    		var topedge=ie && !window.opera? iecompattest().scrollTop : window.pageYOffset
    		var windowedge=ie && !window.opera? iecompattest().scrollTop+iecompattest().clientHeight-15 : window.pageYOffset+window.innerHeight-18
    		dropmenuobj.contentmeasure=dropmenuobj.offsetHeight
    		if (windowedge-dropmenuobj.y < dropmenuobj.contentmeasure) //move up?
    			edgeoffsety=dropmenuobj.contentmeasure+obj.offsetHeight+(verticaloffset*2)
    		return edgeoffsety
    	}
    }
    
    function displayballoontip(obj, e){ //main ballooon tooltip function
    	shown=true
    
    	if (window.event) event.cancelBubble=true
    	else if (e.stopPropagation) e.stopPropagation()
    	if (typeof dropmenuobj!="undefined") //hide previous tooltip?
    		dropmenuobj.style.visibility="hidden"
    	clearhidemenu()
    	//obj.onmouseout=delayhidemenu
    	dropmenuobj=document.getElementById(obj.getAttribute("rel"))
    
    	showhide(dropmenuobj.style, e)
    	dropmenuobj.x=getposOffset(obj, "left")
    	dropmenuobj.y=getposOffset(obj, "top")+verticaloffset
    	dropmenuobj.style.left=dropmenuobj.x-clearbrowseredge(obj, "rightedge")+"px"
    	dropmenuobj.style.top=dropmenuobj.y-clearbrowseredge(obj, "bottomedge")+obj.offsetHeight+"px"
    	if (enablearrowhead)
    		displaytiparrow()
    }
    
    function displaytiparrow(){ //function to display optional arrow image associated with tooltip
    	tiparrow=document.getElementById("arrowhead")
    	tiparrow.src=(edgeoffsety!=0)? arrowheadimg[0] : arrowheadimg[1]
    	var ieshadowwidth=(dropmenuobj.filters && dropmenuobj.filters[0])? dropmenuobj.filters[0].Strength-1 : 0
    	//modify "left" value depending on whether there's no room on right edge of browser to display it, respectively
    	tiparrow.style.left=(edgeoffsetx!=0)? parseInt(dropmenuobj.style.left)+dropmenuobj.offsetWidth-tiparrow.offsetWidth-10+"px" : parseInt(dropmenuobj.style.left)+5+"px"
    	//modify "top" value depending on whether there's no room on right edge of browser to display it, respectively
    	tiparrow.style.top=(edgeoffsety!=0)? parseInt(dropmenuobj.style.top)+dropmenuobj.offsetHeight-tiparrow.offsetHeight-ieshadowwidth+arrowheadheight+"px" : parseInt(dropmenuobj.style.top)-arrowheadheight+"px"
    	tiparrow.style.visibility="visible"
    }
    
    function delayhidemenu(){
    	
    	if(shown){
    		delayhide=setTimeout("dropmenuobj.style.visibility='hidden'; dropmenuobj.style.left=0; if (enablearrowhead) tiparrow.style.visibility='hidden'",disappeardelay)
    		shown = false;
    		ask = false
    	}
    	else if(ask)
    	{
    		ask = false
    		if (typeof delayshow!="undefined"){
    			clearTimeout(delayshow);
    		}
    		
    	}
    }
    
    function clearhidemenu(){
    	if (typeof delayhide!="undefined")
    		clearTimeout(delayhide)
    }
    
    function reltoelement(linkobj){ //tests if a link has "rel" defined and it's the ID of an element on page
    	var relvalue=linkobj.getAttribute("rel")
    	return (relvalue!=null && relvalue!="" && document.getElementById(relvalue)!=null && document.getElementById(relvalue).className=="balloonstyle")? true : false
    }
    
    function initalizetooltip(){
    	var all_links=document.getElementsByTagName("a")
    	if (enablearrowhead){
    		tiparrow=document.createElement("img")
    		tiparrow.setAttribute("src", arrowheadimg[0])
    		tiparrow.setAttribute("id", "arrowhead")
    		document.body.appendChild(tiparrow)
    	}
    	for (var i=0; i<all_links.length; i++){
    		if (reltoelement(all_links[i])){ //if link has "rel" defined and it's the ID of an element on page
    			all_links[i].onmouseover=function(e){
    				var evtobj=window.event? window.event : e;
    				var t = this;
    				ask = true
    				delayshow = setTimeout(function(){displayballoontip(t,evtobj);},3000);
    			}
    			all_links[i].onmouseout=delayhidemenu
    		}
    	}
    }
    
    
    if (window.addEventListener)
    	window.addEventListener("load", initalizetooltip, false)
    else if (window.attachEvent)
    	window.attachEvent("onload", initalizetooltip)
    else if (document.getElementById)
    	window.onload=initalizetooltip

  4. #4
    Join Date
    Oct 2007
    Posts
    4
    Thanks
    0
    Thanked 0 Times in 0 Posts

    Default

    I've made some advances, and it works exactly as I wanted in Firefox, but there is a javascript error in IE6 in the line marked in red

    Any help will be apreciated

    balloontip.js
    Code:
    //Rich HTML Balloon Tooltip: http://www.dynamicdrive.com/dynamicindex5/balloontooltip.htm
    //Created: September 10th, 2006
    
    var disappeardelay=0  //tooltip disappear delay (in miliseconds)
    var verticaloffset=0 //vertical offset of tooltip from anchor link, if any
    var enablearrowhead=1 //0 or 1, to disable or enable the arrow image
    var arrowheadimg=["arrowdown.gif", "arrowup.gif"] //path to down and up arrow images
    var arrowheadheight=11 //height of arrow image (amount to reveal)
    
    /////No further editting needed
    
    var shown = false
    var ask = false
    
    
    var ie=document.all
    var ns6=document.getElementById&&!document.all
    verticaloffset=(enablearrowhead)? verticaloffset+arrowheadheight : verticaloffset
    
    function getposOffset(what, offsettype){
    	var totaloffset=(offsettype=="left")? what.offsetLeft : what.offsetTop;
    	var parentEl=what.offsetParent;
    	while (parentEl!=null){
    		totaloffset=(offsettype=="left")? totaloffset+parentEl.offsetLeft : totaloffset+parentEl.offsetTop;
    		parentEl=parentEl.offsetParent;
    	}
    	return totaloffset;
    }
    
    function showhide(obj, e){
    	dropmenuobj.style.left=dropmenuobj.style.top="-500px"
    
    	if (e.type=="mouseover")		obj.visibility="visible"
    }
    
    function iecompattest(){
    	return (document.compatMode && document.compatMode!="BackCompat")? document.documentElement : document.body
    }
    
    function clearbrowseredge(obj, whichedge){
    	if (whichedge=="rightedge"){
    		edgeoffsetx=0
    		var windowedge=ie && !window.opera? iecompattest().scrollLeft+iecompattest().clientWidth-15 : window.pageXOffset+window.innerWidth-15
    		dropmenuobj.contentmeasure=dropmenuobj.offsetWidth
    		if (windowedge-dropmenuobj.x < dropmenuobj.contentmeasure)
    			edgeoffsetx=dropmenuobj.contentmeasure-obj.offsetWidth
    		return edgeoffsetx
    	}
    	else{
    		edgeoffsety=0
    		var topedge=ie && !window.opera? iecompattest().scrollTop : window.pageYOffset
    		var windowedge=ie && !window.opera? iecompattest().scrollTop+iecompattest().clientHeight-15 : window.pageYOffset+window.innerHeight-18
    		dropmenuobj.contentmeasure=dropmenuobj.offsetHeight
    		if (windowedge-dropmenuobj.y < dropmenuobj.contentmeasure) //move up?
    			edgeoffsety=dropmenuobj.contentmeasure+obj.offsetHeight+(verticaloffset*2)
    		return edgeoffsety
    	}
    }
    
    function displayballoontip(obj, e){ //main ballooon tooltip function
    	shown=true
    
    	if (window.event) event.cancelBubble=true
    	else if (e.stopPropagation) e.stopPropagation()
    	if (typeof dropmenuobj!="undefined") //hide previous tooltip?
    		dropmenuobj.style.visibility="hidden"
    	clearhidemenu()
    	//obj.onmouseout=delayhidemenu
    	dropmenuobj=document.getElementById(obj.getAttribute("rel"))
    
    	showhide(dropmenuobj.style, e)
    	dropmenuobj.x=getposOffset(obj, "left")
    	dropmenuobj.y=getposOffset(obj, "top")+verticaloffset
    	dropmenuobj.style.left=dropmenuobj.x-clearbrowseredge(obj, "rightedge")+"px"
    	dropmenuobj.style.top=dropmenuobj.y-clearbrowseredge(obj, "bottomedge")+obj.offsetHeight+"px"
    	if (enablearrowhead)
    		displaytiparrow()
    }
    
    function displaytiparrow(){ //function to display optional arrow image associated with tooltip
    	tiparrow=document.getElementById("arrowhead")
    	tiparrow.src=(edgeoffsety!=0)? arrowheadimg[0] : arrowheadimg[1]
    	var ieshadowwidth=(dropmenuobj.filters && dropmenuobj.filters[0])? dropmenuobj.filters[0].Strength-1 : 0
    	//modify "left" value depending on whether there's no room on right edge of browser to display it, respectively
    	tiparrow.style.left=(edgeoffsetx!=0)? parseInt(dropmenuobj.style.left)+dropmenuobj.offsetWidth-tiparrow.offsetWidth-10+"px" : parseInt(dropmenuobj.style.left)+5+"px"
    	//modify "top" value depending on whether there's no room on right edge of browser to display it, respectively
    	tiparrow.style.top=(edgeoffsety!=0)? parseInt(dropmenuobj.style.top)+dropmenuobj.offsetHeight-tiparrow.offsetHeight-ieshadowwidth+arrowheadheight+"px" : parseInt(dropmenuobj.style.top)-arrowheadheight+"px"
    	tiparrow.style.visibility="visible"
    }
    
    function delayhidemenu(){
    	
    	if(shown){
    		delayhide=setTimeout("dropmenuobj.style.visibility='hidden'; dropmenuobj.style.left=0; if (enablearrowhead) tiparrow.style.visibility='hidden'",disappeardelay)
    		shown = false;
    		ask = false
    	}
    	else if(ask)
    	{
    		ask = false
    		if (typeof delayshow!="undefined"){
    			clearTimeout(delayshow);
    		}
    		
    	}
    }
    
    function clearhidemenu(){
    	if (typeof delayhide!="undefined")
    		clearTimeout(delayhide)
    }
    
    function reltoelement(linkobj){ //tests if a link has "rel" defined and it's the ID of an element on page
    	var relvalue=linkobj.getAttribute("rel")
    	return (relvalue!=null && relvalue!="" && document.getElementById(relvalue)!=null && document.getElementById(relvalue).className=="balloonstyle")? true : false
    }
    
    function initalizetooltip(){
    	var all_links=document.getElementsByTagName("a")
    	if (enablearrowhead){
    		tiparrow=document.createElement("img")
    		tiparrow.setAttribute("src", arrowheadimg[0])
    		tiparrow.setAttribute("id", "arrowhead")
    		document.body.appendChild(tiparrow)
    	}
    	for (var i=0; i<all_links.length; i++){
    		if (reltoelement(all_links[i])){ //if link has "rel" defined and it's the ID of an element on page
    			all_links[i].onmouseover=function(e){
    				var evtobj=window.event? window.event : e;
    				var t = this;
    				ask = true
    				delayshow = setTimeout(function(){displayballoontip(t,evtobj);},3000);
    			}
    			all_links[i].onmouseout=delayhidemenu
    		}
    	}
    }
    
    
    if (window.addEventListener)
    	window.addEventListener("load", initalizetooltip, false)
    else if (window.attachEvent)
    	window.attachEvent("onload", initalizetooltip)
    else if (document.getElementById)
    	window.onload=initalizetooltip

Bookmarks

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •