Ir para conteúdo

POWERED BY:

Arquivado

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

THCB

> Barra de rolagem só aparecer quando for necessário, é possível?

Recommended Posts

Olá,

 

gostaria de desenvolver uma área no meu site com chamadas de notícias, e o cliente deseja que caso o número de chamadinhas for grande, aparecer uma barra de rolagem vertical. Isso é possível? Só aparecer barra de rolagem se o conteudo for grande? Caso contrario nao apareceria nada...

 

Observação: o texto dessas chamadas, pretendo fazer via xml.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Da pra fazer sim e é bem comum usar isso, você faz um movieclip com nome de instancia de mascara, e no outro você da o nome de conteudo, quando você terminar o for que adiciona o conteudo do texto do xml, você compara o _height da mascara com o do conteudo, se o do conteudo for maior, voc^^e da a ação para ele incluir o scroll e tornar ele visível.

Compartilhar este post


Link para o post
Compartilhar em outros sites

hmmm...entendi a teoria...agora na pratica...hehehe...você teria algum tutorial sobre isso pra me indicar? ou arquivo, qualquer coisa...obrigado pela atenção amigo

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bom, quando eu faço um scroll eu faço uma conta bem simples, vou te explicar com o mouse, depois é só você trocar o y do mouse com o y de um movieclip que você vai clicar e arrastar.

 

1 passo, pegar a porcentagem do mouse ou movieclip em relação ao espaço que você vai deslizar, crie um movieclip, coloque na posição 0 em x e y, de o nome de instancia pra ele de mc, e coloque essa ação:

 

// cria a porcentagem

 

var ref = this; // seta a variavel ref para a timeline atual assim evita usar _root e tal

onEnterFrame = function(){

pct = (ref._ymouse / mc._height) * 100;

trace(pct)

}

 

Isso deve te dar os valores entre 0 a 100 conforme você muda o mouse pra cima e pra baixo encima do movieclip, claro que ao passar ele vai passar de 100.

 

Agora você faz um campo de texto, enche de lorem ipsum de modo que o _height dele ultrapasse o _height do mc, dai você transforma em movieclip e da o nome de instancia pra ele de conteudo e vai pro segundo passo da programação

 

Agora você tem a porcentagem da posição do mouse em relação a area que ele vai deslizar, agora você precisa calcular quando o movieclip de texto ode deslocar, imagina que a area que ele aparece tem 100 pixels e o conteudo tem 150, então você vai poder deslocar somente os 50 pixels que é o que o conteudo ultrapassa da area, então você vai pegar essa sobra e fracionar em 100 partes que é o valor da porcentagem:

 

var sobra = conteudo._height - mc._height;

fracao = sobra / 100;

 

// aqui você pegará a posição do conteudo multiplicando a porcentagem pela fração:

 

posy = fracao * pct;

 

Porem se você testar a programação completa vai notar que o conteudo ta deslizando pra baixo em vez de ir pra cima, contra a posiçã odo mouse, a gente precisa inverter a fração positiva pra negativa, ficando assim:

 

posy = fracao * -pct;

 

O código completo do deslocamenteo então ficaria assim:

 

var ref = this; // seta a variavel ref para a timeline atual assim evita usar _root e tal

 

var sobra = conteudo._height - mc._height;

fracao = sobra / 100;

 

onEnterFrame = function(){

pct = (ref._ymouse / mc._height) * 100;

posy = fracao * -pct;

conteudo._y = posy;

}

 

Fiz de cabeça mas deve funcionar, teste ai e se tudo der certo, passe a posição do mouse pra um botão com startDrag e StpDrag e dai colocamos a função de visibilidade do scroll, deu pra entender?

 

abraço

Compartilhar este post


Link para o post
Compartilhar em outros sites

olá,

 

mas e para fazer o scroll não aparecer quando não for necessário?

 

o scroll eu consegui, agora estou tentando fazer ele sumir e não vai de jeito nenhum...acho que não estou sabendo encaixar essa parte no meu código...

 

