2012-06-26 19 views
9

Tôi đang sử dụng JQuery scrollTo plugin trên one-page site để cuộn theo chiều dọc giữa các phần khác nhau.Plugin cuộn jQueryQuery trở thành Jerky trên iOS

Cuộn hoạt động tốt trong tất cả các trình duyệt ngoại trừ iOS Safari cuộn nhưng rất giật. Tôi đang sử dụng một số plugin Jquery khác trên trang để có thể xung đột với một trong số các plugin này.

Nếu có ai biết cách thay thế cho scrollTo hoạt động trơn tru trên iPad hoặc có thể đề xuất nơi bắt đầu giải quyết vấn đề tôi đánh giá cao sự trợ giúp. Tôi đã thử this solution nhưng không thành công.

+1

bạn không cần một plugin cho việc này. jQuery có .scrollTop từ 1.2.6 http://api.jquery.com/scrollTop/ Bạn thậm chí có thể tạo hiệu ứng động bằng cách sử dụng phương thức animate. Giống như .animate ({scrollTop: 0}, 2000, 'ease') – demux

+0

liên quan: http://stackoverflow.com/questions/8970740/ios-safari-scroll-to-top-does-not-work-on-certain -pages-why – demux

+1

plugin scrollTo vẫn còn có nhiều tính năng nâng cao mà cốt lõi vani scrollTop không có. – squarecandy

Trả lời

1

Cảm ơn Arnar.

Lời khuyên của bạn đưa tôi đi đúng hướng và với sự trợ giúp của this JSFiddle bây giờ tôi có chính xác smooth scroll i wanted to achieve với cuộn hoạt hình mượt mà đến từng phần và tô sáng tự động của mục menu hoạt động.

// Cache selectors 
var lastId, 
    topMenu = $("#top-menu"), 
    topMenuHeight = topMenu.outerHeight()+15, 
    // All list items 
    menuItems = topMenu.find("a"), 
    // Anchors corresponding to menu items 
    scrollItems = menuItems.map(function(){ 
     var item = $($(this).attr("href")); 
     if (item.length) { return item; } 
    }); 

// Bind click handler to menu items 
// so we can get a fancy scroll animation 
menuItems.click(function(e){ 
    var href = $(this).attr("href"), 
     offsetTop = href === "#" ? 0 : $(href).offset().top-topMenuHeight+1; 
    $('html, body').stop().animate({ 
     scrollTop: offsetTop 
    }, 300); 
    e.preventDefault(); 
}); 

// Bind to scroll 
$(window).scroll(function(){ 
    // Get container scroll position 
    var fromTop = $(this).scrollTop()+topMenuHeight; 

    // Get id of current scroll item 
    var cur = scrollItems.map(function(){ 
    if ($(this).offset().top < fromTop) 
     return this; 
    }); 
    // Get the id of the current element 
    cur = cur[cur.length-1]; 
    var id = cur && cur.length ? cur[0].id : ""; 

    if (lastId !== id) { 
     lastId = id; 
     // Set/remove active class 
     menuItems 
     .parent().removeClass("active") 
     .end().filter("[href=#"+id+"]").parent().addClass("active"); 
    }     
}); 
14

Hãy thử điều này một

$.scrollTo(SELECTOR, 800, { 
    'axis':'y' 
}); 
+1

bạn đã cứu tôi! thanx! Một bài đăng cũ 2 năm và bạn đã đăng một tháng trước và tôi đã sử dụng bản sửa lỗi này ngay bây giờ ... trùng hợp ngẫu nhiên? LOL – otinanai

Các vấn đề liên quan