Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Raniel

[Resolvido] Funciona no FF mais não no IE

Recommended Posts

Olá pessol, tenho o seguinte javascript:

Delegate = {
	versao: "v1.0"
}
Delegate.create = function(obj, func, args) {	
	f = function() {
		var target = arguments.callee.target;
		var func   = arguments.callee.func;
		var args   = arguments.callee.args;		
		return func.apply(target, (args.length <1 ? arguments : args));
	};
	f.args = (args != undefined && args.length> 0 ? args : new Array());
	f.target = obj;
	f.func = func;
	return f;
}

Rolagem = function() {
	this.caixaRolagem  = null;
	this.direcao       = null;
	this.velocidade    = 50;
	this.deslocamento  = 8;
	this.tempo         = null;
	this.posicaoAtual  = 0;
	this.alturaObjs    = null;
	this.larguraObjs   = null;	
	this.objRolagem    = null;
	this.larguraPadrao = '200px';
	this.alturaPadrao  = '200px';
	
	this.obterCaixaRolagem = function() {
		return this.caixaRolagem;
	}
	
	this.obterDirecao = function() {
		return this.direcao;
	}
	
	this.obterVelocidade = function() {
		return this.velocidade;
	}
	
	this.obterDeslocamento = function() {
		return this.deslocamento;
	}	
	
	this.definirCaixaRolagem = function(caixaRolagem) {
		if(typeof caixaRolagem == 'string') {
			caixaRolagem = document.getElementById(caixaRolagem);
		}
		
		if(caixaRolagem == null) {
			alert('O objeto que foi fornecido não é válido!\n\nSugestão:\nEste metodo deve ser chamado após o objeto \'alvo\' ser carregado!');
			return;
		}
		
		// Primeira atribuicao
		this.caixaRolagem = caixaRolagem;
		
		this.objRolagem = document.createElement('div');
		
		this.objRolagem.innerHTML          = this.obterCaixaRolagem().innerHTML;
		this.obterCaixaRolagem().innerHTML = '';
		
		this.obterCaixaRolagem().appendChild(this.objRolagem);
		
		switch(this.obterCaixaRolagem().offsetWidth - document.body.offsetWidth) {
			case 0:
			case -41:
			case -40:
				this.obterCaixaRolagem().style.width  = this.larguraPadrao;
				this.obterCaixaRolagem().style.height = this.alturaPadrao;
			break;
			
			default:
				//
			break;
		}
		
		this.obterCaixaRolagem().style.overflow = 'hidden';
		this.obterCaixaRolagem().style.position = 'relative';
		
		//Propriedas de css
		this.objRolagem.style.position = 'absolute';
		this.objRolagem.style.top      = '0px';
		this.objRolagem.style.left     = '0px';
		
		// Segunda atribuicao, agora pega o novo objeto criado
		this.caixaRolagem = this.objRolagem;
	}				
	
	this.definirDirecao = function(direcao) {
		this.direcao = direcao;
	}
	
	this.definirVelocidade = function(velocidade) {
		this.velocidade = velocidade;
	}
	
	this.definirDeslocamento = function(deslocamento) {
		this.deslocamento = deslocamento;
	}	
	
	this.rolar = function() {
		this.tempo = setInterval(
			Delegate.create(this, 
				function() {
					switch(this.obterDirecao()) {
						case 'cima':
							this.posicaoAtual = this.obterCaixaRolagem().style.top.replace('px', '');
							this.posicaoAtual = parseInt(this.posicaoAtual);
							
							if((this.obterCaixaRolagem().scrollHeight - this.obterCaixaRolagem().parentNode.offsetHeight) + this.posicaoAtual >= 0) {
								this.obterCaixaRolagem().style.top = this.posicaoAtual - this.obterDeslocamento() + 'px';
							}
						break;
						
						case 'baixo':
							this.alturaObjs = this.obterCaixaRolagem().scrollHeight + this.obterCaixaRolagem().parentNode.offsetHeight;
							
							if(this.posicaoAtual != 0) {
								this.posicaoAtual = this.obterCaixaRolagem().style.top.replace('px', '');
								this.posicaoAtual = parseInt(this.posicaoAtual);
							}
							
							if((this.alturaObjs + this.posicaoAtual) < this.alturaObjs) {
								this.obterCaixaRolagem().style.top = this.posicaoAtual + this.obterDeslocamento() + 'px';
							}
						break;
						case 'esqu':
						this.larguraObjs = this.obterCaixaRolagem().scrollWidth + this.obterCaixaRolagem().parentNode.offsetWidth;
							
							if(this.posicaoAtual != 0) {
								this.posicaoAtual = this.obterCaixaRolagem().style.left.replace('px', '');
								this.posicaoAtual = parseInt(this.posicaoAtual);
							}
							
							if((this.larguraObjs + this.posicaoAtual) < this.larguraObjs) {
								this.obterCaixaRolagem().style.left = this.posicaoAtual + this.obterDeslocamento() + 'px';
							}
						break;
						case 'dire':
							this.posicaoAtual = this.obterCaixaRolagem().style.left.replace('px', '');
							this.posicaoAtual = parseInt(this.posicaoAtual);
							if((this.obterCaixaRolagem().scrollWidth - this.obterCaixaRolagem().parentNode.offsetWidth) + this.posicaoAtual >= 0){
								this.obterCaixaRolagem().style.left = this.posicaoAtual - this.obterDeslocamento() + 'px';
							}
						break;
					}
				}, Array('')
			), this.obterVelocidade()
		);
	}
	
	this.parar = function() {
		clearInterval(this.tempo);
	}
};

<!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" />
<script type="text/javascript" src="js/js_scroll.js"></script>
<script type="text/javascript" src="js/js_del.js"></script>
<title>Teste scroll</title>
<style type="text/css">
#letters{width:100px;height:22px;overflow:hidden;padding:0 5px;margin-left:20px}
#header{width:auto}
#cnt{position:relative}
</style>
</head>

<body>
<div id="cnt"><a href="javascript:void(0)" onmousedown="rol.definirDirecao('dire');rol.rolar()" onmouseout="rol.parar()" onmouseup="rol.parar()">«</a><div id="letters"><div id="header">a b c d e f g h i j k l m n o p q r s t u v y x w z</div></div><a href="javascript:void(0)" onmousedown="rol.definirDirecao('esqu');rol.rolar()" onmouseout="rol.parar()" onmouseup="rol.parar()">»</a></div>
<script type="text/javascript">
rol = new Rolagem();
rol.definirCaixaRolagem(document.getElementById('letters'));
</script>
</body>
</html>

A scroll funciona no Firefox mas não funciona no Internet Explore(6).

 

Grato quem puder me ajudar.

 

Próspero Ano Novo!

Compartilhar este post


Link para o post
Compartilhar em outros sites

É difícil encontrar uma solução crossbrowser que funcione nas versões mais antigas do IE...

Oque podes fazer é colocar um aviso no teu site... Do tipo "Este site é melhor visualizado em FF ou GC (entre outros que funcionem) clique para fazer o download..."

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.