2014-01-30 4 views

Antwort

26

Ich denke, diese Art der Animation wahrscheinlich schwierig ist, vor allem jemand neu in jQuery nehmen in. Dies umfasst das Scrollen, das Erfassen der Mausrad-Ereignisse, das Verzögern der Animationen und vor allem das ordnungsgemäße Funktionieren in Cross-Browsern und in den Wisch- und Berührungsereignissen der mobilen Browser. Wenn Sie kein solides Verständnis haben, würde ich vorschlagen, dass Sie ein Plugin verwenden. Diese zwei sind die besten: One Page Scroll und Full Page.

Ich kann Ihnen nur die grundlegende Methode zeigen, wie Sie dies in cross-Browsern erledigen können. Wenn Sie möchten, dass es auf Mobilgeräten funktioniert, sollten Sie Ihren Part übernehmen und die Swipe- und Touch-Ereignisse hinzufügen. :)

//Set each section's height equals to the window height 
$('section').height($(window).height()); 
/*set the class 'active' to the first element 
this will serve as our indicator*/ 
$('section').first().addClass('active'); 

/* handle the mousewheel event together with 
DOMMouseScroll to work on cross browser */ 
$(document).on('mousewheel DOMMouseScroll', function (e) { 
    e.preventDefault();//prevent the default mousewheel scrolling 
    var active = $('section.active'); 
    //get the delta to determine the mousewheel scrol UP and DOWN 
    var delta = e.originalEvent.detail < 0 || e.originalEvent.wheelDelta > 0 ? 1 : -1; 

    //if the delta value is negative, the user is scrolling down 
    if (delta < 0) { 
     //mousewheel down handler 
     next = active.next(); 
     //check if the next section exist and animate the anchoring 
     if (next.length) { 
      /*setTimeout is here to prevent the scrolling animation 
      to jump to the topmost or bottom when 
      the user scrolled very fast.*/ 
      var timer = setTimeout(function() { 
       /* animate the scrollTop by passing 
       the elements offset top value */ 
       $('body, html').animate({ 
        scrollTop: next.offset().top 
       }, 'slow'); 

       // move the indicator 'active' class 
       next.addClass('active') 
        .siblings().removeClass('active'); 

       clearTimeout(timer); 
      }, 800); 
     } 

    } else { 
     //mousewheel up handler 
     /*similar logic to the mousewheel down handler 
     except that we are animate the anchoring 
     to the previous sibling element*/ 
     prev = active.prev(); 

     if (prev.length) { 
      var timer = setTimeout(function() { 
       $('body, html').animate({ 
        scrollTop: prev.offset().top 
       }, 'slow'); 

       prev.addClass('active') 
        .siblings().removeClass('active'); 

       clearTimeout(timer); 
      }, 800); 
     } 

    } 
}); 

Hier ist eine Demo: jsfiddle.net/NGj7F/

+0

Ya eine Seite blättern Plugin ist das beste, das ich hab benutzt. du einer der besten, die ich hier Antworten gesehen habe, wenn es um Web-Ui und UX geht. plus eins für dich. lol –

+0

Danke @ user3023823. lol :) –

+0

Das ist genug. Danke für die Hilfe @Marks. Ich schulde dir etwas. – winnyboy5

Verwandte Themen