2012-03-25 11 views
13

私はJavascriptとJqueryをとても使い慣れています。私が作成したいのは、2列のページです。左側の列のリンクは、右側のdivを左から右に水平にスライドさせ、再びクリックすると表示外にスライドさせます。私はスライドトグル効果を使用する必要があることを知っているが、個々のリンクが異なるdivをスライドさせるような方法で実装するのに問題がある...私はGoogle検索で見つかったいくつかのjsfiddlesを調整しようとした私はかなりjavascriptになると失われています。JQueryでdivsを水平方向にスライドする

は、これまでのところ、これは私が正常に微調整することができましたのみフィドル... http://jsfiddle.net/bridget_kilgallon/HAQyK/
が、垂直方向にそれらのスライドで、クリックされたときに、すべてのdivをロードします。

ここで私は私がどんなjavascriptをなしたいレイアウト用に作成したフィドルだ... http://jsfiddle.net/bridget_kilgallon/NhanG/

助けてください! :) -Bridget

答えて

34

残念ながら、jQueryを備えた既成の「水平」スライドアニメーションはありません。あなたがjQuery UIのようなより大きなパッケージを持っていない限り。しかし、私はそれが必要とは思わない。

唯一の目的は、効果を達成するためにjQueryでanimate()関数を創造的に使用することです。

記述が曖昧だったので、私はので、私は、パネルの切り替えでマイナーな効果のために2例作られたあなたが行きたいと思いますどちら知りませんでした:

http://jsfiddle.net/sg3s/rs2QK/を - この1つは、左からパネルオープンをスライドし、右に閉じる

http://jsfiddle.net/sg3s/RZpbK/ - パネルは、新しいものを開くために左から右にスライドして開きます。

資源:

あなたはまだとにかく、純粋なCSSでこれを行うことはできません。トランジションのサポートは基本的なもので、Webkitベースのブラウザに限られています。 jQueryをスマートに使う必要があるので、JSを使用する前にできるだけCSSでスタイルを設定する必要があります。私はJSで視覚的なスタイリング/操作を使用していないことに注意してください。

+0

最初のフィドルはちょうど良いです。私はあなたが提案したようにスクリプトを追加する前に私のCSSを作成することを確認します。これで私の人生はずっと楽になりました - ありがとう! :D –

+0

あなたが何をしたいか考えて、それに応じて要素をCSSに配置して、必要なときにすぐに開始できる最適な位置に配置します。 – sg3s

+0

ここで私はこれまでのCSSの賢明さを持っているものを持っています:http://jsfiddle.net/bridget_kilgallon/sMDyB/4/フィドルはうまく動作しますが、トランジションはDreamweaverで動作していません。もう一度ありがとうございます-BK –

1

jQuery UIのeffectsモジュールを使用してshow('slide')を使用できます。 Look http://jsfiddle.net/HAQyK/1/

+0

を含むdiv要素であることは別のフィドルです:http://jsfiddle.net/bridget_kilgallon/6eKGj/これはほぼ正確に私は除いて探しているものです。 .. 1.リンクがクリックされると、すべてのdivが表示されます。 - 個々のdivにリンクするにはどうすればいいですか? 2.リンクを2回クリックしたときに、divを逆方向にスライドさせる方法はありますか? (つまり、クリック1のスライドをクリック2の画面の左にスライドさせたスライド) –

2

JavaScriptを使用しないと、CSSトランジションを使用することができます。これらはかなり印象的ですが、条件付きアニメーションについてはまだわかりません。基本的に開始点から別の点までアニメートしてから戻ってくることができます(ブラウザ自体で利用可能なネイティブブラウザイベントに基づいて)。JSを使用すると、追加のクラスを追加/削除し、div要素をあなたの心のコンテンツに移動できます「ただの」CSSではなく(私はこれについて間違っていることを証明したいと思うが)。

私はこれまでのところ、思い付くことができました最高です:

#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

これは、要素の幅が変更されたときに起こっていたコンテンツの再リフローを考慮すると、見た目が良くなかったため、側面からスライドしません(ただし、できます)。

私はjavascriptの

なしたい場合ということ...:私は、私は元の質問の一部を誤解しているかもしれないと思うので、


を編集しますjQueryは大丈夫だと示唆しているようですが、これはデモとして価値があるかもしれません:

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

参考文献:

+0

レスポンスのために非常に感謝しています!私はあなたがこれを行うためのスクリプトを必要としなかったことに感心しています。私はアニメーション機能を使用してdivの幅を変更して水平スライドを作成することができることを知っていますが、コンテンツの幅を変更することに夢中ではありませんでした(私はそれがあなたが参照している再フローだと思います)。私はスライドを作成するためにjqueryを使用することに反対していません - 私はちょうどそれに新しいです。あなたは偶然この効果を生み出すスクリプトを知っていますか? –

+0

ええ;私は "私はどんなjavascriptなしでしたいですか?"と読んだときにあなたが意味するものを誤解したと思います。 ...それは長い一日だった... = /私は既存のスクリプト(私は多くがあるとは思うが)については知らないが、ここではうまくいくようだ。あなたが '


' = =) –

+0

radに続いて編集を見ると、それはかわいい!唯一の問題は、同じリンクを2回クリックすることです。 –

0

ここには、必要なコードがあります。 IE、Safari、Chrome、Firefoxなどで動作することが証明されています

ここは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> 

JavaScript関数のjQueryの部分です。

 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()); 
      }); 
     } 
     } 

ここを見てください。 * //ウィザードDetect end of horizontal scrolling div with jQuery

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

はここですべてのコンテンツ

関連する問題