Link to home
Start Free TrialLog in
Avatar of somewherehot
somewherehotFlag for United Kingdom of Great Britain and Northern Ireland

asked on

Create popup window appear and disappear on rollover link - javascript

Hi,
I'm trying to create a portfolio for our websites. To do this, I was going to have a lot of thumbnails of sites that we have completed. When the user moves their mouse over one of the images I wanted a popup window to appear that gives more detail about the project. When the mouse moves away from thumbnail the popup should disapear.

I want the popup to be an actual web page so that I can add a link to it to show the actual website site.

It's quite hard to explain what I mean, so it may be better for you to go to:
http://www.revelation.uk.com/beta/rollover/Autos%20-%20Text%20Link%20Ads.htm
There will be a long list of websites. If you move your mouse over the 'reveal' link a pop up appears. This is exactly the type of thing that we are trying to achieve
Avatar of pashik
pashik

Hi.
I can suggest u this script, i don't remmeber where i take it but it works as it should in any browser.

example of usage u can see at http://www.pashik.com/portfolio.html

script.js file:
var t_id = setInterval(animate,20);
var pos=0;
var dir=2;
var len=0;

function animate()
{
var elem = document.getElementById('progress');
if(elem != null) {
if (pos==0) len += dir;
if (len>32 || pos>79) pos += dir;
if (pos>79) len -= dir;
if (pos>79 && len==0) pos=0;
elem.style.left = pos;
elem.style.width = len;
}
}

function remove_loading() {
this.clearInterval(t_id);
var targelem = document.getElementById('loader_container');
targelem.style.display='none';
targelem.style.visibility='hidden';
var t_id = setInterval(animate,60);
}


var offsetfrommouse=[15,25]; //image x,y offsets from cursor position in pixels. Enter 0,0 for no offset
var displayduration=0; //duration in seconds image should remain visible. 0 for always.

var defaultimageheight = 40;      // maximum image size.
var defaultimagewidth = 40;      // maximum image size.

var timer;

function gettrailobj(){
if (document.getElementById)
return document.getElementById("preview_div").style
}

function gettrailobjnostyle(){
if (document.getElementById)
return document.getElementById("preview_div")
}


function truebody(){
return (!window.opera && document.compatMode && document.compatMode!="BackCompat")? document.documentElement : document.body
}


function hidetrail(){      
      gettrailobj().display= "none";
      document.onmousemove=""
      gettrailobj().left="-500px"
      clearTimeout(timer);
}

function showtrail(imagename,title,width,height){
      i = imagename
      t = title
      w = width
      h = height
      timer = setTimeout("show('"+i+"',t,w,h);",200);
}
function show(imagename,title,width,height){
 
    var docwidth=document.all? truebody().scrollLeft+truebody().clientWidth : pageXOffset+window.innerWidth - offsetfrommouse[0]
      var docheight=document.all? Math.min(truebody().scrollHeight, truebody().clientHeight) : Math.min(window.innerHeight)

      if( (navigator.userAgent.indexOf("Konqueror")==-1  || navigator.userAgent.indexOf("Firefox")!=-1 || (navigator.userAgent.indexOf("Opera")==-1 && navigator.appVersion.indexOf("MSIE")!=-1)) && (docwidth>650 && docheight>500)) {
            ( width == 0 ) ? width = defaultimagewidth: '';
            ( height == 0 ) ? height = defaultimageheight: '';
                  
            width+=30
            height+=25
            defaultimageheight = height
            defaultimagewidth = width
      
            document.onmousemove=followmouse;

            
            newHTML = '<div class="border_preview" style="width:'+  width +'px;height:'+ height +'px"><div id="loader_container"><div id="loader"><div align="center">Loading preview...</div><div id="loader_bg"><div id="progress"> </div></div></div></div>';
//            newHTML = newHTML + '<h2 class="title_h2">' + ' '+title + '</h2>'
            
          newHTML = newHTML + '<div class="preview_temp_load"><img onload="javascript:remove_loading();" src="' + imagename + '" border="0"></div>';
            newHTML = newHTML + '</div>';
            
            if(navigator.userAgent.indexOf("MSIE")!=-1 && navigator.userAgent.indexOf("Opera")==-1 ){
                  newHTML = newHTML+'<iframe src="about:blank" scrolling="no" frameborder="0" width="'+width+'" height="'+height+'"></iframe>';
            }            

            gettrailobjnostyle().innerHTML = newHTML;
            gettrailobj().display="block";
      }
}

