Ver Mensaje Individual
  #30 (permalink)  
Antiguo 09/06/2009, 04:42
Avatar de Adler
Adler
Colaborador
 
Fecha de Ingreso: diciembre-2006
Mensajes: 4.671
Antigüedad: 17 años, 10 meses
Puntos: 126
Respuesta: Paginar por capas sin resetar la pagina

Hola

La verdad es que me ha dado pereza leer todo el tema. Aquí os dejo algo que hice hace algún tiempo. Se trata de mostrar una ventana de aviso al usuario, diciendole si tiene algún mensaje. Claro está que tendrás que modificarla, ya que esta es una ventana emergente, uso ASP, se consulta la bd cada X tiempo, etc..

Nota: Como se va a recibir javascript via ajax necesitarás
leerjsdeajax.js
Código javascript:
Ver original
  1. var tagScript = '(?:<script.*?>)((\n|\r|.)*?)(?:<\/script>)';
  2. /**
  3. * Eval script fragment
  4. * @return String
  5. */
  6. String.prototype.evalScript = function()
  7. {
  8.         return (this.match(new RegExp(tagScript, 'img')) || []).evalScript();
  9. };
  10. /**
  11. * strip script fragment
  12. * @return String
  13. */
  14. String.prototype.stripScript = function()
  15. {
  16.         return this.replace(new RegExp(tagScript, 'img'), '');
  17. };
  18. /**
  19. * extract script fragment
  20. * @return String
  21. */
  22. String.prototype.extractScript = function()
  23. {
  24.         var matchAll = new RegExp(tagScript, 'img');
  25.         return (this.match(matchAll) || []);
  26. };
  27. /**
  28. * Eval scripts
  29. * @return String
  30. */
  31. Array.prototype.evalScript = function(extracted)
  32. {
  33.                 var s=this.map(function(sr){
  34.                 var sc=(sr.match(new RegExp(tagScript, 'im')) || ['', ''])[1];
  35.                 if(window.execScript){
  36.                 window.execScript(sc);
  37.                 }
  38.                 else
  39.                 {
  40.                  window.setTimeout(sc,0);
  41.                 }
  42.                 });
  43.                 return true;
  44. };
  45. /**
  46. * Map array elements
  47. * @param {Function} fun
  48. * @return Function
  49. */
  50. Array.prototype.map = function(fun)
  51. {
  52.         if(typeof fun!=="function"){return false;}
  53.         var i = 0, l = this.length;
  54.         for(i=0;i<l;i++)
  55.         {
  56.                 fun(this[i]);
  57.         }
  58.         return true;
  59. };


Código javascript:
Ver original
  1. <script type="text/javascript" src="./leerjsdeajax.js"></script>
  2. <script type="text/javascript">
  3.  function creaAjax(){
  4.     var ajaxs = ["Msxml2.XMLHTTP","Msxml2.XMLHTTP.4.0","Msxml2.XMLH TTP.5.0","Msxml2.XMLHTTP.3.0","Microsoft.XMLHTTP"];
  5.     var ajax = false;
  6.     for(var i=0 ; !ajax && i<ajaxs.length ; i++){
  7.         try{
  8.             ajax = new ActiveXObject(ajaxs[i]);   // Internet Explorer
  9.         }
  10.         catch(e) {
  11.             ajax = false;
  12.         }
  13.     }
  14.     if(!ajax && typeof XMLHttpRequest!='undefined') {
  15.         ajax = new XMLHttpRequest();  // Firefox, Opera 8.0+, Safari
  16.     }
  17.     return ajax;
  18. }
  19.  
  20.  
  21.  
  22.  
  23.  
  24. function Ventana() {
  25. var ajax=creaAjax();
  26.  
  27. var objetosel = document.getElementById("contenedor");
  28. ajax.open('GET','ventanamessenger_ajax.asp',true);
  29. ajax.send(null);
  30. ajax.onreadystatechange = function() {
  31.  
  32.         if (ajax==null){
  33.         alert ("Tu navegador web no soporta AJAX!");
  34.         return;
  35.     }
  36.  
  37.         if (ajax.readyState==1 || ajax.readyState==2 || ajax.readyState==3) {
  38.                                         objetosel.innerHTML = "Cargando ...";
  39.             }
  40.  
  41.                 else if (ajax.readyState==4){
  42.                     if(ajax.status==200){  
  43.  
  44.         var scs=ajax.responseText.extractScript();
  45.             objetosel.innerHTML = ajax.responseText.stripScript();
  46.         scs.evalScript();
  47.  
  48.  
  49.                    }
  50.                     else if (ajax.status==404)
  51.                                              {
  52.  
  53.                                     objetosel.innerHTML = "La dirección no existe";
  54.                                              }
  55.                                      else
  56.                                              {
  57.                                     objetosel.innerHTML = "Se ha producido un error.<br />Lo mas probable es que no hayas seleccionad una Fecha";
  58.                                              }
  59.                                     }
  60.                   }
  61.        
  62. }
  63.  
  64.  
  65.  
  66. window.setInterval("Ventana()",90000); // 10 minutos 600000
  67. window.onload=setTimeout("Ventana()",1000); // 1 segundos
  68. //window.onload = Ventana;
  69. </script>
  70. </head>
  71. <body>
  72. <table border="1" width="800px">
  73. <tr height="500px">
  74. <td>hola
  75. </td>
  76. </tr>
  77. </table>
  78.  
  79. <style type="text/css"><!--
  80. #VentanaTipoMsgr { z-index:15000; right:2px; bottom:-2px; position:fixed; padding:0px; width:207px; height:123px; background:transparent url(cuerpo_ventanamodal.gif); }
  81. #VentanaTipoMsgr a { font-family:tahoma; font-size:9px; color:#59616E; font-weight:bold; text-decoration:none; }
  82. #btn_vm_paginador a{ background-color:#FFFFFF; color:#59616E; font-family:Arial, Helvetica, sans-serif; font-size:9px; font-weight:900;text-decoration:none;padding:2px; border: 1px solid #C9C9C9;border-width: 1px 1px 1px 1px; }
  83. -->
  84. </style>
  85. <div id="contenedor"></div>
  86.  
  87. <div id="VentanaTipoMsgr" style="bottom:-200px; display:none;">
  88. <div style="position:absolute; top:3px; right:5px;cursor: pointer;"><img id="btn_vm_cerrar" src="cuerpo_cerrar.gif" width="15px" height="20px" border="0" /></div>
  89. <div id="CabezaMsg" style="padding:6px 6px 6px 3px; text-align:left; font-family:tahoma; font-size:11px; font-weight:bold; color:#000000;"></div>
  90. <div id="CuerpoMsg" style="position:absolute; top:30px; right:5px; left:5px; text-align:left; color: #59616E; font-size: 9px; font-family:verdana;"></div>
  91. <div style="clear:both;"></div>
  92. </div>
  93.  
  94. </body>


