2016-07-19 14 views
0

私は単純なスライダを作成しようとしています。ここに例がありますが、スライダーの次のボタンと前のボタンは正しく動作しません。私は2つのエラーを参照してくださいjQueryバインド/アンバインドが動作しない

// next 
 
var next = $('.next').click(function() { 
 
    var storepos = $(".storepos").val(); 
 
    $('.prev').bind('click'); 
 
    $('.storepos').val($('.storepos').val()/1 + 110); 
 
    $('.container').animate({ 
 
    scrollLeft: $('.storepos').val() 
 
    }, 200); 
 
}); 
 

 
//prev 
 
$('.prev').click(function() { 
 
    var storepos = $(".storepos").val(); 
 
    $('.next').bind('click'); 
 
    $('.storepos').val($('.storepos').val()/1 - 110); 
 
    $('.container').animate({ 
 
    scrollLeft: $('.storepos').val() 
 
    }, 200); 
 
}); 
 

 
//after scrollend right event 
 
$('.container').bind('scroll', function() { 
 
    if ($('.container').scrollLeft() + $(this).innerWidth() >= $(this)[0].scrollWidth) { 
 
    $('.next').unbind('click'); 
 
    } 
 
}); 
 
//after scrollend left event        
 
$('.container').bind('scroll', function() { 
 
    if ($('.container').scrollLeft() < 1) { 
 
    $('.prev').unbind('click'); 
 
    } 
 
});
.container { 
 
    overflow: hidden !important 
 
} 
 

 
.container::-webkit-scrollbar { 
 
    width: 0; 
 
    height: 0 
 
} 
 

 
.content { 
 
    width: 1600px 
 
} 
 

 
.items { 
 
    background: black; 
 
    color: white; 
 
    margin-left: 10px; 
 
    width: 100px; 
 
    height: 100px; 
 
    float: left; 
 
    text-align: center 
 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<div class="container"> 
 
    <div class="content"> 
 
    <div class="items">1</div> 
 
    <div class="items">2</div> 
 
    <div class="items">3</div> 
 
    <div class="items">4</div> 
 
    <div class="items">5</div> 
 
    <div class="items">6</div> 
 
    <div class="items">7</div> 
 
    <div class="items">8</div> 
 
    <div class="items">9</div> 
 
    <div class="items">10</div> 
 
    </div> 
 
</div> 
 
<a href="#" class="prev">Prev</a>/<a href="#" class="next">Next</a> 
 

 
<input class="storeposx" value="" /> 
 
<input class="storepos" value="" />

fiddle

答えて

1

。まず、前のボタンが募集からアクティブになり、スクロールして負の値にすることができます。第二に、両側の端に達するとイベントをバインド解除しますが、それ以降はバインドしません。

2つの変数を使用してボタンの状態を維持しました。私が開始または終了位置に到達すると、私はそれらをアンバインドしません、代わりに私はちょうどクリック時にfalseを返します。優れた

// next 
 
var next = $('.next').click(function() { 
 
\t if (!nextIsActive || $('.container').is(':animated')) return false; 
 
\t var storepos = $(".storepos").val(); 
 
\t $('.prev').bind('click'); 
 
\t $('.storepos').val($('.storepos').val()/1 + 110); 
 
\t $('.container').animate({ 
 
\t \t scrollLeft: $('.storepos').val() 
 
\t }, 200); 
 
}); 
 

 
//prev 
 
$('.prev').click(function() { 
 
\t if (!prevIsActive || $('.container').is(':animated')) return false; 
 
\t var storepos = $(".storepos").val(); 
 
\t $('.next').bind('click'); 
 
\t $('.storepos').val($('.storepos').val()/1 - 110); 
 
\t $('.container').animate({ 
 
\t \t scrollLeft: $('.storepos').val() 
 
\t }, 200); 
 
}); 
 

 
var nextIsActive=true; 
 
var prevIsActive=false; 
 
//after scrollend right event 
 
$('.container').bind('scroll', function() { 
 
\t if ($('.container').scrollLeft() + $(this).innerWidth() >= $(this)[0].scrollWidth) { 
 
\t \t nextIsActive=false; 
 
\t \t }else{ 
 
\t \t nextIsActive=true; 
 
\t } 
 
}); 
 
//after scrollend left event        
 
$('.container').bind('scroll', function() { 
 
\t if ($('.container').scrollLeft() < 1) { 
 
\t \t prevIsActive=false; 
 
\t \t }else{ 
 
\t \t prevIsActive=true; 
 
\t } 
 
});
.container{overflow:hidden !important} 
 
.container::-webkit-scrollbar { 
 
    width:0; 
 
    height:0 
 
} 
 
.content {width:1600px} 
 
.items { background:black; 
 
     color:white; 
 
     margin-left:10px; 
 
     width:100px; 
 
     height:100px; 
 
     float:left; 
 
     text-align:center 
 
     }
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<div class="container"> 
 
<div class="content"> 
 
<div class="items">1</div> 
 
<div class="items">2</div> 
 
<div class="items">3</div> 
 
<div class="items">4</div> 
 
<div class="items">5</div> 
 
<div class="items">6</div> 
 
<div class="items">7</div> 
 
<div class="items">8</div> 
 
<div class="items">9</div> 
 
<div class="items">10</div> 
 
</div> 
 
</div> 
 
<a href="#" class="prev">Prev</a>/<a href="#" class="next">Next</a> 
 

 
<input class="storeposx" value="" /> 
 
<input class="storepos" value="" />

+0

私は、次または前のボタンを非常に高速でクリックしたときに、値の更新が正常に動作しないので、遅延/のsetTimeoutオプションを追加する – Megi

+0

どのように..あなたに感謝。 – Megi

+0

'$( '。container')を追加しました。スクロール中にクリックしないようにするには、それが問題の原因です。 –

関連する問題