Foros del Web » Programando para Internet » Jquery »

Evitar que una función se repita

Estas en el tema de Evitar que una función se repita en el foro de Jquery en Foros del Web. Hola! Mi problema es el siguiente. Tengo varias funciones que cumplen su cometido pero se repiten en ciertas condiciones. Una función es para desplegar un ...
  #1 (permalink)  
Antiguo 23/03/2015, 09:59
liranan
Invitado
 
Mensajes: n/a
Puntos:
Evitar que una función se repita

Hola!

Mi problema es el siguiente.

Tengo varias funciones que cumplen su cometido pero se repiten en ciertas condiciones.
Una función es para desplegar un menú al pasar el ratón sobre una imagen, la otra es hacer un scroll del body al hacer click sobre cierto texto.

Pongo el ejemplo del scrollTop:

Código jquery:
Ver original
  1. $('.trigger').click(function(e){
  2.                 e.preventDefault();
  3.                 $("body", "html").animate({
  4.                         scrollTop: $(this).offset().top
  5.                 }, 600);
  6.         });

Al cargar la página y hacer click sobre el gatillo concreto, se realiza la acción, el scroll baja hasta el punto deseado. Sin embargo, si una vez con la página ya en la posición correcta vuelvo a hacer click sobre el gatillo (una o varias veces), al intentar hacer scroll hacia arriba, la acción se ejecuta como si se quedara almacenada y esperara a poder ser ejecutada.

Lo mismo me ocurre con el menú desplegable, funciona, pero si paso varias veces el ratón sobre la imagen el menú comienza a abrirse y cerrarse un montón de veces.

Lo que me gustaría hacer es evitar esas repeticiones, que esas funciones no se quedaran en "stand by" esperando a ser ejecutadas sino que, si ya se han ejecutado o no hace falta ejecutarlas, se descartaran.

Espero haberme explicado bien.
Gracias.
Gonzalo.
  #2 (permalink)  
Antiguo 23/03/2015, 10:35
Avatar de Alexis88
Philosopher
 
Fecha de Ingreso: noviembre-2011
Ubicación: Tacna, Perú
Mensajes: 5.552
Antigüedad: 13 años
Puntos: 977
Respuesta: Evitar que una función se repita

Necesitas utilizar el método stop.

Saludos
__________________
«Juro por mi vida y mi amor por ella, que jamás viviré para el provecho de otro hombre, ni le pediré a otro hombre que viva para el mío».

Ayn Rand
  #3 (permalink)  
Antiguo 24/03/2015, 02:09
liranan
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Evitar que una función se repita

Gracias por la respuesta Alexis88, pero no consigo que me funcione correctamente.

La función ya no se ejecuta varias veces, pero ahora no muestra la animación sino que se coloca directamente en el final. Al ser un scroll, el efecto es similar a si usara un ancla de html normal y corriente.

El código ahora es este:

Código jquery:
Ver original
  1. $('.circle-image, .square-title').click(function(e){
  2.                 e.preventDefault();
  3.                 $("body", "html").animate({
  4.                         scrollTop: $(this).offset().top
  5.                 }, 600);
  6.                 $("body", "html").stop(true, true);
  7.         });

¿Alguna sugerencia?
Gracias

Última edición por liranan; 24/03/2015 a las 02:18
  #4 (permalink)  
Antiguo 24/03/2015, 08:41
Avatar de fede5426  
Fecha de Ingreso: diciembre-2014
Ubicación: Córdoba
Mensajes: 446
Antigüedad: 9 años, 11 meses
Puntos: 208
Respuesta: Evitar que una función se repita

Código Javascript:
Ver original
  1. $('.circle-image, .square-title').click(function(e){
  2.                 e.preventDefault();
  3.                 $("body", "html").stop(true).animate({
  4.                         scrollTop: $(this).offset().top
  5.                 }, 600);
  6.         });

Probalo asi
  #5 (permalink)  
Antiguo 24/03/2015, 09:58
Avatar de Alexis88
Philosopher
 
Fecha de Ingreso: noviembre-2011
Ubicación: Tacna, Perú
Mensajes: 5.552
Antigüedad: 13 años
Puntos: 977
Respuesta: Evitar que una función se repita

El método se debe de aplicar antes de la animación. Revisa los ejemplos del enlace que te dejé.

Saludos
__________________
«Juro por mi vida y mi amor por ella, que jamás viviré para el provecho de otro hombre, ni le pediré a otro hombre que viva para el mío».

Ayn Rand

Etiquetas: funcion, funciones
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 10:15.