Je crée une page, où en faisant défiler vers le bas, le côté gauche de la page glissera vers le haut et le côté droit de la page glissera vers le bas. et en faisant défiler vers le haut, le côté gauche de la page glissera vers le bas et le côté droit de la page glissera vers le haut.

J'ai ce travail si l'utilisateur fait défiler une seule fois (en utilisant une molette de la souris), lorsque vous faites défiler plusieurs fois (avant la fin de la fonction, les côtés gauche et droit continueront de défiler et de gâcher. Existe-t-il un moyen de désactiver plus de un parchemin?

J'ai ajouté mon code et le violon ci-dessous.

<div class="left">
    <div id="left1" class="onLeft Side">
    </div>

    <div id="left2" class="onLeft Side">
    </div>

    <div id="left3" class="onLeft Side">
    </div>
</div>

<div class="right">
    <div id="right3" class="onRight Side">
    </div>

    <div id="right2" class="onRight Side">
    </div>

    <div id="right1" class="onRight Side">
    </div>
</div>

    $(document).ready(function(){
        var wholeHeight = jQuery('.right').height();
        var rightLength = jQuery('.onRight').length;
        jQuery('.right').css({top:-((wholeHeight*rightLength)-wholeHeight)});

        var leftHeight = jQuery('.left').height();
        var leftLength = jQuery('.onLeft').length;
        var tot = (leftHeight * leftLength) - leftHeight;
        console.log('tot', tot)
        $('body').bind('mousewheel', function(e){
            var height = jQuery('.left').height();
            var leftTop = jQuery('.left').position().top;
            var rightTop = jQuery('.right').position().top;
            if(e.originalEvent.wheelDelta /120 > 0) {
                if (leftTop != 0) {
                    console.log('scrolling up !');
                    jQuery('.left').animate({top:leftTop + height});
                    jQuery('.right').animate({top:rightTop - height});
                } else {
                    console.log('The up end');
                }
            } else {
                if (leftTop != -tot) {
                    console.log('scrolling down !');
                    jQuery('.left').animate({top:leftTop - height});
                    jQuery('.right').animate({top:rightTop + height});
                } else {
                    console.log('the down end')
                }
            }
        });
    });

https://jsfiddle.net/11pftj26/

Merci

4
DevStacker 8 mars 2016 à 17:41

3 réponses

Meilleure réponse

Essaye ça:

    $(document).ready(function(){
        var wholeHeight = jQuery('.right').height();
        var rightLength = jQuery('.onRight').length;
        jQuery('.right').css({top:-((wholeHeight*rightLength)-wholeHeight)});scrolling=false;
        var leftHeight = jQuery('.left').height();
        var leftLength = jQuery('.onLeft').length;
        var tot = (leftHeight * leftLength) - leftHeight;
        console.log('tot', tot)
        $('body').bind('mousewheel', function(e){
    if(scrolling)
        return;
      scrolling=true;
            var height = jQuery('.left').height();
            var leftTop = jQuery('.left').position().top;
            var rightTop = jQuery('.right').position().top;
            if(e.originalEvent.wheelDelta /120 > 0) {
                if (leftTop != 0) {
                    console.log('scrolling up !');
                    jQuery('.left').animate({top:leftTop + height},{done:function(){scrolling=false}});
                    jQuery('.right').animate({top:rightTop - height},{done:function(){scrolling=false}});
                } else {
                    console.log('The up end');
            scrolling=false;
                }
            } else {
                if (leftTop != -tot) {
                    console.log('scrolling down !');
                    jQuery('.left').animate({top:leftTop - height},{done:function(){scrolling=false}});
                    jQuery('.right').animate({top:rightTop + height},{done:function(){scrolling=false}});
                } else {
                    console.log('the down end');
        scrolling=false;
                }
            }

        });
    });

Violon en action

2
Prasad 8 mars 2016 à 16:56

Vous pouvez utiliser la fonction .one() de Jquery, lisez le guide officiel.

http://api.jquery.com/one/

0
Claudio King 8 mars 2016 à 14:46

Lorsque vous faites défiler deux fois rapidement vos calculs pour leftTop et leftRight seront désactivés. Ce que vous pouvez faire est de séparer le calcul supérieur de l'état DOM:

https://jsfiddle.net/11pftj26/2/

$(document).ready(function(){
    var wholeHeight = jQuery('.right').height();
    var rightLength = jQuery('.onRight').length;
    jQuery('.right').css({top:-((wholeHeight*rightLength)-wholeHeight)});

    var leftHeight = jQuery('.left').height();
    var leftLength = jQuery('.onLeft').length;
    var tot = (leftHeight * leftLength) - leftHeight;

    var index = 0;

    function animate(index) {
        jQuery('.left').stop().animate({top: -1 * index * leftHeight});
        jQuery('.right').stop().animate({top: -1 * (rightLength - index - 1) * wholeHeight });
    }

    $('body').bind('mousewheel', function(e) {

        if (e.originalEvent.wheelDelta > 0) {
            index = Math.max(0, index - 1);
        } else {
            index = Math.min(index + 1, rightLength - 1);
        }

        animate(index);
    });
});
0
Halcyon 8 mars 2016 à 15:01