Foros del Web » Programando para Internet » Jquery »

Como hacer lo siguente en jquery

Estas en el tema de Como hacer lo siguente en jquery en el foro de Jquery en Foros del Web. Saludos amigos del foro, Estoy practicando en mi tiempo libre un poco de jquery, resulta que tengo un div que cuando lo muestro me sale ...
  #1 (permalink)  
Antiguo 19/08/2016, 00:59
Avatar de adryan310  
Fecha de Ingreso: septiembre-2012
Mensajes: 450
Antigüedad: 11 años, 7 meses
Puntos: 3
Pregunta Como hacer lo siguente en jquery

Saludos amigos del foro,

Estoy practicando en mi tiempo libre un poco de jquery, resulta que tengo un div que cuando lo muestro me sale un overlay y un gif en el centro junto con un mensaje, es esto:
Código HTML:
Ver original
  1. <div class="contact-modal show">
  2.         <div class="loading show" id="div_message">
  3.             <img src="images/sending.gif">
  4.             <span>enviando</span-->
  5.         </div>
  6. </div>
  7. <div class="contact-modal-overlay show"></div>

Cuando presiono un boton en jquery envio unas variables por ajax a un PHP e imprimo lo que me devuelva dicho archivo, todo esto me funciona bien, pero yo quiero que el div donde esta el GIF se quede por al menos unos 5 segundos y seguidamente tanto el GIF como el <SPAN> que dice ENVIANDO desaparezca y se muestre otra imagen y otro <SPAN> y esto ultimo se quede visible otros 5 segundos y despues se cierre el overlay.

