4

so I've been trying to set a gradient with javascript so that it has a mouse over effect, but I've had no luck and cannot get it to work, here is my javascript.

function mouseOVER(x)
{
x.backgroundImage="-webkit-gradient(linear, left bottom, left top, color-stop(0, #F7F7F7), color-stop(1, #FFFFFF));";
}

function mouseOFF(x)
{
x.backgroundImage="-webkit-gradient(linear, left bottom, left top, color-stop(0, #F7F7F7), color-stop(1, #BABABA));";

}​

I've been using jsFiddle to test things, so here is mine for this.

4
  • 7
    If you want mouseOver style change, try to use CSS :hover pseudoclass and there add gradient background Commented Aug 13, 2012 at 22:46
  • Tamlyn, I also intended for it to change the text, but I've made that work in javascript, so should the text and gradient be done separately? Commented Aug 13, 2012 at 22:48
  • i'd also suggest you to use css :hover and only if it is necessary (and only then) use jquery 1.8 for that case because it adds prefixes for different browsers since 1.8 for css3 features ;) Commented Aug 13, 2012 at 22:49
  • 1
    @GeorgeSumpster Use CSS always when posible, bacause you can have adventages of browser GPU rendering. It much faster than DOM manipulating Commented Aug 13, 2012 at 22:50

4 Answers 4

3

Try somethink like this, with CSS only

CSS

#home{
    background-image: -webkit-gradient(linear, left bottom, left top, color-stop(0, #F7F7F7), color-stop(1, #BABABA));
    width:100px;
    height:45px;
    text-align:center;
    border-radius:10px;
    position:relative;
    top:15px;
    left:15px;
}
#home:hover{
    background-image: -webkit-gradient(linear, left bottom, left top, color-stop(0, #F7F7F7), color-stop(1, #FFFFFF));
}
#homenav{
    font-family:Arial, Helvetica, sans-serif;
    text-decoration: none;
    color:#000000;
    position:relative;
    top:12.5px;
}

DEMO http://jsfiddle.net/enve/ZauwA/11/


To change your text on mouseover use this code

HTML

<nav>
    <div id="home">
    <a href="home.html" id="homenav" onmouseover="changeText()" onmouseout="returnText()">HOME</a>
    </div>
</nav>​

<script>
function changeText()
{
document.getElementById("homenav").innerHTML='Welcome'
}
function returnText()
{
document.getElementById("homenav").innerHTML='Home'
}
</script>

FULL DEMO http://jsfiddle.net/enve/ZauwA/19/

Sign up to request clarification or add additional context in comments.

Comments

3

With jQuery this works:

$('#block').css({
    background: "-webkit-gradient(linear, left top, left bottom, from(#ccc), to(#000))" 
});

You also need to apply the styles for other non-webkit browsers.

Dont know why youre Fiddle doesnt work. The Console tells me that youre functions are not defined.

Why are you trying to do this? If not necessary i would definteley suggest the CSS-way mentioned above.

3 Comments

I was also going to have the text change, bur I guess having them separate also works. I need to figure out my functions being defined, I have trouble with them all the time v.v
It seems like you have to declare the functions before they're called. You could add them in a <script>-Tag into the header.
1

No need to use jQuery, vanilla JS is fine. You're simply missing a correct style property reference:

x.backgroundImage='...'; //no such property
x.style.backgroundImage='...'; //works correctly

Working sample (requires a webkit browser obviously)

That being said, you should really use pure CSS and rely on :hover dynamic pseudo-class:

#home {/*gradient 1*/}
#home:hover {/*gradient 2*/}

1 Comment

+1 for the correct solution! Was not sure about the right JavaScript Syntax for backgroundImage as i forgot most of it using jQuery so much :P
0

Would you be open for a pure CSS solution?

if so, add this:

#homenav:hover{
    -webkit-gradient(linear, left bottom, left top, color-stop(0, #F7F7F7), color-stop(1, #FFFFFF));
}

3 Comments

You probably should also provide a solution in JS, to answer the OP. Frankly, I don't even know what the problem is.
Apparently, he accepted a pure CSS answer by Enve, so that wasn't the case.
Yeah, I was not aware that CSS was the best option, thank you though Rodnik.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.