2011-01-13 26 views
31

Tôi có một div.scroll_fixed với CSS sau đâyLàm cách nào để nhận div vị trí cố định để cuộn theo chiều ngang với nội dung? Sử dụng jQuery

.scroll_fixed { 
    position:absolute 
    top:210px 

} 
.scroll_fixed.fixed { 
    position:fixed; 
    top:0; 
} 

Tôi đang sử dụng mã jQuery sau đây để thiết lập các lớp .fixed khi div đạt top of the page.

var top = $('.scroll_fixed').offset().top - parseFloat($('.scroll_fixed').css('margin-top').replace(/auto/, 0)); 

$(window).scroll(function (event) { 
    // what the y position of the scroll is 
    var y = $(this).scrollTop(); 

    // whether that's below the form 
    if (y >= top) { 
     // if so, ad the fixed class 
     $('.scroll_fixed').addClass('fixed'); 
    } else { 
     // otherwise remove it 
     $('.scroll_fixed').removeClass('fixed'); 
    } 
}); 

Điều này rất hữu ích cho việc chỉnh sửa cuộn dọc. Nhưng với một cửa sổ trình duyệt nhỏ, cuộn ngang gây ra xung đột với nội dung ở bên phải của div cố định này.

Tôi muốn div cuộn với nội dung theo chiều ngang.

Bất kỳ ai cũng có thể chỉ cho tôi đúng hướng. Vẫn nhận được đôi chân của tôi ướt với JS/JQuery.

Tôi về cơ bản muốn nó hoạt động giống như hộp thứ hai trong số example này.

Trả lời

23

Bản demo là giữ các yếu tố của position:fixed và thao tác left tài sản của nguyên tố này:

var leftInit = $(".scroll_fixed").offset().left; 
var top = $('.scroll_fixed').offset().top - parseFloat($('.scroll_fixed').css('margin-top').replace(/auto/, 0)); 


$(window).scroll(function(event) { 
    var x = 0 - $(this).scrollLeft(); 
    var y = $(this).scrollTop(); 

    // whether that's below the form 
    if (y >= top) { 
     // if so, ad the fixed class 
     $('.scroll_fixed').addClass('fixed'); 
    } else { 
     // otherwise remove it 
     $('.scroll_fixed').removeClass('fixed'); 
    } 

    $(".scroll_fixed").offset({ 
     left: x + leftInit 
    }); 

}); 

Sử dụng leftInit mất một lề thể trái vào tài khoản. Hãy dùng thử tại đây: http://jsfiddle.net/F7Bme/

+0

Cảm ơn, về cơ bản đó là chức năng tôi muốn. Thật không may tôi có div của tôi lồng nhau trong một container cố định chiều rộng trung tâm. Khi lớp .fixed khởi động trong layout sẽ bị rối tung lên. Div cố định không còn theo chuyển động của bố cục trung tâm khi thay đổi kích thước cửa sổ. Không chắc tôi không thể giải quyết chuyện này. Xem câu trả lời của tôi [http://jsfiddle.net/35nyK/2/](http://jsfiddle.net/35nyK/2/). Khi tải đầu tiên của bạn và thử thay đổi kích thước hộp màu đỏ di chuyển đúng cách. Khi bạn cuộn và thử thay đổi kích thước, bố cục sẽ bị rối tung lên. Có cách nào để xử lý vị trí liên quan đến vùng chứa trung tâm đó không? – jfeust

+0

@jfeust: Thú vị, tôi sẽ chơi đùa với nó và xem những gì tôi có thể nghĩ ra. –

+0

Tuyệt vời, Cảm ơn rất nhiều –

21

Có thể bạn đã di chuyển vào lúc này, nhưng đây là câu trả lời cho bất kỳ ai khác đang tìm kiếm giải pháp phần tử cố định có thể cuộn ngang. Plugin jquery này được tạo ra để giải quyết vấn đề chính xác này.

Bản trình diễn này sử dụng tóm tắt giỏ hàng vẫn sẽ cuộn theo chiều ngang khi cố định lên đầu trang; và, tôi cũng đã sử dụng nó một tiêu đề trên dữ liệu bảng:

Demo: http://jsfiddle.net/y3qV5/434/ (cập nhật)

Plugin và nguồn: https://github.com/bigspotteddog/ScrollToFixed

Cách sử dụng:

$(document).ready(function() { 
    $('#cart').scrollToFixed({ marginTop: 10 }); 
}); 
+2

jsfiddle không hoạt động (Chrome 28.0.1500.71) –

+0

Jsfiddle ở trên hoạt động hoàn hảo trên Chrome 29.0.1547.66, do đó, trục trặc trong Chrome đã được cố định Tôi giả sử – Dejv

8

sử dụng tài sản css position:sticky để có được nó.

Đây là bài viết được giải thích và bản trình diễn trực tiếp.

http://updates.html5rocks.com/2012/08/Stick-your-landings-position-sticky-lands-in-WebKit

hạn chế duy nhất là khả năng tương thích với trình duyệt.

+3

Tính đến hôm nay, bản trình diễn dính không hoạt động ngay cả trong Google Chrome mới nhất, vì vậy nó không có vẻ là câu trả lời hữu ích nữa. Tốt liên kết nhưng tôi đang bỏ phiếu -1 – xmojmr

+0

'vị trí: dính;' là một giải pháp sạch. Có nhiều polyfills tốt làm cho nó hoạt động trong Chrome. – Duvrai

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