Este es mi codigo JQUERY que dicho sea de paso me funciona bien, pero el GIF pasa muy rapido, como hacer para que se quede 5 segundos mientras se envia, y cuando ya la tenga respuesta mostrar esa respuesta durante otros 5 segundos ?
Código Javascript:
Ver original
  1. $.ajax({
  2.      data:  parameters,
  3.      url:   '../mail.php',
  4.      type:  'post',
  5.      beforeSend: function () {
  6.             $(".show").css("display","block");
  7.      },
  8.      success:  function (response) {
  9.             $('#div_message').empty().html('<img src="images/yes.png"><span>'+response+'</span>');
  10.             setTimeout(function() {
  11.                     $(".show").css("display","none");
  12.                     $(":text").val("");
  13.                     $("#txtPhone").val("");
  14.                     $("#contactformsubmit").blur();
  15.             },5000);
  16.       }).fail( function( jqXHR, textStatus, errorThrown ) {
  17.                window.console.log('El error es: ' + textStatus)
  18.       });

Muchas gracias por la ayuda que me puedan brindar
  #2 (permalink)  
Antiguo 19/08/2016, 12:45
Avatar de adryan310  
Fecha de Ingreso: septiembre-2012
Mensajes: 450
Antigüedad: 11 años, 7 meses
Puntos: 3
Pregunta Respuesta: Como hacer lo siguente en jquery

Gente, he estado investigando, ahora este es mi actual codigo:
Código Javascript:
Ver original
  1. function restore(){
  2.   $("body").css("overflow", "auto");
  3.   $('#div_message').empty().html('<img src="images/sending.gif"><span>enviando</span>');
  4.   $(":text").val("");
  5.   $("#txtPhone").val("");
  6.   $("#contactformsubmit").blur();  
  7. }
  8.  
  9. $.ajax({
  10.    data:  parameters,
  11.    url:   '../mail.php',
  12.    type:  'post',
  13.    success:  function (response) {
  14.        $(".show").show();   //mostramos el overlay y lo que hay en el.
  15.        $("body").css("overflow", "hidden"); // desactivamos el scrolling
  16.        $("#div_message").delay(5000).hide(600); //mostramos el GIF por 5 segundos
  17.        $('#div_message').empty().html('<img src="images/yes.png"><span>'+response+'</span>'); // colocamos el contenido nuevo
  18.        $("#div_message").show(); // mostramos el nuevo contenido
  19.                                          
  20.     $(".show").delay(5000).hide(600); // cerramos el overlay definitivamente despues de 5 segundos.    
  21.         setTimeout("restore()", 6000);  // al sexto segundo restauramos los campos y todo queda por defecto            
  22.                                        
  23. }
  24. }).fail( function( jqXHR, textStatus, errorThrown ) {
  25.                                window.console.log('El error es: ' + textStatus)
  26. });
Esto me sirve pero a medias ya que me muestra la respuesta de ajax, pero no entiendo porque se va directo a eso si antes le estoy diciendo que me muestre el div donde se muestra el gif que dice enviando durante 5 segundos, alguna ayuda ?
  #3 (permalink)  
Antiguo 20/08/2016, 08:07
Avatar de elporfirio  
Fecha de Ingreso: octubre-2013
Mensajes: 37
Antigüedad: 10 años, 6 meses
Puntos: 4
Respuesta: Como hacer lo siguente en jquery

Hola me gusto mucho tu reto para empezar la mañana

===

Ahora bien, yo soy mucho de separar todo en funciones y llamarlas cuando se necesite e hice algo similar a lo tuyo:

Código Javascript:
Ver original
  1. $(document).ready(function(){
  2.   var $form = $('form');
  3.   var posting;
  4.   var divCargando = $(".cargando");
  5.   var divOkay = $(".okay");
  6.   var url = '/echo/json/';
  7.   var datos;
  8.  
  9.   $form.on('submit', function(e){
  10.     e.preventDefault();
  11.     //Se muestra el cargando antes de enviar.
  12.     mostrarLoading();
  13.    
  14.     var emailValue = $form.find('#email').val();
  15.     datos = {json: JSON.stringify({email: emailValue})}
  16.    
  17.     posting = $.post(url, datos);
  18.     posting.done(terminoEnvio);
  19.     posting.fail(errorEnvio);
  20.   });
  21.  
  22.   function terminoEnvio(result){
  23.         //esperar 2 segundos despues de que se reciba la respuesta
  24.        setTimeout(function(){
  25.          
  26.          ocultarLoading();
  27.          mostrarOkay();
  28.  
  29.                     //esperar 2 segundos antes de ocultar el okay
  30.          setTimeout(ocultarOkay, 2000);
  31.        }, 2000);
  32.   }
  33.  
  34.   function errorEnvio(error){
  35.       alert('ocurrio un error');
  36.       console.error(error);
  37.   }
  38.  
  39.   function mostrarLoading(){
  40.     divCargando.show("slow");
  41.   }
  42.  
  43.   function ocultarLoading(){
  44.     divCargando.hide("slow");
  45.   }
  46.  
  47.   function mostrarOkay(){
  48.     divOkay.show('slow');
  49.   }
  50.  
  51.   function ocultarOkay(){
  52.     divOkay.hide('slow');
  53.   }
  54. });


En cuanto a las imagenes yo las cargue desde el inicio, pero permanecen ocultas.

El html:
Código HTML:
Ver original
  1.      <input type="email" name="email" id="email" value="[email protected]" required>
  2.      <button>
  3.      Enviar email
  4.      </button>
  5. </form>
  6.  
  7. <div class="cargando">
  8.   <img src="http://onatech.com.mx/images/loading-circle.gif" width="150">
  9.   <br>
  10.   Enviando ...
  11. </div>
  12.  
  13. <div class="okay">
  14.   <img src="https://static.mytaxi.com/images/layout-1/icons/success.svg" width="150">
  15.   <br>
  16.   Enviado correctamente.
  17. </div>

EL CSS:
Código CSS:
Ver original
  1. .cargando, .okay {
  2.   display: none;
  3. }

y aquí un ejemplo funcionando:


https://jsfiddle.net/elporfirio/nhybxmj6/


Saludos.

====
https://blog.elporfirio.com
__________________
visita http://elporfirio.com o habrá tabla ¬¬
  #4 (permalink)  
Antiguo 23/08/2016, 15:15
Avatar de adryan310  
Fecha de Ingreso: septiembre-2012
Mensajes: 450
Antigüedad: 11 años, 7 meses
Puntos: 3
De acuerdo Respuesta: Como hacer lo siguente en jquery

Gracias elporfirio

Me sirvio de mucho tu ayuda, te dejo puntos amigo

Etiquetas: Ninguno
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 12:06.