2012-03-25 30 views
13

así que soy muy nuevo en Javascript y Jquery. Lo que me gustaría crear es una página de dos columnas en la que los enlaces de la columna izquierda causen un div a la derecha para deslizar horizontalmente de izquierda a derecha, y deslizarse fuera de la vista cuando se hace clic nuevamente. Sé que necesito usar el efecto de diapositiva, pero tengo problemas para implementarlo de manera que cada enlace individual hace que se desplace un div diferente ... Intenté ajustar algunos jsfiddles que encontré en las búsquedas de Google, pero Estoy bastante perdido cuando se trata de javascript.deslizando divs horizontalmente con JQuery

Hasta ahora, este es el único violín que he sido capaz de ajustar con éxito ... http://jsfiddle.net/bridget_kilgallon/HAQyK/
pero aquellos deslizante verticalmente, y cargar todos los divs cuando se hace clic.

Aquí está un violín que he creado para la PageLayout me gustaría sin javascript ... http://jsfiddle.net/bridget_kilgallon/NhanG/

Por favor, ayuda! :) -Bridget

Respuesta

34

Lamentablemente, no hay una animación de diapositivas 'horizontal' ya preparada con jQuery. A menos que vaya con paquetes más grandes como jQuery UI. Pero no creo que sea necesario.

Lo único que desea es un uso creativo de la función animate() en jQuery para lograr un efecto.

No sabía cuál le gustaría ir con puesto que la descripción era vaga así que hice 2 ejemplos de efectos menores en el panel de conmutación:

http://jsfiddle.net/sg3s/rs2QK/ - Este panel se desliza abierto por la izquierda, para acercarse a la derecha

http://jsfiddle.net/sg3s/RZpbK/ - Los paneles se abren de izquierda a derecha y cerca de la izquierda antes de abrir el nuevo.

Recursos:

no se puede hacer esto con CSS puro, aún no de todos modos. El soporte para transiciones es básico y está limitado a prácticamente solo navegadores basados ​​en webkit. Entonces, como necesitará jQuery, hágalo de forma inteligente, pero igual debe asegurarse de darle el estilo que sea posible con CSS antes de usar JS. Tenga en cuenta que no uso ningún estilo/manipulación visual en mi JS.

+0

El primer violín es perfecto. Me aseguraré de crear mi CSS antes de agregar el script como sugirió. Esto me hizo la vida mucho más fácil, ¡muchas gracias! : D –

+0

Piense en lo que quiere hacer y coloque sus elementos en CSS de forma correspondiente para que estén en la posición más óptima para comenzar tan pronto como sea necesario. – sg3s

+0

Aquí hay un violín con lo que hasta ahora he aprendido: http://jsfiddle.net/bridget_kilgallon/sMDyB/4/ el violín funciona bien pero las transiciones no funcionan en dreamweaver ... ¿Alguna idea? Gracias de nuevo -BK –

1

Puede usar el módulo effects de jQuery UI y usar show('slide'). Mire http://jsfiddle.net/HAQyK/1/

+0

Aquí hay otro violín: http://jsfiddle.net/bridget_kilgallon/6eKGj/ Esto es casi exactamente lo que estoy buscando excepción. .. 1. Todos los divs aparecen cuando se hace clic en los enlaces: ¿cómo puedo enlazar con cada div individual? 2. ¿Hay alguna forma de hacer que el div se deslice hacia atrás cuando se hace clic en el enlace por segunda vez? (es decir, se desliza hacia la derecha en las diapositivas de click1 que quedaron fuera de la pantalla en click2) –

2

Sin usar JavaScript, está limitado a usar transiciones CSS, cuando estén disponibles. Y aunque estos son bastante impresionantes, no son particularmente buenos, hasta donde he encontrado, para la animación condicional; básicamente pueden animar desde un punto de partida a otro punto y luego volver (en función de los eventos nativos del navegador disponibles en el navegador), con JS puede agregar/eliminar clases adicionales y hacer que los elementos div se muevan al contenido de su corazón, pero no con CSS 'solo' (aunque me gustaría que se demuestre lo contrario).

El mejor que he podido llegar a, hasta ahora, es:

#left { 
    float:left; 
    width:200px; 
} 
.right { 
    height: 0; 
    background-color: #fff; 
    margin-left: 205px; 
    overflow: hidden; 
    -webkit-transition: all 1s linear; 
    -ms-transition: all 1s linear; 
    -o-transition: all 1s linear; 
    -moz-transition: all 1s linear; 
    transition: all 1s linear; 
} 
.right:target { 
    display: block; 
    height: 5em; 
    background-color: #ffa; 
    -webkit-transition: all 1s linear; 
    -ms-transition: all 1s linear; 
    -o-transition: all 1s linear; 
    -moz-transition: all 1s linear; 
    transition: all 1s linear; 
}​ 

