bg flickers on mouseOver, in all browsers
Hi there, this is my first post here, I'm hoping you guys can help me. Given my lack of knowledge of JavaScript, I usually try to stay away from it, but for this particular task I couldn't find any other way.
I'm trying to make a button bar where when the user hovers over an image, a list of links appears on top of the same area, with a different background image.
This I've managed to put together, yet when I hover over the area, the background image starts to flicker and continues to do so until I move out of the area.
Any suggestions on how to solve this would be greatly appreciated.
Live test can be found here.
Code:
<!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>Test page</title>
<style type="text/css">
html, body, p, img, div {
margin:0;
padding:0;
}
#text {
font-family:verdana;
font-size:16px;
}
#text {
float:left;
display:none;
position:absolute;
left:100px;
top:100px;
width:202px;
height:210px;
}
#navbar {
float:left;
display:block;
position:absolute;
left:100px;
top:100px;
}
</style>
<script type="text/javascript">
function doStuff(el) {
el.src="PresentationButton1.png";
document.getElementById("text").style.display="block";
el.onmouseout=function() {
el.src="PresentationButton2.png";
document.getElementById("text").style.display="none";
}
}
</script>
</head>
<body>
<div id="navbar"><img src="PresentationButton2.png" alt="" onmouseover="doStuff(this)" /><img src="PresentationButton2.png" alt="" onmouseover="doStuff(this)" /><img src="PresentationButton2.png" alt="" onmouseover="doStuff(this)" /></div>
<div id="text">This text just keeps on flickering, it's giving me a headache...</div>
</body>
</html>
your link seems to work in Firefox 3 and IE 7 without any flickering.
"The one who's closer to the truth is the one still looking"
Jodarecode "Hence" - Chaos -
It might be caused by the fact when the "text" appears, it fires the onmouseout event on the <img>, and then the onmouseover event fires immediately on the "text".
Also, maybe the "text" needs a background color so the <img> in the background doesn't show through?
Hi guys, thanks for replying.
The live test page has a different version than the code that I posted. Most of the issues are solved; there's no flickering anymore, and it even works in IE6.
There's one issue left though:
I'm trying to make a navbar with 4 boxes, each with a list of links. Each box is supposed to have a different set of backgrounds - one background for mouseOut and one for mouseOver. As the code is now, it works with only one set of backgrounds for all 4 boxes.
Does anyone have any ideas on how to change the script so that it does its magic not only for 'div_image' but also separately for the (future) classes 'div_image2', 'div_image3', and 'div_image4'?
Code:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>Change Background and Show Text on Hover</title>
<style type="text/css">
html, body, p, img, div, ul, li {
margin:0;
padding:0;
}
#buttonbar {
width:808px;
height:210px;
float:left;
position:absolute;
top:50px;
left:50px;
font-family:Verdana, Arial, Helvetica, sans-serif;
font-size:16px;
}
.image_div, .image_div_hover {
background: url(ContentButton1.png);
width: 202px;
height: 210px;
float: left;
}
.image_div div {
display: none;
}
.image_div:hover, .image_div_hover {
background: url(ContentButton2.png);
}
.image_div:hover div, .image_div_hover div {
display: block;
}
.buttonstyle li ul li a {
font-weight:normal;
display:block;
height:25px;
}
.buttonstyle li a {
font-weight:bold;
display:block;
height:25px;
padding:6px 10px 0px 10px;
}
.buttonstyle li ul li a:hover {
background-color:#FFF;
}
a {
text-decoration:none;
color:#666666;
}
ul, li {
list-style:none;
}
</style>
<!--[if IE 6]>
<script type="text/javascript">
function prepareElements() {
if(!document.getElementsByTagName("div"))
return;
var divs = document.getElementsByTagName("div");
for(var i=0; i < divs.length; i++)
if(divs[i].className == 'image_div') {
divs[i].onmouseover = doMouseOver;
divs[i].onmouseout = doMouseOut;
}
}
function doMouseOver() {
this.className = 'image_div_hover';
}
function doMouseOut() {
this.className = 'image_div';
}
</script>
<![endif]-->
</head>
<body>
<div id="buttonbar">
<div class="image_div">
<div>
<ul class="buttonstyle">
<li><a href="#">Content</a>
<ul>
<li><a href="#">Categories</a></li>
<li><a href="#">Categories</a></li>
<li><a href="#">Categories</a></li>
<li><a href="#">Categories</a></li>
</ul>
</li>
</ul>
</div>
</div>
<div class="image_div">
<div>
<ul class="buttonstyle">
<li><a href="#">Presentation</a>
<ul>
<li><a href="#">Categories</a></li>
<li><a href="#">Categories</a></li>
<li><a href="#">Categories</a></li>
<li><a href="#">Categories</a></li>
</ul>
</li>
</ul>
</div>
</div>
<div class="image_div">
<div>
<ul class="buttonstyle">
<li><a href="#">Admin</a>
<ul>
<li><a href="#">Categories</a></li>
<li><a href="#">Categories</a></li>
<li><a href="#">Categories</a></li>
<li><a href="#">Categories</a></li>
</ul>
</li>
</ul>
</div>
</div>
<div class="image_div">
<div>
<ul class="buttonstyle">
<li><a href="#">Extensions</a>
<ul>
<li><a href="#">Categories</a></li>
<li><a href="#">Categories</a></li>
<li><a href="#">Categories</a></li>
<li><a href="#">Categories</a></li>
</ul>
</li>
</ul>
</div>
</div>
</div>
<!--[if IE 6]>
<script type="text/javascript">prepareElements()</script>
<![endif]-->
</body>
</html>
Last edited by Sheynberg; 02-26-2009 at 05:50 PM .
Thread Information
Users Browsing this Thread
There are currently 1 users browsing this thread. (0 members and 1 guests)
Tags for this Thread
Posting Permissions
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts
Forum Rules
Bookmarks