2012-03-25 24 views
13

, więc jestem bardzo nowy w JavaScript i Jquery. To, co chcę utworzyć, to strona z dwiema kolumnami, w której linki w lewej kolumnie powodują przesunięcie po prawej stronie elementu div, w poziomie w lewo i w prawo, po kliknięciu ponownie znikną z widoku. Wiem, że potrzebuję użyć efektu przełączania slajdów, ale mam problem z zaimplementowaniem go w taki sposób, że każdy pojedynczy link powoduje przesunięcie innego elementu div ... Próbowałem zmodyfikować kilka jsfiddles, które znalazłem za pomocą wyszukiwań w Google, ale Jestem dość zagubiony, jeśli chodzi o javascript.Przesuwanie divs poziomo z JQuery

Jak dotąd jest to jedyny skrzypce byłem w stanie skutecznie dostosować ... http://jsfiddle.net/bridget_kilgallon/HAQyK/
ale tych slajdów pionowo i załadować wszystkie DIV po kliknięciu.

Oto skrzypce stworzyłem dla pagelayout chciałabym bez JavaScriptu ... http://jsfiddle.net/bridget_kilgallon/NhanG/

Proszę o pomoc! :) -Bridget

Odpowiedz

34

Niestety nie ma gotowej "poziomej" animacji slajdów z jQuery. Chyba że korzystasz z większych pakietów, takich jak jQuery UI. Ale nie sądzę, że jest to potrzebne.

Jedyne, czego potrzebujesz, to twórcze wykorzystanie funkcji animate() w jQuery w celu uzyskania efektu.

ja nie wiem który z nich, że chcesz iść ze skoro opis był niejasny więc zrobiłem 2 przykłady drobnych efektów w panelu przełączania:

http://jsfiddle.net/sg3s/rs2QK/ - Panel ten jeden zjeżdżalnie otwarte od lewej i aby zamknąć prawą stronę:

http://jsfiddle.net/sg3s/RZpbK/ - Panele przesuwają się od lewej do prawej strony i blisko lewej strony, otwierając nową.

Zasoby:

Nie można tego zrobić z czystym CSS, jeszcze nie tak czy inaczej. Obsługa przejść jest podstawowa i ogranicza się do prawie wyłącznie przeglądarek opartych na webkitach. Dlatego, że będziesz potrzebować jQuery, użyj go mądrze, ale przed użyciem JS musisz się upewnić, że stylujesz jak najwięcej z css. Zauważ, że nie używam żadnych wizualnych stylizacji/manipulacji w moim JS.

+0

Pierwsze skrzypce są w sam raz. Dopilnuję, aby utworzyć moje css przed dodaniem skryptu zgodnie z sugestią. To właśnie ułatwiło mi życie - dziękuję bardzo! : D –

+0

Zastanów się, co chcesz zrobić i odpowiednio ustaw swoje elementy w css, aby znajdowały się w najbardziej optymalnej pozycji do rozpoczęcia, gdy tylko zajdzie taka potrzeba. – sg3s

+0

Oto skrzypce z tym, co mam do tej pory css mądre: http://jsfiddle.net/bridget_kilgallon/sMDyB/4/ skrzypce działa dobrze, ale przejścia nie działają w Dreamweaver .. Jakieś pomysły? Jeszcze raz dziękuję -BK –

1

Możesz użyć modułu effects z jQuery UI i użyć show('slide'). Spójrz na: http://jsfiddle.net/HAQyK/1/

+0

Oto kolejny skrzypce: http://jsfiddle.net/bridget_kilgallon/6eKGj/ To jest prawie dokładnie to, czego szukam wyjątkiem. .. 1. Wszystkie divy pojawiają się po kliknięciu linków - jak mogę połączyć z każdym div? 2. Czy istnieje sposób, aby spowodować przesunięcie elementu div do tyłu po kliknięciu łącza po raz drugi? (czyli ślizga się po slajdach click1 z ekranu po kliknięciu2) –

2

Bez użycia JavaScriptu ograniczasz się do używania przejść CSS, jeśli są dostępne. I choć są one imponujące, nie są szczególnie dobre, o ile już znalazłem, dla warunkowej animacji; mogą zasadniczo animować od punktu początkowego do innego punktu, a następnie z powrotem (w oparciu o macierzyste zdarzenia przeglądarki dostępne w samej przeglądarce), z JS można dodawać/usuwać dodatkowe klasy i elementy div poruszać się do treści serca, ale nie z "po prostu" CSS (choć chciałbym, aby się na tym nie udowodniono).

Najlepszą udało mi się wymyślić, jak dotąd, jest:

#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.

A to nie zsuwa się z boku (choć możesz to zrobić, jeśli chcesz), ponieważ nie wyglądało dobrze, biorąc pod uwagę ponowne przepłynięcie zawartości, które miało miejsce w miarę zmiany szerokości elementu.


Zmieniano, ponieważ myślę, że może być błędnie interpretowane część pierwotnego pytania:

... Chciałbym bez javascript

Skoro tak , a komentarz (poniżej) wydaje się sugerować, że jQuery jest opcją w porządku, może to być warte uwagi jako demonstracja:

​$('#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.

Odniesienia:

+0

Bardzo miło- dziękuję za odpowiedź! Jestem pod wrażeniem, że nie potrzebujesz skryptu, aby to zrobić. Wiem, że możesz użyć funkcji animacji, aby zmienić szerokość div, aby utworzyć poziomy slajd, ale nie zwariowałem także na temat zmiany szerokości zawartości (myślę, że jest to przepływ, do którego się odnosisz). Nie jestem przeciwny używaniu jquery do tworzenia slajdu - jestem po prostu bardzo nowy. Czy przypadkiem znasz skrypt, który stworzy ten efekt? –

+0

Tak; Myślę, że źle zrozumiałem, co miałeś na myśli, gdy przeczytałem "Chciałbym bez żadnego javascriptu". ... to był długi dzień ... =/I nie wiem o wcześniej istniejącym scenariuszu (choć podejrzewam, że jest ich wiele), ale tutaj jest taki, który wydaje się działać. Jeśli widzisz edycję, postępuj zgodnie z '


' =) –

+0

rad. to słodkie! Jedyny problem będzie po kliknięciu tego samego linka dwa razy div prześlizguje się przez całą drogę? –

0

Oto kod, który chcesz. Udowodniono, że działa na IE, Safari, Chrome, Firefox itp.

Oto część 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> 

Oto część jQuery w funkcji 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()); 
      }); 
     } 
     } 

Za ukrycie strzałek, proszę spojrzeć tutaj. Detect end of horizontal scrolling div with jQuery

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

* // Wizard jest div zawierający wszystkie treści