JS Fiddle demo.

Y esto no se desliza lateralmente (aunque puede hacerlo si lo desea) porque no se veía bien, dado el nuevo reflujo de contenido que estaba sucediendo a medida que cambiaba el ancho del elemento.


Editado porque creo que pude haber malinterpretado una parte de la pregunta original:

... Me gustaría sin javascript

Siendo ese el caso , y el comentario (a continuación) parece sugerir que jQuery es una opción aceptable, esto podría valer la pena como demostración:

​$('#left a').click(
    function(){ 
     var div = $('div').not('#left').eq($(this).index('#left a')); 
     var others = $('div[data-visible="true"]'); 
     others.each(
      function(){ 
       $(this).animate({ 
        'left' : '2000px' 
       },1000,function(){ 
        $(this).removeAttr('style data-visible'); 
       }); 
      }); 
     if (div.attr('data-visible')) { 
      div.animate({ 
       'left' : '2000px' 
      },1000,function(){ 
       $(this).removeAttr('style data-visible'); 
      }); 
     } 
     else { 
      div.animate({ 
       'left' : '210px' 
      },1000).attr('data-visible',true); 
     } 
    });​​​​​​​​ 

JS Fiddle demo.

Referencias:

+0

Muy bien, gracias por la respuesta. Estoy impresionado de que no necesitaras un script para hacer esto. Sé que puedes usar la función animada para cambiar el ancho del div para crear una diapositiva horizontal, pero tampoco me entusiasmaba el ancho del cambio de contenido (creo que ese es el reflujo al que te refieres). No me opongo al uso de jquery para crear la diapositiva, simplemente soy muy nuevo. ¿Conoces por casualidad un script que creará este efecto? –

+0

Sí; Creo que entendí mal lo que querías decir cuando leí el mensaje "Me gustaría sin ningún javascript". ... ha sido un día largo ... =/Y no sé sobre un guión preexistente (aunque sospecho que hay muchos), pero aquí hay uno que parece funcionar. Si ve la edición, siga el '


' =) –

+0

rad. ¡eso es dulce! El único problema sería al hacer clic en el mismo enlace dos veces las diapositivas div a lo largo de todo el camino. –

0

Aquí está el código que desea. Está demostrado que funciona en IE, Safari, Chrome, Firefox, etc.

Aquí está la parte HTML.

<div id="slide-wrap" style="width:1000px; height:200px; overflow:hidden; padding:0 auto;"> 
     <div id="inner-wrap" style="float:left;"> 
      <!-- 'Put Inline contains here like below.' --> 
      <div class='containBox' style="width:250px; height:100%; float:left; display:inline-block;"></div> 
      <!-- ... --> 
      <div class='containBox' style="width:250px; height:100%; float:left; display:inline-block;"></div> 
      <!-- 'Put Inline contains here like above.' --> 
     </div> 
     <div style="display: block; width:40px; height:60px; position: absolute; margin-left:0px; margin-top:40px"> 
      <img id='scroll_L_Arrow' src='../assets/img/l-arrow.png' onclick="scrollThumb('Go_L')"/> 
     </div> 
     <div style="display: block; width:40px; height:60px; position: absolute; margin-left:960px; margin-top:40px"> 
      <img id='scroll_R_Arrow' src='../assets/img/r-arrow.png' onclick="scrollThumb('Go_R')"/> 
     </div> 
    </div> 

Aquí está jQuery parte en la función de JavaScript.

 function scrollThumb(direction) { 
     if (direction=='Go_L') { 
      $('#slide-wrap').animate({ 
       scrollLeft: "-=" + 250 + "px" 
      }, function(){ 
       // createCookie('scrollPos', $('#slide-wrap').scrollLeft()); 
      }); 
     }else 
     if (direction=='Go_R') { 
      $('#slide-wrap').animate({ 
       scrollLeft: "+=" + 250 + "px" 
      }, function(){ 
       // createCookie('scrollPos', $('#slide-wrap').scrollLeft()); 
      }); 
     } 
     } 

Para esconder las flechas por favor, mira aquí. Detect end of horizontal scrolling div with jQuery

0
$(function() { 
$("#wizardV").steps({ 
    headerTag: "h2", 
    bodyTag: "section", 
    transitionEffect: "slideLeft", 
    stepsOrientation: "vertical" 
}); 
}); 

* // asistente es un div que contiene todos sus contenidos

Cuestiones relacionadas