Foros del Web » Programando para Internet » Javascript » Frameworks JS »

ver mas estilo facebook para contenido dinamico

Estas en el tema de ver mas estilo facebook para contenido dinamico en el foro de Frameworks JS en Foros del Web. Hola. tengo una capa que tiene el contenido de una noticia, tiene titulo, resumen y cuerpo. entonces quiero que al darle clic a un enlace ...
  #1 (permalink)  
Antiguo 05/05/2012, 23:02
 
Fecha de Ingreso: abril-2010
Ubicación: Ocaña
Mensajes: 32
Antigüedad: 14 años
Puntos: 0
Busqueda ver mas estilo facebook para contenido dinamico

Hola. tengo una capa que tiene el contenido de una noticia, tiene titulo, resumen y cuerpo. entonces quiero que al darle clic a un enlace que diga "ver mas" me oculte el el resumen y me muestre el cuerpo de la noticia. lo he intentado hacer con jquery pero como las capas se repiten según el numero de noticias al darle clic en una me oculta todas. es algo así:

Código PHP:
Ver original
  1. <script type="text/javascript">
  2. $(function(){
  3.               $(".ver").click( function(){
  4.                   $(".resumen").next().hide('slow');
  5.                   $(".cuerpo").next().show('slow');
  6.               });
  7.             });
  8. </script>
  9. for($i=0;$i<count($num_noticias);$i++){
  10.  <div class="titulo_proy"><?php echo titulo_noticia ?></div>
  11.      <div class="caja_conten" >
  12. <div class="texto_izquierda">
  13. <div class="resumen"><?php echo resumen_noticia?></div>
  14. <div class="ver">ver mas..</div>
  15. <div class="cuerpo">echo texto_noticia ?></div>
  16.  </div>
  17. }
me podrian sugerir algo o lo podria hacer de otra forma gracias
  #2 (permalink)  
Antiguo 06/05/2012, 03:31
Avatar de Naahuel  
Fecha de Ingreso: marzo-2011
Ubicación: localhost
Mensajes: 796
Antigüedad: 13 años, 1 mes
Puntos: 192
Respuesta: ver mas estilo facebook para contenido dinamico

Mmm. Hay un par de cosas raras ahí. No sólo en el script, sino en tu HTML también. No es semántico y tenés contenido duplicado. Yo haría algo así:

HTML:
Código HTML:
Ver original
  1. <!DOCTYPE html>
  2. <meta charset="utf-8" />
  3. <link rel="stylesheet" href="estilos.css" />
  4.  
  5. <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js"></script>
  6. <script type="text/javascript" src="ver-mas.js"></script>
  7.  
  8. <title>Test</title>
  9. </head>
  10.     <div class="noticia-contenedor">
  11.         <h2 class="noticia-titulo">Noticia X</h2>
  12.         <div class="noticia-cuerpo">
  13.             <p>Lorem ipsum dolor sit amet, ephesiorum quod non dum veniens indica enim materiam ad quia. Testare in modo invenit iuvenem patre nihil labore in lucem concitaverunt in. Famulus prope sola habiturus in modo invenit. Neminem habere matrem vel regio hinc Agimus nolo accipies, nescimus de me missam canticis in rei finibus veteres hoc. Africus hortamento laetus moritur ad nomine Stranguillio in, x domum sum ad te sed quod eam est cum!</p>
  14.             <p>Lorem ipsum dolor sit amet, ephesiorum quod non dum veniens indica enim materiam ad quia. Testare in modo invenit iuvenem patre nihil labore in lucem concitaverunt in. Famulus prope sola habiturus in modo invenit. Neminem habere matrem vel regio hinc Agimus nolo accipies, nescimus de me missam canticis in rei finibus veteres hoc. Africus hortamento laetus moritur ad nomine Stranguillio in, x domum sum ad te sed quod eam est cum!</p>
  15.         </div>
  16.     </div>
  17.    
  18.    
  19.     <div class="noticia-contenedor">
  20.         <h2 class="noticia-titulo">Noticia Y</h2>
  21.         <div class="noticia-cuerpo">
  22.             <p>Lorem ipsum dolor sit amet, ephesiorum quod non dum veniens indica enim materiam ad quia. Testare in modo invenit iuvenem patre nihil labore in lucem concitaverunt in. Famulus prope sola habiturus in modo invenit. Neminem habere matrem vel regio hinc Agimus nolo accipies, nescimus de me missam canticis in rei finibus veteres hoc. Africus hortamento laetus moritur ad nomine Stranguillio in, x domum sum ad te sed quod eam est cum!</p>
  23.             <p>Lorem ipsum dolor sit amet, ephesiorum quod non dum veniens indica enim materiam ad quia. Testare in modo invenit iuvenem patre nihil labore in lucem concitaverunt in. Famulus prope sola habiturus in modo invenit. Neminem habere matrem vel regio hinc Agimus nolo accipies, nescimus de me missam canticis in rei finibus veteres hoc. Africus hortamento laetus moritur ad nomine Stranguillio in, x domum sum ad te sed quod eam est cum!</p>
  24.         </div>
  25.     </div>
  26.  
  27.    
  28.     <div class="noticia-contenedor">
  29.         <h2 class="noticia-titulo">Noticia Z</h2>
  30.         <div class="noticia-cuerpo">
  31.             <p>Lorem ipsum dolor sit amet, ephesiorum quod non dum veniens indica enim materiam ad quia. Testare in modo invenit iuvenem patre nihil labore in lucem concitaverunt in. Famulus prope sola habiturus in modo invenit. Neminem habere matrem vel regio hinc Agimus nolo accipies, nescimus de me missam canticis in rei finibus veteres hoc. Africus hortamento laetus moritur ad nomine Stranguillio in, x domum sum ad te sed quod eam est cum!</p>
  32.             <p>Lorem ipsum dolor sit amet, ephesiorum quod non dum veniens indica enim materiam ad quia. Testare in modo invenit iuvenem patre nihil labore in lucem concitaverunt in. Famulus prope sola habiturus in modo invenit. Neminem habere matrem vel regio hinc Agimus nolo accipies, nescimus de me missam canticis in rei finibus veteres hoc. Africus hortamento laetus moritur ad nomine Stranguillio in, x domum sum ad te sed quod eam est cum!</p>
  33.         </div>
  34.     </div>
  35. </body>
  36. </html>

