Search the archives!
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Javascript] Mac IE oddities with rollover help pop-ups
- From: javascript@xxxxxxxxxx (McCoy, Thomas)
- Subject: [Javascript] Mac IE oddities with rollover help pop-ups
- Date: Fri, 20 Dec 2002 08:36:53 -0800
Our new Web site incorporates boxes that pop up when you roll over a link (to help people decide which link they want). It works good in most browsers, except Mac IE 5... where the pop up spans the entire screen. I throw myself upon the mercy of the JavaScript mailing list... I would appreciate any help you all may offer. Thanks :) Sincerely, Thomas McCoy (see it in action - mouse over a tab at: http://www.city.newport-beach.ca.us/nbpl/ ) SCRIPT: // to invoke: //<SCRIPT LANGUAGE="JavaScript" SRC="/popup.js" TYPE="text/javascript"></SCRIPT> //<BODY onLoad="init()"> //<DIV ID=popupDiv STYLE="position:absolute; visibility:hidden; z-index:1000"></DIV> //<A HREF="URL" ONMOUSEOVER="popup('POPUP_CONTENTS')" ONMOUSEOUT="popdn()">link</A> pop_border = 1; pop_pad_top = 3; pop_pad_left = 4; pop_bordercolor = "#003300"; pop_bgcolor = '#FFFFCC'; pop_font = "Arial,Verdana,,Helvetica,sans-serif"; pop_textsize = 2; pop_fontsize = '7pt'; pop_textcolor = "#003300"; pop_offset_x = 12; pop_offset_y = 10; //-- var pop = null; var initialized = false; var pop_width = 200; var mouse_x=0, mouse_y=0; // Decide browser version var ie4 = document.all && !document.getElementById; var ie5 = document.all && document.getElementById; var ns6 = !document.all && document.getElementById; var ns4 = document.layers; function init(){ // popup if(ie4 || ie5 || ns4 || ns6){ // Make a popup object shortcut if (ns4) pop = document.popupDiv; if (ie4 || ie5) pop = popupDiv; if (ns6) pop = document.getElementById("popupDiv"); // Capture mouse movement if (ns4) document.captureEvents(Event.MOUSEMOVE); document.onmousemove = mouseMoved; } else { popup = do_nothing; popdn = do_nothing; } initialized = true; } // Show a popup function popup(text,width,height) { if (!initialized) return false; pop_width = (width)? width:200; pop_contentwidth = pop_width - (pop_border*2) - (pop_pad_left*2); // Make layer content if (typeof width != 'undefined') { var html_width = 'WIDTH='+width+' '; } if (typeof height != 'undefined') { var html_height = 'HEIGHT='+height+' '; } else var html_height = ''; if (ie4 || ie5) { var layerhtml = "<DIV STYLE=\"background:"+pop_bgcolor+"; border:"+pop_border+"px solid "+pop_bordercolor+"; padding:"+pop_pad_top+"px "+pop_pad_left+"px; font:"+pop_fontsize+" "+pop_font+"; color:"+pop_textcolor+"\">"+text+"</DIV>"; } if (ns4) { var layerhtml = "<TABLE "+html_width+html_height+" BORDER=0 CELLPADDING="+pop_border+" CELLSPACING=0 BGCOLOR="+pop_bordercolor+"><TR><TD><TABLE WIDTH=\"100%\" "+html_height+" BORDER=0 CELLPADDING="+pop_pad_left+" CELLSPACING=0 BGCOLOR="+pop_bgcolor+"><TR><TD><FONT FACE=\""+pop_font+"\" COLOR=\""+pop_textcolor+"\" SIZE=\""+pop_textsize+"\">"+text+"</FONT></TD></TR></TABLE></TD></TR></TABLE >"; } if (ns6) { var layerhtml = "<TABLE "+html_width+html_height+" CELLSPACING=0 STYLE=\"background:"+pop_bgcolor+"; border:"+pop_border+"px solid "+pop_bordercolor+"\"><TR><TD STYLE=\"padding:"+pop_pad_top+"px "+pop_pad_left+"px; font:"+pop_fontsize+" "+pop_font+"\">"+text+"</TD></TR></TABLE>"; } // Write layer layerWrite(layerhtml); // Position layer setPopupPos(mouse_x, mouse_y); // Show layer show(pop); return true; } // Show a news story as a popup function news_popup (heading,text) { if (!initialized) return false; var layerhtml = "<TABLE WIDTH=240 BORDER=0 CELLPADDING=2 CELLSPACING=0 BGCOLOR="+pop_bordercolor+"><TR><TD><TABLE WIDTH=100% BORDER=0 CELLPADDING=10 CELLSPACING=0 BGCOLOR="+pop_bgcolor+"><TR><TD VALIGN=top><FONT FACE=\""+pop_font+"\" COLOR=\""+pop_textcolor+"\" SIZE=\""+pop_textsize+"\"><SPAN CLASS=popup_heading><NOBR>"+heading+"</NOBR></SPAN><BR>"+text+"</FONT></TD>< /TR></TABLE></TD></TR></TABLE>"; // Write layer layerWrite(layerhtml); // Position layer setPopupPos(mouse_x, mouse_y); // Show layer show(pop); return true; } // Clears popups if appropriate function popdn() { if ( initialized && (ie4 || ie5 || ns4 || ns6) && (pop != null) ) { hide(pop); } return true; } // Store mouse coordinates and move popup layer accordingly function mouseMoved(e) { if ( ns4 || ns6 ) { mouse_x=e.pageX; mouse_y=e.pageY;} if (ie4) { mouse_x=event.x; mouse_y=event.y;} if (ie5) { mouse_x=event.x+self.document.body.scrollLeft; mouse_y=event.y+self.document.body.scrollTop;} setPopupPos(mouse_x, mouse_y); } // Determine popup position (relative to cursor) function setPopupPos(mouse_x, mouse_y) { if (!initialized) return false; // Get window size if (ie4 || ie5) { var win_width = self.document.body.clientWidth; var win_height = self.document.body.clientHeight; } if (ns4) { var win_width = self.innerWidth; var win_height = self.innerHeight; } if (ns6) { var win_width = self.outerWidth; var win_height = self.outerHeight; } // Get window scroll position var win_scroll_x = (ie4 || ie5) ? self.document.body.scrollLeft : self.pageXOffset; var win_scroll_y = (ie4 || ie5) ? self.document.body.scrollTop : self.pageYOffset; // Get popup dimensions var pop_width_current = (ie4 || ie5)? pop.clientWidth:pop.offsetWidth; var pop_height_current = (ie4 || ie5)? pop.clientHeight:pop.offsetHeight; //alert (mouse_x + ':' + mouse_y + "\n" + win_width + ':' + win_height + "\n" + pop_width_current + ':' + pop_height_current + "\n" + pos_x + ':' + pos_y ); var scrollbar_size = (ie4 || ie5)? 0:16; // Set horizontal pos var pos_x = mouse_x + win_scroll_x + pop_offset_x; if (pos_x + pop_width_current > win_width + win_scroll_x - scrollbar_size) pos_x = win_width + win_scroll_x - pop_width_current - scrollbar_size; if (pos_x < win_scroll_x) pos_x = win_scroll_x; // Set vertical pos var pos_y = mouse_y + pop_offset_y; // stick to edge of window if would pass bottom edge // if (pos_y + pop_height_current > win_height + win_scroll_y - scrollbar_size) // pos_y = win_height + win_scroll_y - pop_height_current - scrollbar_size; // move above cursor if would pass bottom edge if (pos_y + pop_height_current > win_height + win_scroll_y - scrollbar_size) pos_y = mouse_y - pop_height_current - pop_offset_y; //self.status = "msx:" +mouse_x+ " msy:" +mouse_y+ " | posx:" +pos_x+ " posy:" +pos_y+ " | scrx:" +win_scroll_x+ " scry:" +win_scroll_y+ " | offx:" +pop_offset_x+ " offy:" +pop_offset_y+ " | cW:" + pop_width_current + " cH:" + pop_height_current; // Move the layer moveLayerTo(pop, pos_x, pos_y); } function moveLayerTo(obj,x,y) { if (ns4) { obj.left = x; obj.top = y; } else if (ie4 || ie5) { obj.style.left = x; obj.style.top = y; } else if (ns6) { obj.style.left = x + "px"; obj.style.top = y + "px"; } } // ========================================== // Make an object visible function show(obj) { if (ns4) obj.visibility = "show"; else if (ie4 || ie5) obj.style.visibility = "visible"; else if (ns6) obj.style.visibility = "visible"; } // Hides an object function hide(obj) { if (ns4) obj.visibility = "hide"; else if (ie4 || ie5) obj.style.visibility = "hidden"; else if (ns6) obj.style.visibility = "hidden"; } // Writes to a layer function layerWrite(txt) { if (ns4) { var lyr = self.document.popupDiv.document; lyr.write(txt); lyr.close(); } else if (ie4 || ie5) { // pop.innerHTML = txt; document.all.popupDiv.innerHTML=txt; } else if (ns6) { var range = self.document.createRange(); range.setStartBefore(pop); domfrag = range.createContextualFragment(txt); while (pop.hasChildNodes()) { pop.removeChild(pop.lastChild); } pop.appendChild(domfrag); } } function do_nothing() { return 1; }
- Prev by Date: [Javascript] greying out checkboxes
- Next by Date: [Javascript] FW: greying out checkboxes
- Previous by thread: [Javascript] greying out checkboxes
- Next by thread: [Javascript] FW: greying out checkboxes
- Index(es):