2010-04-05 63 views
15

Có cách nào đơn giản trong jQuery để phát hiện khi thanh cuộn xuất hiện và biến mất trên div có tràn: tự động không? (Fingers Giống như một sự kiện? Chéo ...)Thanh cuộn xuất hiện/biến mất sự kiện trong jQuery?

(Tôi không muốn phải nhìn vào chiều cao của nội dung của div)

+0

Không có sự kiện như vậy. – vooD

+0

Hãy xem giải pháp của OrganicPanda về chủ đề khác này: [http://stackoverflow.com/questions/2175992/detect-when-window-vertical-scrollbar-appears](http://stackoverflow.com/questions/2175992/ detect-when-window-vertical-scrollbar-xuất hiện) –

+0

Có thể trùng lặp [Phát hiện khi thanh cuộn dọc cửa sổ xuất hiện] (http://stackoverflow.com/questions/2175992/detect-when-window-vertical-scrollbar-appears) – user

Trả lời

6

Như những người khác đã nói, không có cách nào dễ dàng. Dưới đây là một số mã tôi đã sử dụng trong quá khứ để phát hiện xem có một thanh cuộn hay không.

// Used like $('#my-id').hasScrollbar(); 

jQuery.fn.hasScrollbar = function() { 
    var scrollHeight = this.get(0).scrollHeight; 

    //safari's scrollHeight includes padding 
    if ($.browser.safari) 
     scrollHeight -= parseInt(this.css('padding-top')) + parseInt(this.css('padding-bottom')); 

    if (this.height() < scrollHeight) 
     return true; 
    else 
     return false; 
} 

Bạn sẽ tự cần phải gọi này sau khi thêm hoặc loại bỏ các nội dung từ div và nó có lẽ sẽ chỉ làm việc nếu bạn gọi nó trên các yếu tố có thể nhìn thấy, nhưng nó tốt hơn so với bắt đầu từ đầu.

1

Theo như tôi biết, không có sự kiện cho cái đó.
Tuy nhiên, bạn "có thể" viết sự kiện đặc biệt của riêng mình cho điều đó, tôi đoán bạn phải kiểm tra để biết chiều cao và chiều rộng.

Có thể phát hiện thanh cuộn nếu số .innerHeight exceds .outerHeight giá trị của một phần tử.

+0

Cảm ơn tôi đã cố gắng để tránh điều này như tôi đang sử dụng divs hoàn toàn vị trí bên trong của một divs tương đối vị trí. tràn: tự động làm việc cho điều này (kỳ diệu), nhưng nó không phải là dễ dàng như vậy để tính toán chiều cao của các yếu tố bên trong. – Travis

7

Một cách khác để đạt được điều này là để kiểm tra xem có thanh cuộn hiện nay sử dụng scrollLeft hoặc scrollTop:

//nudge the scrollbar away from its starting position 

$('#your_selector').scrollLeft(1); 

//A value of 0 is assigned if the scrollbars are at their default position, 
//or are abscent 

if($('#your_selector').scrollLeft() !== 0) return true; 

//put the scrollbar back to its starting position 

$('#your_selector').scrollLeft(0); 
+0

Ý tưởng rất gọn gàng! –

+0

Điều này trông giống như giải pháp đơn giản nhất, nhưng tôi tin rằng nó cũng sẽ kích hoạt một reflow. – nogridbag

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