tadarank afiliados

07 outubro, 2011

Funções javascript pra trabalhar com Scroll

Ae pessoal, esses dias precisei brincar com a posição da barra de rolagem (scroll) na tela e posicionamento de elementos de acordo com o scroll.

Como quase tudo em javascript, nossos amigos navegadores não ajudam. Ou seja, não é só pegar a documentação, tem toda aquela velha gambiarra pra funcionar em diversos browsers (crossbrowser).

Pra minha alegria, lembrei que eu já tinha brincado com isso na época do velho Mwords, daí fui lá atrás das funções e re-adaptei. Mostrar-lhes-ei agora:

Pegando a posição atual do scroll e retornando em um objeto com as propriedades X e Y:
var w=window, d=document;
//pega a posição atual do scroll
mov.getScroll= function(){
	return {
		x: (w.pageXOffset ? w.pageXOffset : de.scrollLeft ? de.scrollLeft : d.body.scrollLeft) || 0,		
		y: (w.pageYOffset ? w.pageYOffset : de.scrollTop ? de.scrollTop : d.body.scrollTop) || 0	
	};
};
//exemplo de uso
alert('Posição Y do scroll: ' + mov.getScroll().y);

Pegando a posição de determinado elemento na tela:
var w=window, d=document;
//pega a posição correta do elemento na tela
mov.objPos = function(obj) {
	var curl =0, curt = 0;
	if (obj.offsetParent) {
		do {
			curl += obj.offsetLeft;
			curt += obj.offsetTop;
		} while ((obj = obj.offsetParent));
		return {x: curl, y: curt};
	}else{
		return {x: obj.offsetLeft, y:obj.offsetTop};
	}
};
//exemplo de uso
alert('Posição real do elemento "viva" na tela: ' + mov.objPos(d.getElementById('viva') ) );

Fazendo a barra de rolagem se movimentar gradativamente
//variaveis
var micox_mov_height= 50; //de quanto em quanto o scroll se moverá
var micox_mov_fps    = 20; //velocidade que o scroll se moverá
//faz o slide
mov.slide = function(ini,end){
	if(!mov.sliding){	
		mov.sliding = true;
		//setando posição inicial
		var atual = mov.getScroll();
		w.scrollTo(atual.x , ini);
		mov.inter = setInterval(function(){
			var novoY, atual = mov.getScroll();
			if(atual.y < end){
				w.scrollTo(atual.x , atual.y + micox_mov_heigth);
			}else{
				mov.sliding = false;
				clearInterval(mov.inter);
			}
		},1000/micox_mov_fps);
	}
}

Em breve vocês irão ver estas funções fazendo um efeitinho muito legal em um texto de um brodi meu. Linkarei aqui quando acontecer. Aguardem, irá valer a pena.

Bom, tá documentado ae se alguém precisar. Qualquer dúvida é só comentar. Gostou da dica acima? Então clica nos botões de compartilhamento abaixo e me ajude a dica a subir no Google.

Nenhum comentário:

Postar um comentário

Resultado! Concursos