veja meu codigo:

 

_root.materia.html = true;

meuY = 200;
meuX = 712;
Stage.align = "TL";
_root.createEmptyMovieClip("lista",1);
lista.setMask(mascara);
scrollbar.swapDepths(getNextHighestDepth());

var oXML:XML = new XML();
oXML.ignoreWhite = true;
oXML.load("news.xml");
oXML.onLoad = function(success:Boolean):Void  {
	var childs:XMLNode = oXML.firstChild;
	var childTotal:Number = childs.childNodes.length;

	for (var i = 0; i<childTotal; i++) {
		_root.lista.attachMovie("Noticia",["noticia"+i],i);
		_root.lista["noticia"+i]._y = meuY;
		_root.lista["noticia"+i]._x = meuX;
		botoes = _root.lista["noticia"+i];
		var nodeNoticia:XMLNode = oXML.firstChild.childNodes[i];
		var titulo:String = nodeNoticia.childNodes[0].firstChild.nodeValue;
		_root.lista["noticia"+i].titulo.text = titulo;
		var texto:String = nodeNoticia.childNodes[1].firstChild.nodeValue;
		_root.lista["noticia"+i].texto.html = true;
		_root.lista["noticia"+i].texto.htmlText = texto;
		var autor:String = nodeNoticia.childNodes[2].firstChild.nodeValue;
		_root.lista["noticia"+i].autor.text = "Por: "+autor;
		var data:String = nodeNoticia.childNodes[3].firstChild.nodeValue;
		_root.lista["noticia"+i].dia.text = data;
		meuY = meuY+65;
		botoes.atual = i;
		botoes.btn.onRelease = function():Void  {
		_root.materia.htmlText = oXML.childNodes[0].childNodes[this._parent.atual].childNodes[1].firstChild.nodeValue;
		
		
		AlturaMascara=mascara._height
		AlturaLista=lista._height
		if(AlturaLista < AlturaMascara) {
		trace("lista menor que mascara");
		scrollbar._visible=false;
		} else {
		trace("lista maior que mascara");
		scrollbar._visible=true;
		}
		
		};
	}
};

será que não é pra ficar no for?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ele precisa ficar depois do for, porque o for monta a altra do movieclip, coloca logo após o for e veja se ele da o trace, tb da uma olhada se você colocou o nome de instancia no scrollbar.

Compartilhar este post


Link para o post
Compartilhar em outros sites

se eu colocar esse codigo:

 

AlturaMascara=mascara._height

AlturaLista=lista._height

if(AlturaLista < AlturaMascara) {

trace("lista menor que mascara");

scrollbar._visible=false;

} else {

trace("lista maior que mascara");

scrollbar._visible=true;

}

 

ele dá o trace "lista menor que a mascara"... sendo que a lista está bem maior...=/

o scrollbar esta instanciado corretamente...com esse mesmo nome...me parece que fora do for ele nao pega a altura do conteudo (movie-clip chamado "lista")...

 

nao sei mais o que fazer...será que nao tem jeito?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Eu coloquei esse codigo embaixo do codigo todo antes de fechar a ultima chave:

 

AlturaMascara=mascara._height

AlturaLista=lista._height

if(AlturaLista < AlturaMascara) {

trace("lista menor que mascara");

scrollbar._visible=false;

} else {

trace("lista maior que mascara");

scrollbar._visible=true;

}

 

agora os traces aparecem corretamente mas o scroll NAO fica invisivel quando a lista é curta...

Compartilhar este post


Link para o post
Compartilhar em outros sites

eu acho que o problema ta na instancia do scroll, tenta isso:

 

scrollbar._visible=false;

AlturaMascara=mascara._height

AlturaLista=lista._height

if(AlturaLista < AlturaMascara) {

trace("lista menor que mascara");

//scrollbar._visible=false;

} else {

trace("lista maior que mascara");

//scrollbar._visible=true;

}

 

Se ele não ficar invisível é problema com a instancia

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.