2012-01-06 6 views
0

jQueryを初めて使用しました。私は.slideToggleを使って、私のすべてのコンテンツの一番下にDIVを表示させています。私はDIVを表示させるためのコードを持っており、ページはそのDIVまでスクロールしています。jQuery - SlideToggle、閉じるスクロールボタン?

ただし、コンテンツを非表示にしてスクロールバックする追加のボタン/リンクを作成したいとします。

私が持っているコードでは、このすべてを行うことができますが、ショーと非表示を切り替えるリンクは1つしかありません。これは非表示リンクがすべてのコンテンツの一番下に来るようにするためにはあまり役に立ちません。

どうすればいいか教えてください。ここで

jQueryのコード

var height = $('#slickbox').hide().height(); 
$('.more a').toggle(function() { 
    $('#slickbox').slideDown(3200); 
    $('html, body').animate({ scrollTop: '+=' + height }, 3200); 
    return false; 
}, function() { 
    $('#slickbox').slideUp(3200); 
    $('html, body').animate({ scrollTop: '-=' + height }, 3200); 
    return false; 
}); 

HTML

<div style="height: 300px; border: solid 1px #ddd;">I'm using space!</div> 
<div class="donate done"> 
    <h3 class="more"><a href="#" title="More"> More </a></h3> 
</div> 
<div id="slickbox"> 
    <div id="slide_show"> 
     <div id="slider"> 
      <ul> 
       <li> 
        <img alt="figure 1" src="http://dummyimage.com/700x1300/000/fff&text=I'm+a+picture!,+woohoo!" width="700" height="1300" /> 
       </li> 
       <li> 
        <img alt="figure 1" src="http://dummyimage.com/700x1300/000/fff&text=I'm+a+picture!,+woohoo!" width="700" height="1300" /> 
       </li> 
      </ul> 
     </div> 
    </div> 
</div> 
<div class="close"> 
    <h3 class="more"><a href="#" title="More">Close</a></h3> 
</div> 

は、私がこれまで持っているものの一例である:あなたがより多くのボタンをクリックするとhttp://jsfiddle.net/eMYJx/47/

は、すべてが低下し、スクロール私が望むやり方。しかし、閉じるボタンを押すと、それを2回押す必要があります。これを回避する方法はありますか?

+0

両方のフィールドを同じハンドラにバインドしました。しかし、最初にオープンハンドラを使用しているときに 'close'をクリックすると、 (もっと前に閉じると、画像が開きます)。あなたは両方の画像を切り替えることを望んでいるのですか、いつも開いていて、いつも閉じることができますか? – mrtsherman

+0

1つはいつでも開くことができ、1つはいつも閉じることができます。これをどうやって行うのですか? –

答えて

1

私はこれを好きです。 More/Closeを切り替えるリンクを1つ使用します。アニメーションコールバックを使用して切り替えます。また

http://jsfiddle.net/eMYJx/49/

var height = $('#slickbox').hide().height(); 
$('.more a').toggle(function() { 
    var $this = $(this); 
    $('#slickbox').slideDown(3200); 
    $('html, body').animate({ scrollTop: '+=' + height }, 3200, function() { 
     $this.html('Close'); 
    });  
    return false; 
}, function() { 
    var $this = $(this); 
    $('#slickbox').slideUp(3200); 
    $('html, body').animate({ scrollTop: '-=' + height }, 3200, function(){ 
     $this.html('More'); 
    }); 
    $(this).html('More'); 
    return false; 
}); 

あなたは両方のボタンを維持したい場合は、それぞれに個別のハンドラをバインドします。両方ともクリックではなく、もう一方はトグルコードの最初の部分を実行し、「閉じる」は後半を実行します。

+0

返信ありがとうございました!それは本当に便利なヒントです、私はあなたが私にそれを見せてくれてうれしいです。私はこれを挑戦的に使っていますが、今は2つのボタンに分ける必要があります。別のハンドラーを各ボタンにバインドする必要があると言うとき、2つの別々のコード、1つのボタンを使用してdivを表示し、完全に新しいコードとボタンを使用して非表示にすることを意味しますか? –

+0

はい、そうです。 http://jsfiddle.net/eMYJx/52/ – mrtsherman

+0

ありがとうございました! –

関連する問題