Observá el nuevo enmarcado, nada de contenido duplicado (Excepto los párrafos de ejemplo, obvio, que se supone son diferentes) y mucho más semántico. Además, no tenemos el "ver más". Eso lo agregamos con JS para que haya buena degradación.

El JS:
Código Javascript:
Ver original
  1. $(function(){
  2.     // Agregamos la clase js al body para indicar JS activo
  3.     $('body').addClass('js');
  4.    
  5.     // Agregamos el link de ver mas
  6.     $('.noticia-cuerpo').after('<p><a href="#" class="noticia-ver-mas">Ver m&aacute;s...</a></p>');
  7.    
  8.     // Agregamos la funcion al evento click al ver mas
  9.     $('.noticia-ver-mas').click(function(e){
  10.         e.preventDefault();
  11.         var $elem = $(this);
  12.         var $cuerpo_noticia = $elem.parent().siblings('.noticia-cuerpo');
  13.         //obtener los elementos interiores para saber su altura. En este caso los <p>
  14.         var $cuerpo_noticia_elementos = $cuerpo_noticia.find('p');
  15.         var alto_actual = $cuerpo_noticia.outerHeight();
  16.         var alto_nuevo = 0;
  17.        
  18.         $cuerpo_noticia_elementos.each(function(){
  19.             //Sumar las alturas de los elementos interiores para calcular nueva altura
  20.             alto_nuevo += $(this).outerHeight() //Alto del elemento
  21.                         + parseInt($(this).css('margin-top'),10) //Margen superior
  22.                         + parseInt($(this).css('margin-bottom'),10); //Margen inferior
  23.         });
  24.        
  25.         $cuerpo_noticia
  26.             .css({
  27.                 maxHeight : 9999,
  28.                 height: alto_actual
  29.             })
  30.             .animate({
  31.                 height: alto_nuevo
  32.             });
  33.        
  34.         $elem.fadeOut();
  35.     });
  36. });

Primero agregamos la clase js al body, así sabemos cuando JS está activo y por CSS estilizamos los elementos sólo bajo esta condición.

La forma de animar la altura es medio rebuscada. Se podría evitar los cálculos de alturas de los elementos interiores si animáramos el max-height. Pero entonces tendríamos que dar un valor grande, que no conocemos, que podría fallar y que además alteraría la velocidad de nuestra animación.

El CSS:
Código CSS:
Ver original
  1. .js .noticia-cuerpo{
  2.     /* Limitamos el alto del cuerpo de la noticia
  3.     cuando JS está activo solamente */
  4.     max-height: 50px;
  5.     overflow: hidden;
  6. }

Básicamente limitamos la altura del elemento (sólo si JS está activo).
Esta parte se puede hacer más bonita, podés usar degradados o algo así (ejemplo: http://css-tricks.com/text-fade-read-more/ )

Demos:

Con JS: http://jsbin.com/uletis
Con JS desactivado: http://jsbin.com/uletis/2

Fijate que sin JS podemos ver la noticia completa, lo cual es óptimo.
__________________
nahueljose.com.ar

Etiquetas: contenido, dinamico, estilo, facebook, javascript, jquery, php
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 07:47.