Foros del Web » Programando para Internet » Jquery »

uso de variables para marquesina en jquery

Estas en el tema de uso de variables para marquesina en jquery en el foro de Jquery en Foros del Web. Hola, estoy tocando un scritp de una marquesina en JQuery. Estoy empezando con esto y ni siquiera se si se puede hacer. Lo que gustaria ...
  #1 (permalink)  
Antiguo 09/10/2009, 13:59
 
Fecha de Ingreso: octubre-2009
Mensajes: 2
Antigüedad: 14 años, 6 meses
Puntos: 0
uso de variables para marquesina en jquery

Hola, estoy tocando un scritp de una marquesina en JQuery. Estoy empezando con esto y ni siquiera se si se puede hacer.

Lo que gustaria es poder controlar el tamaño de la marquesina, he conseguido hacerlo pero necesito cambiar la altura dentro de la funcion que maneja la repetición para que quede bien.

Os pongo el código:

Código:
var headline_count;
var headline_interval;
var old_headline = 0;
var current_headline = 0;

          
 $(document).ready(function(){
 headline_count = $("div.headline").size();
 $("div.headline:eq("+current_headline+")").css('top','5px');
 headline_interval = setInterval(headline_rotate, 3500); // tiempo en milisegundos
 $('#marquesina').hover(function() {
 clearInterval(headline_interval);
 }, function() {
 headline_interval = setInterval(headline_rotate, 3500); // tiempo en milisegundos
 headline_rotate();
 });
 });
   
 function headline_rotate() {
current_headline = (old_headline + 1) % headline_count;
$("div.headline:eq(" + old_headline + ")").animate({top: -746},"slow", function(h) {
$(this).css('top','746px');
});
$("div.headline:eq(" + current_headline + ")").show().animate({top: 5},"slow");  
  	         old_headline = current_headline;
}

//para cambiar tamaño de las fotos  
function mostrarFoto(alto,ancho){
this.alto = alto;
this.ancho = ancho;
document.getElementById('image1').width = this.ancho;
document.getElementById('image1').height = this.alto;
document.getElementById('image2').width = this.ancho;
document.getElementById('image2').height = this.alto;
document.getElementById('image3').width = this.ancho;
document.getElementById('image3').height = this.alto;
document.getElementById('marquesina').style.width = this.ancho + "px";
document.getElementById('marquesina').style.height = this.alto + "px";
document.getElementById('fotos').style.width = this.ancho + 10 + "px";
document.getElementById('fotos').style.height = this.alto + 10 + "px";
			}
La funcion mostrarFoto es la que cambia el tamaño de las fotos, ahora necesito poder cambiar la altura en headline_rotate:
Código:
function headline_rotate() {
current_headline = (old_headline + 1) % headline_count;
$("div.headline:eq(" + old_headline + ")").animate({top: -746},"slow", function(h) {
$(this).css('top','746px');
});
$("div.headline:eq(" + current_headline + ")").show().animate({top: 5},"slow");  
old_headline = current_headline;
}
exactamente aqui:

Código:
$("div.headline:eq(" + old_headline + ")").animate({top: -746},"slow", function(h) {
                   $(this).css('top','746px');
             });
Cuando el usuario pulse en los enlaces con id 1, 2 ó 3:

Código:
<ul id="tamano">
<li><a id="3" onclick="mostrarFoto(1343,900)" href="#">3</a></li>
<li class="medio"><a id="2"  onclick="mostrarFoto(1194,800)" href="#">2</a></li>
<li ><a id="1" onclick="mostrarFoto(746,500)" href="#">1</a></li>
<li class="clear"></li>
</ul>
¿Como puedo pasarle una variable a la función?

Muchas gracias por adelantado, cualquier sugerencia en el código es bienvenida.
  #2 (permalink)  
Antiguo 10/10/2009, 12:27
Avatar de mayid
Colaborador
 
Fecha de Ingreso: marzo-2009
Ubicación: BsAs
Mensajes: 4.014
Antigüedad: 15 años, 1 mes
Puntos: 101
Respuesta: uso de variables para marquesina en jquery

Cita:
document.getElementById('image1').width = this.ancho;
document.getElementById('image1').height = this.alto;
document.getElementById('image2').width = this.ancho;
document.getElementById('image2').height = this.alto;
document.getElementById('image3').width = this.ancho;
document.getElementById('image3').height = this.alto;
Para esta funcion yo sugerirìa uses clases en vez de id. Un id unico requiere listar una por una las fotos. Un class name te permite cambiar el atributo de todas las fotos de una sola vez.

En cuanto a las proporciones de la marquesina, yo a simple vista no las veo declaradas en javascript. Han de tener un documento CSS para inicializarlas.

Basta con que sepas como se llama el elemento que tiene que redimensionarse, y pasarle las nuevas proporciones de la misma manera en que se las estas pasando a las fotos en la funcion mostrarFoto(ancho, alto)
  #3 (permalink)  
Antiguo 11/10/2009, 17:23
 
Fecha de Ingreso: octubre-2009
Mensajes: 2
Antigüedad: 14 años, 6 meses
Puntos: 0
Respuesta: uso de variables para marquesina en jquery

Hola Mayid,

Muchas gracias por la sugerencia, tienes razon con lo de usar clases en la función. Lo cambié y al final me queda así:

Código:
function mostrarFoto(alto,ancho){
			
this.alto = alto;
this.ancho = ancho;
						
 $(".image").css("width", this.ancho);
 $(".image").css("height", this.alto);
 document.getElementById('marquesina').style.width = this.ancho + "px";
 document.getElementById('marquesina').style.height = this.alto + "px";
 document.getElementById('fotos').style.width = this.ancho + 10 + "px";
 document.getElementById('fotos').style.height = this.alto + 10 + "px";
			}
El tem de cambiar el tamaño en la función que hace el movimiento de las marquesinas no es tan fácil como pensé al principio. Conseguí pasarle el tamaño cuando el usario pulsa, pero sólo me sirve para la primera vuelta, cuandolas fotos han el primer loop, vuelve a tomar el valor incial y estamos como al principio.

El movimiento de la marquesina me queda así:

Código:
var headline_count;
var headline_interval;
var old_headline = 0;
var current_headline = 0;

          
$(document).ready(function(){
 headline_count = $("div.headline").size();
 $("div.headline:eq("+current_headline+")").css('top','5px');
 headline_interval = setInterval(headline_rotate, 3500);          	  $('#marquesina').hover(function() {
  clearInterval(headline_interval);
  }, function() {
  headline_interval = setInterval(headline_rotate, 3500); headline_rotate();
            });
 	     });
   
function headline_rotate(alto) {
 this.alto = alto;
 if(this.alto == 0){//para que funcione la primera vez
 current_headline = (old_headline + 1) % headline_count;
 $("div.headline:eq(" + old_headline + ")").animate({top: -746},"slow", function(h) {
  $(this).css('top','746px');
  });
  $("div.headline:eq(" + current_headline + ")").show().animate({top: 5},"slow");  
  old_headline = current_headline;
  }else{
 current_headline = (old_headline + 1) % headline_count;
 $("div.headline:eq(" + old_headline + ")").animate({top: -this.alto},"slow", function(h) {
  $(this).css('top',this.alto + 'px');
  });
  $("div.headline:eq(" + current_headline + ")").show().animate({top: 5},"slow");  
  old_headline = current_headline;
}
}
Me temo que tengo que darle un par de vueltas más.

Muchas gracias de todas formas.
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 03:59.