function followmouse(e){

      var xcoord=offsetfrommouse[0]
      var ycoord=offsetfrommouse[1]

      var docwidth=document.all? truebody().scrollLeft+truebody().clientWidth : pageXOffset+window.innerWidth-15
      var docheight=document.all? Math.min(truebody().scrollHeight, truebody().clientHeight) : Math.min(window.innerHeight)

      if (typeof e != "undefined"){
            if (docwidth - e.pageX < defaultimagewidth + 2*offsetfrommouse[0]){
                  xcoord = e.pageX - xcoord - defaultimagewidth; // Move to the left side of the cursor
            } else {
                  xcoord += e.pageX;
            }
            if (docheight - e.pageY < defaultimageheight + 2*offsetfrommouse[1]){
                  ycoord += e.pageY - Math.max(0,(2*offsetfrommouse[1] + defaultimageheight + e.pageY - docheight - truebody().scrollTop));
            } else {
                  ycoord += e.pageY;
            }

      } else if (typeof window.event != "undefined"){
            if (docwidth - event.clientX < defaultimagewidth + 2*offsetfrommouse[0]){
                  xcoord = event.clientX + truebody().scrollLeft - xcoord - defaultimagewidth; // Move to the left side of the cursor
            } else {
                  xcoord += truebody().scrollLeft+event.clientX
            }
            if (docheight - event.clientY < (defaultimageheight + 2*offsetfrommouse[1])){
                  ycoord += event.clientY + truebody().scrollTop - Math.max(0,(2*offsetfrommouse[1] + defaultimageheight + event.clientY - docheight));
            } else {
                  ycoord += truebody().scrollTop + event.clientY;
            }
      }
      gettrailobj().left=xcoord+"px"
      gettrailobj().top=ycoord+"px"

}

IN ur HTML file:
don't forget to include <script language="javascript" type="text/javascript" src="script.js"></script>
and write in after <body> tag
<div style="display: none; position: absolute;z-index:110; " id="preview_div"></div>

And on image/text where u want to have mouseover popup write this:

<a style="cursor: hand" href="http://www.yahoo.com" target="_blank" onfocus="showtrail('images/largeYahoo.jpg','Yahoo.com',400,439)" onmouseover="showtrail('images/largeYahoo.jpg','Yahoo.com',400,439)" onmouseout="hidetrail()" onblur="hidetrail()" ><img src="images/smallYahoo.jpg" alt="Yahoo.com" border=0 class="thumbnail" longdesc="" width="145" height="134"></a>
Avatar of somewherehot

ASKER

Thats really good - although not exactly what I was looking for. The behaviour of this script is more like the popup window that you get on istock.com

I need to allow the user to move their mouse inside the popup box (which will contain text and images) to click on a link.

Thanks for your suggestion though
Not exactly what you are looking for, but this could be modified easily to do what you are asking.  This actaully was designed to simulate a modal dialog box without a pop-up window.  You could easily remove the code that disables the rest of the page and add an onmouseout option to the <div's> that hold your pop-up information.

If it looks like this might work for you and you need help with it, let me know.

Neal.

http://www.applicationgroup.com/tutorials/modalDialog/modalDialog.asp
Thanks for the suggestion - Its not what I was looking for. Is there a way of extracting the code from the  example page ( http://www.revelation.uk.com/beta/rollover/Autos%20-%20Text%20Link%20Ads.htm ) that I sent?

I managed to fix this myself using div's and the hidden status:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Untitled Document</title>
<SCRIPT type=text/javascript>
function showstuff(boxid){
   document.getElementById(boxid).style.visibility="visible";
}

function hidestuff(boxid){
   document.getElementById(boxid).style.visibility="hidden";
}
</SCRIPT>
<style type="text/css">
<!--
#apDiv1 {
      position:absolute;
      width:200px;
      height:115px;
      z-index:99;
      left: 11px;
      top: 21px;
      visibility: hidden;
      background-color: #0000FF;
}
-->
</style>
</head>

<body>
<div id="apDiv1" onmouseover=showstuff('apDiv1') onmouseout=hidestuff('apDiv1')>
  <p>tHIS IS A TEST</p>
  <p>&nbsp;</p>
  <p>asdsa</p>
</div>
<p><A onmouseover=showstuff('apDiv1')
      onmouseout=hidestuff('apDiv1') href="javascript:void();">Put your mouse here</A></p>
<p>&nbsp;</p>
</body>
</html>
ASKER CERTIFIED SOLUTION
Avatar of Vee_Mod
Vee_Mod
Flag of United States of America image

Link to home
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
Start Free Trial
Somewherehot: Very simple and nice script. It is appreciated. I am going to use it (modified) in greasemonkey to create a sort of lightbox script that will allow me to open images in the same page as they are linked in.

Thanks!