Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Fade HTML element with raw javascript

It's my second question of the day related to the same problem, so I apologize for that.

I was able to put together a function to "fade out" an element, and it works just fine, my problem is that when I try to reverse it, so the element "fades in" it does not work. I've tried to change the obvious, but I can't understand what I'm doing wrong.

My code so far is as follows:

Given I have a "div" like so:

<div id="test" style="width:200px; height:200px; display:block; opacity:1; background-color:red;"></div>

The JavaScript function that I'm using to fade it out is:

var getElement = document.getElementById('test');
function fadeOut(elem, speed){
if(!elem.style.opacity){
    elem.style.opacity = 1;
}
var desvanecer = setInterval(function(){
    elem.style.opacity -= .02;
    if(elem.style.opacity < 0){
        clearInterval(desvanecer);
    }
}, speed / 50);
}
fadeOut(getElement, 500);

Could somebody take a look at this and let me know what I'm doing wrong, all I want to do is "FADE IN" an element to an opacity equal to "1".

By the way, I can't use jQuery, however I'm eager to learn this way.

Thanks

My attemp to reverse the function is as follows:

var getElement = document.getElementById('test');
function fadeIn(elem, speed){
if(elem.style.opacity){
    elem.style.opacity = 0;
}
var desvanecer = setInterval(function(){
    elem.style.opacity += .02;
    if(elem.style.opacity > 1){
        clearInterval(desvanecer);
    }
}, speed / 50); 
}
fadeIn(getElement, 500);
like image 268
jnkrois Avatar asked Apr 23 '10 00:04

jnkrois


People also ask

How do I fadeOut an element in JavaScript?

window. onload=fadeout, is used to call fadeout() function automatically when page goes on loading.

How do I fadeOut an element in HTML?

The jQuery fadeOut() method is used to fade out a visible element. Syntax: $(selector). fadeOut(speed,callback);

How do I fade a box in JavaScript?

Use JavaScript (element. style. display = "none") to remove the fadeout element from document flow.


1 Answers

setInterval runs in a global scope, so you need to define the timer relative to the window.

You can't concatinate the string value returned from the style property and expect a number- you'll get '0.02.02.02.02'

Coerce a number out of the string, then add the .02.

It will work in some browsers, but IE before 9 needs a different expression to set and read opacity.

function fadeIn(elem, speed){
    if(elem.style){
        elem.style.opacity= '0';
    }
    window.fadetimer= setInterval(function(){
        elem.style.opacity= +(elem.style.opacity)+.02;
        if(elem.style.opacity> 1){
            clearInterval(fadetimer);
        }
    },
    speed);
}
like image 94
kennebec Avatar answered Oct 19 '22 12:10

kennebec