Monday, March 18, 2013

My simple tool tip on mouse over and mouse click

Create a tooltip.js file.

function ToolTip(id,isAnimated,aniSpeed)
{ var isInit = -1;
  var frm,divWidth,divHeight;
  var xincr=10,yincr=10;
  var animateToolTip =false;
  var html;
  
  function Init(id)
  {
   frm = document.getElementById(id);
   if(frm==null) return;
   
   if((frm.style.width=="" || frm.style.height==""))
   {alert("Both width and height must be set");
   return;}
   
   divWidth = parseInt(frm.style.width);
   divHeight= parseInt(frm.style.height);
   if(frm.style.overflow!="hidden")frm.style.overflow="hidden";
   if(frm.style.display!="none")frm.style.display="none";
   if(frm.style.position!="absolute")frm.style.position="absolute";
   
   if(isAnimated && aniSpeed>0)
   {xincr = parseInt(divWidth/aniSpeed);
    yincr = parseInt(divHeight/aniSpeed);
    animateToolTip = true;
    }
        
   isInit++; 
   
  }
  
    
  this.Show =  function(e,srcpath)
  {
    if(isInit<0) return;
    
    var newPosx,newPosy,height,width;
    if(typeof( document.documentElement.clientWidth ) == 'number' ){
    width = document.body.clientWidth;
    height = document.body.clientHeight;}
    else
    {
    width = parseInt(window.innerWidth);
    height = parseInt(window.innerHeight);
    
    }
    var curPosx = (e.x)?parseInt(e.x):parseInt(e.clientX);
    var curPosy = (e.y)?parseInt(e.y):parseInt(e.clientY);
    
    frm.src=srcpath;
    
    if((curPosx+divWidth+10)< width)
    newPosx= curPosx+10;
    else
    newPosx = curPosx-divWidth;

    if((curPosy+divHeight)< height)
    newPosy= curPosy;
    else
    newPosy = curPosy-divHeight-10;

   if(window.pageYOffset)
   { newPosy= newPosy+ window.pageYOffset;
     newPosx = newPosx + window.pageXOffset;}
   else
   { newPosy= newPosy+ document.body.scrollTop;
     newPosx = newPosx + document.body.scrollLeft;}

    frm.style.display='block';
    //debugger;
    //alert(document.body.scrollTop);
    frm.style.top= newPosy + "px";
    frm.style.left= newPosx+ "px";

    frm.focus();
    if(animateToolTip){
    frm.style.height= "0px";
    frm.style.width= "0px";
    ToolTip.animate(frm.id,divHeight,divWidth);}
      
    
    }

    

   this.Hide= function(e)
    {frm.style.display='none';
    if(!animateToolTip)return;
    frm.style.height= "0px";
    frm.style.width= "0px";}
    
    
    ToolTip.animate = function(a,iHeight,iWidth)
  { a = document.getElementById(a);
         
   var i = parseInt(a.style.width)+xincr ;
   var j = parseInt(a.style.height)+yincr;  
   
   if(i <= iWidth)
   {a.style.width = i+"px";}
   else
   {a.style.width = iWidth+"px";}
   
   if(j <= iHeight)
   {a.style.height = j+"px";}
   else
   {a.style.height = iHeight+"px";}
   
   if(!((i > iWidth) && (j > iHeight)))      
   setTimeout( "ToolTip.animate('"+a.id+"',"+iHeight+","+iWidth+")",1);
    }
    
   Init(id);
}

Now add these functions to thee page where you want to call tooltip

<script language="javascript">
        var t1;
var timeout;
        function showDetails(e, empid) {
            if (t1) t1.Show(e, "<br><br>Loading...");
document.getElementById("a1").style.display = "none";

//these lines are used when we are having multiple tootlips in page.
            document.getElementById("a2").style.display = "none";
            var url = 'defectstooltip.aspx?def_id=' + empid;
            document.getElementById("a").src = url;
        }

        function hideTooltip(e) {
            if (t1) t1.Hide(e);
        }

</script>

add events to links onmouseover ="showDetails(e, empid);" and onmouseout="hideTooltip(e)"

Note we can also call this tooltip on click event just make small change in function

function showDetails1(e, empid) {
            setTimeout(function () {
               
                if (t2) t2.Show(e, "<br><br>Loading...");
                document.getElementById("a").style.display = "none";
                document.getElementById("a2").style.display = "none";
                var url = 'commentbox.aspx?def_id=' + empid;
                document.getElementById("a1").src = url;
            }, 1000);
        }



No comments :

Post a Comment