2015-05-08 18 views
7

Tôi có 2 div chiều cao đầy đủ. Khi bạn di chuyển xuống trang, một div sẽ cuộn lên và cuộn còn lại theo hướng ngược lại. Điều này làm việc tuyệt vời.Cuộn hướng thay thế với nội dung bên dưới

Tôi đang cố gắng giữ hiệu ứng này nhưng đặt nội dung toàn bộ chiều rộng bình thường bên dưới nó trong khi cố gắng duy trì cuộn tự nhiên. Vì vậy, tôi muốn giữ hiệu ứng cuộn thay thế nhưng khi tôi đến đáy của div cuối cùng sử dụng hiệu ứng này, tôi muốn tiếp tục cuộn bình thường để xem nội dung bình thường bên dưới nó.

Dưới đây là jsFiddle của tôi, hiện nay nó lơ lửng trên tác dụng tôi tham khảo: http://jsfiddle.net/u9apC/116/ và JS được dán bên dưới để tham khảo:

(function ($) { 
var top = 0; 

$(document).ready(function() { 
    var contentHeight = $('.right').height(), 
     contents = $('.right > .content').length; 

    top = (0 - (contentHeight * (contents - 1))); 

    $('.right').css('top', top + 'px'); 
}); 

$(window).resize(function() { 
    var contentHeight = $('.right').height(), 
     contents = $('.right > .content').length; 

    top = (0 - (contentHeight * (contents - 1))); 

    $('.right').css('top', (top + $(window).scrollTop()) + 'px'); 
}); 

$(window).scroll(function() { 
    $('.right').css('top', (top + $(window).scrollTop()) + 'px'); 
}); 

})(jQuery); 

EDIT

Dưới đây là một minh họa về những gì tôi muốn:

enter image description here

+0

"Tôi đang cố giữ hiệu ứng này nhưng đặt nội dung có chiều rộng đầy đủ bình thường bên dưới" - bạn có thể chỉ định chính xác hơn ý của bạn hoặc đặt một số div thử nghiệm với số không? –

+0

@AndriyF. Trong JS Fiddle, nếu bạn cuộn xuống, có một khối màu lục lam. Tôi chỉ muốn ngồi bên dưới các hộp được đánh số như nội dung xếp chồng bình thường. Chỉ khi bạn đã đến phần cuối của div đa hướng, nó sẽ di chuyển đến khung nhìn. Tôi đã thêm hình ảnh vào câu hỏi để giúp chứng minh tôi cần gì. – egr103

Trả lời

2

Tôi hy vọng đây là những gì bạn đang theo dõi - hơi khó để hình dung từ mô tả.

Có một vài thủ thuật để làm việc này:

  1. Đảo ngược hướng di chuyển khi col trên bên phải đi tích cực
  2. Đảm bảo div .row có lề trên đủ để đẩy nó xuống đến cuối col bên trái.

    (function ($) { 
        var top = 0; 
        var contentHeight = 0; 
    
        $(document).ready(function() { 
         calcContentHeight(); 
        }); 
    
        $(window).resize(function() { 
         calcContentHeight(); 
        }); 
    
        $(window).scroll(function() { 
         setRightTop(); 
        }); 
    
        function calcContentHeight() { 
         var contents = $('.right > .content').length - 1; 
         contentHeight = $('.right').height() * contents; 
    
         top = 0 - contentHeight; 
         setRightTop(); 
        } 
    
        function setRightTop() { 
         var rightTop = top + $(window).scrollTop(); 
    
         //1. don't allow right col top to go positive 
         if(rightTop > 0) rightTop = 0 - rightTop; 
         $('.right').css('top', rightTop + 'px'); 
    
         //2. Ensure .row has sufficient top margin 
         $('.row').css('margin-top', contentHeight + 'px'); 
        } 
    
    })(jQuery); 
    

Xem cập nhật JSFiddle đây: http://jsfiddle.net/u9apC/126/

Tôi cũng đã refactored mã của bạn một chút để giảm sự chồng chéo.

+0

Thats hoàn hảo, bạn là một phao cứu sinh! Cảm ơn. Tôi hoàn toàn không nghĩ về cách tiếp cận của bạn. Tôi đã chấp nhận câu trả lời và tiền thưởng là của bạn !! – egr103

+0

Tuyệt vời! Cảm ơn rất nhiều, và vui mừng được giúp đỡ! – beercohol

0

Bạn chỉ cần làm cho anh ấy ight của div.body bằng tổng chiều cao của các phần tử bên trong nó. Hoặc bằng js hoặc css.

+0

Làm cách nào để thực hiện điều này một cách chính xác? Mặc dù tôi không thể thấy điều này sẽ hiệu quả như thế nào vì khi tôi thay đổi chiều cao thành 300% để chứa 3 phần chiều cao 100%, chức năng này hoàn toàn bị phá vỡ – egr103

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