ventanamessenger_ajax.asp

Código asp:
Ver original
  1. SQL ="SELECT campos FROM tabla "
  2. set rs = oConn.Execute(SQL)
  3.  
  4. registros = rs.getrows()
  5. rs.Close
  6. Set rs = Nothing
  7. oConn.Close
  8. Set oConn = Nothing
  9.  
  10. TextoMensaje = ""
  11. IF UBound(registros,2) = 0 then
  12. TextoMensaje =  "'De: <a href=autor target=_blank>" & registros(De,0) & "</a><br />Asunto: <a href=mensaje target=_blank>" & registros(Asunto,0) & "</a><br/>Mensaje: " & Mid(registros(Contenido,0),1,80) &"'"
  13.  
  14. ELSE
  15.  
  16. For i = 0 to UBound(registros,2)
  17. If i <> 0 then
  18. TextoMensaje = TextoMensaje & ","
  19. End If
  20.  
  21. If i = 0 then ' es el primero de varios
  22. TextoMensaje = TextoMensaje & "'De: <a href=\'autor\' target=\'_blank\'>" & registros(De,i) & "</a><br />Asunto: <a href=\'mensaje\' target=\'_blank\'>" & registros(Asunto,i) & "</a><br/>Mensaje: " & Mid(registros(Contenido,i),1,80) &"<br /><br /><div id=\'btn_vm_paginador\' align=\'center\'><a href=\'javascript:void(0);\' onclick=\'vm_paginador("&i+1&");\'>Siguiente &raquo;</a></div>'"
  23. Elseif i < UBound(registros,2) then
  24. 'TextoMensaje = TextoMensaje & "'De: <a href=\'autor\' target=_blank\'>" & registros(De,i) & "</a><br />Asunto: <a href=\'mensaje\' target=\'_blank\'>" & registros(Asunto,i) & "</a><br/>Mensaje: " & Mid(registros(Contenido,i),1,80) &"<br /><br /><div id=\'btn_vm_paginador\' align=\'center\' onclick=\'vm_paginador("&i-1&");\'>&laquo; Anterior</div>&nbsp;&nbsp;&nbsp;<div id=\'btn_vm_paginador\' align=\'center\'  onclick=\'vm_paginador("&i+1&");\'>Siguiente &raquo;</div>'"
  25. TextoMensaje = TextoMensaje & "'De: <a href=\'autor\' target=_blank\'>" & registros(De,i) & "</a><br />Asunto: <a href=\'mensaje\' target=\'_blank\'>" & registros(Asunto,i) & "</a><br/>Mensaje: " & Mid(registros(Contenido,i),1,80) &"<br /><br /><div id=\'btn_vm_paginador\' align=\'center\'><a href=\'javascript:void(0);\' onclick=\'vm_paginador("&i-1&");\'>&laquo; Anterior</a>&nbsp;&nbsp;&nbsp;<a href=\'javascript:void(0);\' onclick=\'vm_paginador("&i+1&");\'>Siguiente &raquo;</a></div>'"
  26. Else ' es el último
  27. TextoMensaje = TextoMensaje & "'De: <a href=\'autor\' target=\'_blank\'>" & registros(De,i) & "</a><br />Asunto: <a href=\'mensaje\' target=\'_blank\'>" & registros(Asunto,i) & "</a><br/>Mensaje: " & Mid(registros(Contenido,i),1,80) &"<br /><br /><div id=\'btn_vm_paginador\' align=\'center\'><a href=\'javascript:void(0);\' onclick=\'vm_paginador("&i-1&");\'>&laquo; Anterior</a></div>'"
  28. End If
  29.  
  30. Next 'i
  31. END IF
  32. %>
  33.  
  34.  
  35. <script type="text/javascript">
  36. var msg = new Array(<%=TextoMensaje%>); // En este arreglo está todo los que nos trae la consulta
  37. var Ventana_Modal = {};
  38. Ventana_Modal.banner = {
  39.  posicion : {
  40.  bajar_pos : '-127',
  41.  subir_pos : '-4'
  42.  }
  43. };
  44. Ventana_Modal.banner.hoja = 'posicion';
  45. // Variables Globales
  46. var vmDivID = 'VentanaTipoMsgr';
  47. var Retraso = 5 * msg.length;
  48.  
  49.  
  50. vm_retraso(Retraso);
  51.  
  52. //--[Funciones]-----------------------------------------------------------------//
  53.  
  54. var btn_vm_cerrar_elem = document.getElementById('btn_vm_cerrar');
  55. btn_vm_cerrar_elem.onclick = function (){
  56. vm_mover(vmDivID,Ventana_Modal.banner[Ventana_Modal.banner.hoja].bajar_pos, "' + msg[0] + '",'bajar');
  57. return false;
  58. }
  59.  
  60. //var btn_vm_paginador_msg = document.getElementById('btn_vm_paginador');
  61. //btn_vm_paginador_msg.onclick = function (){
  62. //vm_paginador(elID);
  63. //return false;
  64. //}
  65.  
  66. function vm_paginador(mensajeID) {
  67.  var soportado = (document.getElementById);
  68. if (!soportado) return;
  69. var elMsg = document.getElementById('CuerpoMsg');
  70. elMsg.innerHTML = msg[mensajeID];
  71. }
  72.  
  73.  
  74. function vm_retraso(seg){
  75. seg = seg || 0;
  76. setTimeout('vm_mover(vmDivID,' + Ventana_Modal.banner[Ventana_Modal.banner.hoja].subir_pos + ', "' + msg[0] + '");',1000 * seg);
  77. setTimeout('vm_mover(vmDivID,' + Ventana_Modal.banner[Ventana_Modal.banner.hoja].bajar_pos + ', "' + msg[0] + '",\'bajar\');',15000 * msg.length);
  78. }
  79.  
  80. var elemento
  81. var alto
  82. var leyenda
  83. function vm_mover(elemID,x,txt,direccion){
  84. elemento = elemID
  85. alto = x
  86. leyenda =  txt
  87.  
  88.  var soportado = (document.getElementById);
  89. if (!soportado) return;
  90. var DIVruta = document.getElementById(elemento);
  91. var Cortina = parseInt(DIVruta.style.bottom);
  92. var cabecera = document.getElementById('CabezaMsg');
  93. var texto = document.getElementById('CuerpoMsg');
  94.  
  95. DIVruta.style.display = 'block';
  96. if(direccion == 'bajar'){
  97.  
  98. if(Cortina > x){
  99. Cortina -= 5;
  100. DIVruta.style.bottom = Cortina + 'px';
  101. setTimeout('vm_mover(elemento,alto,leyenda,\'bajar\');',15);
  102. }
  103. }else{
  104. if(Cortina < x){
  105. Cortina += 5;
  106. DIVruta.style.bottom = Cortina + 'px';
  107. cabecera.innerHTML = "Tienes (<span style='color:#FF0000;'><%=UBound(registros,2)+1%></span>) mensajes sin leer";
  108. texto.innerHTML = leyenda;
  109. setTimeout('vm_mover(elemento, alto,leyenda);',15);
  110. }
  111.  }
  112. }
  113. </script>

Suerte
__________________
Los formularios se envían/validan con un botón Submit
<input type="submit" value="Enviar" style="background-color:#0B5795; font:bold 10px verdana; color:#FFF;" />